mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
gst, controller: replace g_list_prepend + reverse with GQueue
This commit is contained in:
parent
147fa8b1f7
commit
4d6795dcd1
4 changed files with 27 additions and 39 deletions
|
@ -888,7 +888,7 @@ GList *
|
||||||
gst_element_factory_list_filter (GList * list,
|
gst_element_factory_list_filter (GList * list,
|
||||||
const GstCaps * caps, GstPadDirection direction, gboolean subsetonly)
|
const GstCaps * caps, GstPadDirection direction, gboolean subsetonly)
|
||||||
{
|
{
|
||||||
GList *result = NULL;
|
GQueue results = G_QUEUE_INIT;
|
||||||
|
|
||||||
GST_DEBUG ("finding factories");
|
GST_DEBUG ("finding factories");
|
||||||
|
|
||||||
|
@ -922,7 +922,7 @@ gst_element_factory_list_filter (GList * list,
|
||||||
if ((subsetonly && gst_caps_is_subset (caps, tmpl_caps)) ||
|
if ((subsetonly && gst_caps_is_subset (caps, tmpl_caps)) ||
|
||||||
(!subsetonly && gst_caps_can_intersect (caps, tmpl_caps))) {
|
(!subsetonly && gst_caps_can_intersect (caps, tmpl_caps))) {
|
||||||
/* non empty intersection, we can use this element */
|
/* non empty intersection, we can use this element */
|
||||||
result = g_list_prepend (result, gst_object_ref (factory));
|
g_queue_push_tail (&results, gst_object_ref (factory));
|
||||||
gst_caps_unref (tmpl_caps);
|
gst_caps_unref (tmpl_caps);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -930,5 +930,5 @@ gst_element_factory_list_filter (GList * list,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return g_list_reverse (result);
|
return results.head;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,12 +44,6 @@
|
||||||
#include "parse/types.h"
|
#include "parse/types.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
|
||||||
_prepend_missing_element (gchar * element, GList ** list)
|
|
||||||
{
|
|
||||||
*list = g_list_prepend (*list, g_strdup (element));
|
|
||||||
}
|
|
||||||
|
|
||||||
static GstParseContext *
|
static GstParseContext *
|
||||||
gst_parse_context_copy (const GstParseContext * context)
|
gst_parse_context_copy (const GstParseContext * context)
|
||||||
{
|
{
|
||||||
|
@ -58,9 +52,13 @@ gst_parse_context_copy (const GstParseContext * context)
|
||||||
|
|
||||||
ret = gst_parse_context_new ();
|
ret = gst_parse_context_new ();
|
||||||
if (context) {
|
if (context) {
|
||||||
g_list_foreach (context->missing_elements, (GFunc) _prepend_missing_element,
|
GQueue missing_copy = G_QUEUE_INIT;
|
||||||
&ret->missing_elements);
|
GList *l;
|
||||||
ret->missing_elements = g_list_reverse (ret->missing_elements);
|
|
||||||
|
for (l = context->missing_elements; l != NULL; l = l->next)
|
||||||
|
g_queue_push_tail (&missing_copy, g_strdup ((const gchar *) l->data));
|
||||||
|
|
||||||
|
ret->missing_elements = missing_copy.head;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -1451,12 +1451,11 @@ _priv_plugin_deps_env_vars_changed (GstPlugin * plugin)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GList *
|
static void
|
||||||
gst_plugin_ext_dep_extract_env_vars_paths (GstPlugin * plugin,
|
gst_plugin_ext_dep_extract_env_vars_paths (GstPlugin * plugin,
|
||||||
GstPluginDep * dep)
|
GstPluginDep * dep, GQueue * paths)
|
||||||
{
|
{
|
||||||
gchar **evars;
|
gchar **evars;
|
||||||
GList *paths = NULL;
|
|
||||||
|
|
||||||
for (evars = dep->env_vars; evars != NULL && *evars != NULL; ++evars) {
|
for (evars = dep->env_vars; evars != NULL && *evars != NULL; ++evars) {
|
||||||
const gchar *e;
|
const gchar *e;
|
||||||
|
@ -1503,9 +1502,9 @@ gst_plugin_ext_dep_extract_env_vars_paths (GstPlugin * plugin,
|
||||||
full_path = g_strdup (arr[i]);
|
full_path = g_strdup (arr[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_list_find_custom (paths, full_path, (GCompareFunc) strcmp)) {
|
if (!g_queue_find_custom (paths, full_path, (GCompareFunc) strcmp)) {
|
||||||
GST_LOG_OBJECT (plugin, "path: '%s'", full_path);
|
GST_LOG_OBJECT (plugin, "path: '%s'", full_path);
|
||||||
paths = g_list_prepend (paths, full_path);
|
g_queue_push_tail (paths, full_path);
|
||||||
full_path = NULL;
|
full_path = NULL;
|
||||||
} else {
|
} else {
|
||||||
GST_LOG_OBJECT (plugin, "path: '%s' (duplicate,ignoring)", full_path);
|
GST_LOG_OBJECT (plugin, "path: '%s' (duplicate,ignoring)", full_path);
|
||||||
|
@ -1519,10 +1518,7 @@ gst_plugin_ext_dep_extract_env_vars_paths (GstPlugin * plugin,
|
||||||
g_strfreev (components);
|
g_strfreev (components);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_LOG_OBJECT (plugin, "Extracted %d paths from environment",
|
GST_LOG_OBJECT (plugin, "Extracted %d paths from environment", paths->length);
|
||||||
g_list_length (paths));
|
|
||||||
|
|
||||||
return paths;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static guint
|
static guint
|
||||||
|
@ -1668,43 +1664,37 @@ static guint
|
||||||
gst_plugin_ext_dep_get_stat_hash (GstPlugin * plugin, GstPluginDep * dep)
|
gst_plugin_ext_dep_get_stat_hash (GstPlugin * plugin, GstPluginDep * dep)
|
||||||
{
|
{
|
||||||
gboolean paths_are_default_only;
|
gboolean paths_are_default_only;
|
||||||
GList *scan_paths;
|
GQueue scan_paths = G_QUEUE_INIT;
|
||||||
guint scan_hash = 0;
|
guint scan_hash = 0;
|
||||||
|
gchar *path;
|
||||||
|
|
||||||
GST_LOG_OBJECT (plugin, "start");
|
GST_LOG_OBJECT (plugin, "start");
|
||||||
|
|
||||||
paths_are_default_only =
|
paths_are_default_only =
|
||||||
dep->flags & GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_DEFAULT_ONLY;
|
dep->flags & GST_PLUGIN_DEPENDENCY_FLAG_PATHS_ARE_DEFAULT_ONLY;
|
||||||
|
|
||||||
scan_paths = gst_plugin_ext_dep_extract_env_vars_paths (plugin, dep);
|
gst_plugin_ext_dep_extract_env_vars_paths (plugin, dep, &scan_paths);
|
||||||
|
|
||||||
if (scan_paths == NULL || !paths_are_default_only) {
|
if (g_queue_is_empty (&scan_paths) || !paths_are_default_only) {
|
||||||
gchar **paths;
|
gchar **paths;
|
||||||
|
|
||||||
for (paths = dep->paths; paths != NULL && *paths != NULL; ++paths) {
|
for (paths = dep->paths; paths != NULL && *paths != NULL; ++paths) {
|
||||||
const gchar *path = *paths;
|
const gchar *path = *paths;
|
||||||
|
|
||||||
if (!g_list_find_custom (scan_paths, path, (GCompareFunc) strcmp)) {
|
if (!g_queue_find_custom (&scan_paths, path, (GCompareFunc) strcmp)) {
|
||||||
GST_LOG_OBJECT (plugin, "path: '%s'", path);
|
GST_LOG_OBJECT (plugin, "path: '%s'", path);
|
||||||
scan_paths = g_list_prepend (scan_paths, g_strdup (path));
|
g_queue_push_tail (&scan_paths, g_strdup (path));
|
||||||
} else {
|
} else {
|
||||||
GST_LOG_OBJECT (plugin, "path: '%s' (duplicate, ignoring)", path);
|
GST_LOG_OBJECT (plugin, "path: '%s' (duplicate, ignoring)", path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* not that the order really matters, but it makes debugging easier */
|
while ((path = g_queue_pop_head (&scan_paths))) {
|
||||||
scan_paths = g_list_reverse (scan_paths);
|
|
||||||
|
|
||||||
while (scan_paths != NULL) {
|
|
||||||
const gchar *path = scan_paths->data;
|
|
||||||
|
|
||||||
scan_hash += gst_plugin_ext_dep_scan_path_with_filenames (plugin, path,
|
scan_hash += gst_plugin_ext_dep_scan_path_with_filenames (plugin, path,
|
||||||
(const gchar **) dep->names, dep->flags);
|
(const gchar **) dep->names, dep->flags);
|
||||||
scan_hash = scan_hash << 1;
|
scan_hash = scan_hash << 1;
|
||||||
|
g_free (path);
|
||||||
g_free (scan_paths->data);
|
|
||||||
scan_paths = g_list_delete_link (scan_paths, scan_paths);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_LOG_OBJECT (plugin, "done, scan_hash: %08x", scan_hash);
|
GST_LOG_OBJECT (plugin, "done, scan_hash: %08x", scan_hash);
|
||||||
|
|
|
@ -604,9 +604,9 @@ gst_interpolation_control_source_unset_all (GstInterpolationControlSource *
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_append_control_point (GstControlPoint * cp, GList ** l)
|
_append_control_point (GstControlPoint * cp, GQueue * res)
|
||||||
{
|
{
|
||||||
*l = g_list_prepend (*l, cp);
|
g_queue_push_tail (res, cp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -621,7 +621,7 @@ _append_control_point (GstControlPoint * cp, GList ** l)
|
||||||
GList *
|
GList *
|
||||||
gst_interpolation_control_source_get_all (GstInterpolationControlSource * self)
|
gst_interpolation_control_source_get_all (GstInterpolationControlSource * self)
|
||||||
{
|
{
|
||||||
GList *res = NULL;
|
GQueue res = G_QUEUE_INIT;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_INTERPOLATION_CONTROL_SOURCE (self), NULL);
|
g_return_val_if_fail (GST_IS_INTERPOLATION_CONTROL_SOURCE (self), NULL);
|
||||||
|
|
||||||
|
@ -631,7 +631,7 @@ gst_interpolation_control_source_get_all (GstInterpolationControlSource * self)
|
||||||
&res);
|
&res);
|
||||||
g_mutex_unlock (self->lock);
|
g_mutex_unlock (self->lock);
|
||||||
|
|
||||||
return g_list_reverse (res);
|
return res.head;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue