diff options
Diffstat (limited to 'gst/gstplugin.c')
-rw-r--r-- | gst/gstplugin.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/gst/gstplugin.c b/gst/gstplugin.c index a42da9910b..fdbbd22b6c 100644 --- a/gst/gstplugin.c +++ b/gst/gstplugin.c @@ -348,7 +348,7 @@ gboolean gst_plugin_load_absolute (const gchar *name) { GModule *module; - GstPluginInitFunc initfunc; + GstPluginDesc *desc; GstPlugin *plugin; struct stat file_status; @@ -364,10 +364,19 @@ gst_plugin_load_absolute (const gchar *name) module = g_module_open(name,G_MODULE_BIND_LAZY); if (module != NULL) { - if (g_module_symbol(module,"plugin_init",(gpointer *)&initfunc)) { - GST_INFO (GST_CAT_PLUGIN_LOADING,"loading plugin \"%s\"...", - name); - if ((plugin = (initfunc)(module))) { + if (g_module_symbol(module,"plugin_desc",(gpointer *)&desc)) { + GST_INFO (GST_CAT_PLUGIN_LOADING,"loading plugin \"%s\"...", name); + plugin = gst_plugin_new(desc->name, desc->major_version, desc->minor_version); + if (plugin != NULL) { + if (!((desc->plugin_init)(module, plugin))) { + GST_INFO (GST_CAT_PLUGIN_LOADING,"plugin \"%s\" failed to initialise", + plugin->name); + g_free(plugin); + plugin = NULL; + } + } + + if (plugin != NULL) { GST_INFO (GST_CAT_PLUGIN_LOADING,"plugin \"%s\" loaded: %d elements, %d types", plugin->name,plugin->numelements,plugin->numtypes); plugin->filename = g_strdup(name); |