androidmedia: First try to get symbols from the current program, then load libdvm

If the application is using the new ART runtime it will otherwise
load dalvik and start a dalvik VM next to the ART VM.
Does not work very well obviously.
This commit is contained in:
Sebastian Dröge 2014-05-23 15:00:42 +02:00
parent 22c0464aa6
commit 158caf952d

View file

@ -151,11 +151,9 @@ gst_amc_get_jni_env (void)
}
static gboolean
initialize_java_vm (void)
load_java_module (const gchar * name)
{
jsize n_vms;
java_module = g_module_open ("libdvm", G_MODULE_BIND_LOCAL);
java_module = g_module_open (name, G_MODULE_BIND_LOCAL);
if (!java_module)
goto load_failed;
@ -167,6 +165,34 @@ initialize_java_vm (void)
(gpointer *) & get_created_java_vms))
goto symbol_error;
return TRUE;
load_failed:
{
GST_ERROR ("Failed to load Java module '%s': %s", GST_STR_NULL (name),
g_module_error ());
return FALSE;
}
symbol_error:
{
GST_ERROR ("Failed to locate required JNI symbols in '%s': %s",
GST_STR_NULL (name), g_module_error ());
g_module_close (java_module);
java_module = NULL;
return FALSE;
}
}
static gboolean
initialize_java_vm (void)
{
jsize n_vms;
if (!load_java_module (NULL)) {
if (!load_java_module ("libdvm"))
return FALSE;
}
n_vms = 0;
if (get_created_java_vms (&java_vm, 1, &n_vms) < 0)
goto get_created_failed;
@ -178,6 +204,8 @@ initialize_java_vm (void)
JavaVMInitArgs vm_args;
JavaVMOption options[4];
GST_DEBUG ("Found no existing Java VM, trying to start one");
options[0].optionString = "-verbose:jni";
options[1].optionString = "-verbose:gc";
options[2].optionString = "-Xcheck:jni";
@ -196,19 +224,6 @@ initialize_java_vm (void)
return java_vm != NULL;
load_failed:
{
GST_ERROR ("Failed to load libdvm: %s", g_module_error ());
return FALSE;
}
symbol_error:
{
GST_ERROR ("Failed to locate required JNI symbols in libdvm: %s",
g_module_error ());
g_module_close (java_module);
java_module = NULL;
return FALSE;
}
get_created_failed:
{
GST_ERROR ("Failed to get already created VMs");