gst_init: Call gst_init_static_plugins() when available
authorXavier Claessens <xavier.claessens@collabora.com>
Sat, 5 Sep 2020 00:47:18 +0000 (20:47 -0400)
committerXavier Claessens <xavier.claessens@collabora.com>
Mon, 5 Oct 2020 20:09:10 +0000 (16:09 -0400)
When doing a static build, gstreamer-full-1.0 defines that symbol to
register static plugins. Cerbero's Android build will be updated to
implement that symbol too.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/641>

gst/gst.c

index ebe714d..b7f0a81 100644 (file)
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -631,6 +631,24 @@ gst_register_core_elements (GstPlugin * plugin)
   return TRUE;
 }
 
+static void
+init_static_plugins (void)
+{
+  GModule *module;
+
+  /* Call gst_init_static_plugins() defined in libgstreamer-full-1.0 in the case
+   * libgstreamer is static linked with some plugins. */
+  module = g_module_open (NULL, G_MODULE_BIND_LOCAL);
+  if (module) {
+    void (*func) (void);
+    if (g_module_symbol (module, "gst_init_static_plugins",
+            (gpointer *) & func)) {
+      func ();
+    }
+    g_module_close (module);
+  }
+}
+
 /*
  * this bit handles:
  * - initialization of threads if we use them
@@ -789,6 +807,8 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
       gst_register_core_elements, VERSION, GST_LICENSE, PACKAGE,
       GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
 
+  init_static_plugins ();
+
   /*
    * Any errors happening below this point are non-fatal, we therefore mark
    * gstreamer as being initialized, since it is the case from a plugin point of