X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Fgstplugin.c;h=70c942d859f20061622962bc854dc31ba98d73b4;hb=dac5966da6a0f53d0443dfa1ac239289028c415d;hp=12f874375b730baf7b2988cfeb27f83498aa33a9;hpb=c9c2902604ac9a358be2ca2b390b6f1f7e83f93c;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/gstplugin.c b/gst/gstplugin.c index 12f8743..70c942d 100644 --- a/gst/gstplugin.c +++ b/gst/gstplugin.c @@ -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. @@ -686,7 +687,7 @@ extract_symname (const char *filename) { gchar *bname, *name, *symname; const gchar *dot; - gsize prefix_len = 0, len; + gsize prefix_len, len; int i; bname = g_path_get_basename (filename); @@ -696,17 +697,19 @@ extract_symname (const char *filename) } if (g_str_has_prefix (bname, "libgst")) - prefix_len += 6; + prefix_len = 6; else if (g_str_has_prefix (bname, "lib")) - prefix_len += 3; - else if (g_str_has_prefix(bname, "gst")) - prefix_len += 3; + prefix_len = 3; + else if (g_str_has_prefix (bname, "gst")) + prefix_len = 3; + else + prefix_len = 0; /* use whole name (minus suffix) as plugin name */ dot = g_utf8_strchr (bname, -1, '.'); 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); @@ -969,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) @@ -1307,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) @@ -1350,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) @@ -1359,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))) @@ -1700,6 +1705,7 @@ static guint gst_plugin_ext_dep_get_stat_hash (GstPlugin * plugin, GstPluginDep * dep) { gboolean paths_are_default_only; + gboolean paths_are_relative_to_exe; GQueue scan_paths = G_QUEUE_INIT; guint scan_hash = 0; gchar *path; @@ -1708,6 +1714,8 @@ gst_plugin_ext_dep_get_stat_hash (GstPlugin * plugin, GstPluginDep * dep) paths_are_default_only = dep->flags & GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_DEFAULT_ONLY; + paths_are_relative_to_exe = + dep->flags & GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_RELATIVE_TO_EXE; gst_plugin_ext_dep_extract_env_vars_paths (plugin, dep, &scan_paths); @@ -1716,12 +1724,30 @@ gst_plugin_ext_dep_get_stat_hash (GstPlugin * plugin, GstPluginDep * dep) for (paths = dep->paths; paths != NULL && *paths != NULL; ++paths) { const gchar *path = *paths; + 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; + } + 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); + } - if (!g_queue_find_custom (&scan_paths, path, (GCompareFunc) strcmp)) { - GST_LOG_OBJECT (plugin, "path: '%s'", path); - g_queue_push_tail (&scan_paths, g_strdup (path)); + if (!g_queue_find_custom (&scan_paths, full_path, (GCompareFunc) strcmp)) { + GST_LOG_OBJECT (plugin, "path: '%s'", full_path); + g_queue_push_tail (&scan_paths, full_path); } else { - GST_LOG_OBJECT (plugin, "path: '%s' (duplicate, ignoring)", path); + GST_LOG_OBJECT (plugin, "path: '%s' (duplicate, ignoring)", full_path); + g_free (full_path); } } } @@ -1789,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.