tee: Check for the removed pad flag also in the slow pushing path
[platform/upstream/gstreamer.git] / gst / gstplugin.c
index 18183c3..70c942d 100644 (file)
@@ -88,7 +88,8 @@ static char *_gst_plugin_fault_handler_filename = NULL;
  * QPL: http://www.trolltech.com/licenses/qpl.html
  * MPL: http://www.opensource.org/licenses/mozilla1.1.php
  * MIT/X11: http://www.opensource.org/licenses/mit-license.php
- * 3-clause BSD: http://www.opensource.org/licenses/bsd-license.php
+ * 3-clause BSD: https://opensource.org/licenses/BSD-3-Clause
+ * Zero-Clause BSD: https://opensource.org/licenses/0BSD
  */
 static const gchar valid_licenses[] = "LGPL\000"        /* GNU Lesser General Public License */
     "GPL\000"                   /* GNU General Public License */
@@ -97,10 +98,13 @@ static const gchar valid_licenses[] = "LGPL\000"        /* GNU Lesser General Pu
     "MPL\000"                   /* MPL 1.1 license */
     "BSD\000"                   /* 3-clause BSD license */
     "MIT/X11\000"               /* MIT/X11 license */
+    "0BSD\000"                  /* Zero-Clause BSD */
     "Proprietary\000"           /* Proprietary license */
     GST_LICENSE_UNKNOWN;        /* some other license */
 
-static const guint8 valid_licenses_idx[] = { 0, 5, 9, 13, 21, 25, 29, 37, 49 };
+static const guint8 valid_licenses_idx[] = { 0, 5, 9, 13, 21, 25, 29, 37, 42,
+  54
+};
 
 static GstPlugin *gst_plugin_register_func (GstPlugin * plugin,
     const GstPluginDesc * desc, gpointer user_data);
@@ -109,13 +113,12 @@ static void gst_plugin_desc_copy (GstPluginDesc * dest,
 
 static void gst_plugin_ext_dep_free (GstPluginDep * dep);
 
-G_DEFINE_TYPE (GstPlugin, gst_plugin, GST_TYPE_OBJECT);
+G_DEFINE_TYPE_WITH_PRIVATE (GstPlugin, gst_plugin, GST_TYPE_OBJECT);
 
 static void
 gst_plugin_init (GstPlugin * plugin)
 {
-  plugin->priv =
-      G_TYPE_INSTANCE_GET_PRIVATE (plugin, GST_TYPE_PLUGIN, GstPluginPrivate);
+  plugin->priv = gst_plugin_get_instance_private (plugin);
 }
 
 static void
@@ -154,8 +157,6 @@ static void
 gst_plugin_class_init (GstPluginClass * klass)
 {
   G_OBJECT_CLASS (klass)->finalize = gst_plugin_finalize;
-
-  g_type_class_add_private (klass, sizeof (GstPluginPrivate));
 }
 
 GQuark
@@ -667,7 +668,7 @@ static GMutex gst_plugin_loading_mutex;
 
 /**
  * gst_plugin_load_file:
- * @filename: the plugin filename to load
+ * @filename: (type filename): the plugin filename to load
  * @error: pointer to a %NULL-valued GError
  *
  * Loads the given plugin and refs it.  Caller needs to unref after use.
@@ -708,7 +709,7 @@ extract_symname (const char *filename)
   if (dot)
     len = dot - bname - prefix_len;
   else
-    len = g_utf8_strlen (bname + prefix_len, -1);
+    len = strlen (bname + prefix_len);
 
   name = g_strndup (bname + prefix_len, len);
   g_free (bname);
@@ -971,7 +972,7 @@ gst_plugin_get_description (GstPlugin * plugin)
  *
  * get the filename of the plugin
  *
- * Returns: the filename of the plugin
+ * Returns: (type filename): the filename of the plugin
  */
 const gchar *
 gst_plugin_get_filename (GstPlugin * plugin)
@@ -1309,7 +1310,8 @@ gst_plugin_find_feature_by_name (GstPlugin * plugin, const gchar * name)
  *
  * Load the named plugin. Refs the plugin.
  *
- * Returns: (transfer full): a reference to a loaded plugin, or %NULL on error.
+ * Returns: (transfer full) (nullable): a reference to a loaded plugin, or
+ * %NULL on error.
  */
 GstPlugin *
 gst_plugin_load_by_name (const gchar * name)
@@ -1352,7 +1354,8 @@ gst_plugin_load_by_name (const gchar * name)
  * plugin = loaded_plugin;
  * ]|
  *
- * Returns: (transfer full): a reference to a loaded plugin, or %NULL on error.
+ * Returns: (transfer full) (nullable): a reference to a loaded plugin, or
+ * %NULL on error.
  */
 GstPlugin *
 gst_plugin_load (GstPlugin * plugin)
@@ -1361,7 +1364,7 @@ gst_plugin_load (GstPlugin * plugin)
   GstPlugin *newplugin;
 
   if (gst_plugin_is_loaded (plugin)) {
-    return plugin;
+    return gst_object_ref (plugin);
   }
 
   if (!(newplugin = gst_plugin_load_file (plugin->filename, &error)))
@@ -1724,13 +1727,17 @@ gst_plugin_ext_dep_get_stat_hash (GstPlugin * plugin, GstPluginDep * dep)
       gchar *full_path;
 
       if (paths_are_relative_to_exe && !g_path_is_absolute (path)) {
+        gchar *appdir;
+
         if (!_gst_executable_path) {
           GST_FIXME_OBJECT (plugin,
               "Path dependency %s relative to executable path but could not retrieve executable path",
               path);
           continue;
         }
-        full_path = g_build_filename (_gst_executable_path, path, NULL);
+        appdir = g_path_get_dirname (_gst_executable_path);
+        full_path = g_build_filename (appdir, path, NULL);
+        g_free (appdir);
       } else {
         full_path = g_strdup (path);
       }
@@ -1808,15 +1815,15 @@ gst_plugin_ext_dep_equals (GstPluginDep * dep, const gchar ** env_vars,
 /**
  * gst_plugin_add_dependency:
  * @plugin: a #GstPlugin
- * @env_vars: (allow-none): %NULL-terminated array of environment variables affecting the
+ * @env_vars: (allow-none) (array zero-terminated=1): %NULL-terminated array of environment variables affecting the
  *     feature set of the plugin (e.g. an environment variable containing
  *     paths where to look for additional modules/plugins of a library),
  *     or %NULL. Environment variable names may be followed by a path component
  *      which will be added to the content of the environment variable, e.g.
  *      "HOME/.mystuff/plugins".
- * @paths: (allow-none): %NULL-terminated array of directories/paths where dependent files
+ * @paths: (allow-none) (array zero-terminated=1): %NULL-terminated array of directories/paths where dependent files
  *     may be, or %NULL.
- * @names: (allow-none): %NULL-terminated array of file names (or file name suffixes,
+ * @names: (allow-none) (array zero-terminated=1): %NULL-terminated array of file names (or file name suffixes,
  *     depending on @flags) to be used in combination with the paths from
  *     @paths and/or the paths extracted from the environment variables in
  *     @env_vars, or %NULL.