libbluray | branch: master | hpi1 <[email protected]> | Mon Dec 1 11:47:28 2014 +0200| [172e33425b22e16cce347171ef3db89eacaf6a04] | committer: hpi1
Win32: fix charset issues in storage paths Avoid using JVM init arguments for path. In Windows JVM init arguments should be encoded using current locale. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=172e33425b22e16cce347171ef3db89eacaf6a04 --- src/libbluray/bdj/bdj.c | 21 +++++++++++--------- src/libbluray/bdj/java/org/videolan/Libbluray.java | 5 ++++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c index 746d3c1..565eefa 100644 --- a/src/libbluray/bdj/bdj.c +++ b/src/libbluray/bdj/bdj.c @@ -343,7 +343,8 @@ static int _get_method(JNIEnv *env, jclass *cls, jmethodID *method_id, return 1; } -static int _bdj_init(JNIEnv *env, struct bluray *bd, const char *disc_root, const char *bdj_disc_id) +static int _bdj_init(JNIEnv *env, struct bluray *bd, const char *disc_root, const char *bdj_disc_id, + BDJ_STORAGE *storage) { if (!bdj_register_native_methods(env)) { BD_DEBUG(DBG_BDJ | DBG_CRIT, "Couldn't register native methods.\n"); @@ -353,7 +354,8 @@ static int _bdj_init(JNIEnv *env, struct bluray *bd, const char *disc_root, cons jclass init_class; jmethodID init_id; if (!_get_method(env, &init_class, &init_id, - "org/videolan/Libbluray", "init", "(JLjava/lang/String;Ljava/lang/String;)V")) { + "org/videolan/Libbluray", "init", + "(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V")) { return 0; } @@ -361,8 +363,12 @@ static int _bdj_init(JNIEnv *env, struct bluray *bd, const char *disc_root, cons jlong param_bdjava_ptr = (jlong)(intptr_t) bd; jstring param_disc_id = (*env)->NewStringUTF(env, disc_id); jstring param_disc_root = (*env)->NewStringUTF(env, disc_root); + jstring param_persistent_root = (*env)->NewStringUTF(env, _bdj_persistent_root(storage)); + jstring param_buda_root = (*env)->NewStringUTF(env, _bdj_buda_root(storage)); + (*env)->CallStaticVoidMethod(env, init_class, init_id, - param_bdjava_ptr, param_disc_id, param_disc_root); + param_bdjava_ptr, param_disc_id, param_disc_root, + param_persistent_root, param_buda_root); if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionDescribe(env); @@ -419,7 +425,7 @@ static int _find_jvm(void *jvm_lib, JNIEnv **env, JavaVM **jvm) return 0; } -static int _create_jvm(void *jvm_lib, const char *java_home, JNIEnv **env, JavaVM **jvm, BDJ_STORAGE *storage) +static int _create_jvm(void *jvm_lib, const char *java_home, JNIEnv **env, JavaVM **jvm) { (void)java_home; /* used only with J2ME */ @@ -432,9 +438,6 @@ static int _create_jvm(void *jvm_lib, const char *java_home, JNIEnv **env, JavaV JavaVMOption* option = calloc(1, sizeof(JavaVMOption) * 20); int n = 0; JavaVMInitArgs args; - option[n++].optionString = str_printf("-Ddvb.persistent.root=%s", _bdj_persistent_root(storage)); - option[n++].optionString = str_printf("-Dbluray.bindingunit.root=%s", _bdj_buda_root(storage)); - option[n++].optionString = str_dup ("-Dawt.toolkit=java.awt.BDToolkit"); option[n++].optionString = str_dup ("-Djava.awt.graphicsenv=java.awt.BDGraphicsEnvironment"); option[n++].optionString = str_printf("-Xbootclasspath/p:%s", _find_libbluray_jar()); @@ -503,7 +506,7 @@ BDJAVA* bdj_open(const char *path, struct bluray *bd, JNIEnv* env = NULL; JavaVM *jvm = NULL; - if (!_find_jvm(jvm_lib, &env, &jvm) && !_create_jvm(jvm_lib, java_home, &env, &jvm, storage)) { + if (!_find_jvm(jvm_lib, &env, &jvm) && !_create_jvm(jvm_lib, java_home, &env, &jvm)) { dl_dlclose(jvm_lib); return NULL; } @@ -517,7 +520,7 @@ BDJAVA* bdj_open(const char *path, struct bluray *bd, BD_DEBUG(DBG_BDJ, "Java version: %d.%d\n", version >> 16, version & 0xffff); } - if (!_bdj_init(env, bd, path, bdj_disc_id)) { + if (!_bdj_init(env, bd, path, bdj_disc_id, storage)) { bdj_close(bdjava); return NULL; } diff --git a/src/libbluray/bdj/java/org/videolan/Libbluray.java b/src/libbluray/bdj/java/org/videolan/Libbluray.java index 9904db0..a69b2ed 100644 --- a/src/libbluray/bdj/java/org/videolan/Libbluray.java +++ b/src/libbluray/bdj/java/org/videolan/Libbluray.java @@ -46,9 +46,12 @@ import org.videolan.media.content.PlayerManager; * This class allows BDJ to call various libbluray functions. */ public class Libbluray { - protected static void init(long nativePointer, String discID, String discRoot) { + protected static void init(long nativePointer, String discID, String discRoot, + String persistentRoot, String budaRoot) { System.setProperty("bluray.vfs.root", discRoot); + System.setProperty("dvb.persistent.root", persistentRoot); + System.setProperty("bluray.bindingunit.root", budaRoot); Libbluray.nativePointer = nativePointer; DiscManager.getDiscManager().setCurrentDisc(discID); _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
