From ebee2588062645afa75f5a800350bb5b14e53ecf Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Wed, 21 Oct 2009 09:40:49 +0200 Subject: [PATCH] gstpluginfeature: API : new gst_plugin_feature_list_copy() method This allows copying AND incrementing the refcount at the same time, avoiding a double iteratio of the GList --- docs/gst/gstreamer-sections.txt | 1 + gst/gstpluginfeature.c | 35 +++++++++++++++++++++++++++++++++++ gst/gstpluginfeature.h | 1 + win32/common/libgstreamer.def | 1 + 4 files changed, 38 insertions(+) diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 59a3de2..8dec231 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -1787,6 +1787,7 @@ gst_plugin_feature_set_name gst_plugin_feature_get_rank gst_plugin_feature_get_name gst_plugin_feature_load +gst_plugin_feature_list_copy gst_plugin_feature_list_free gst_plugin_feature_check_version diff --git a/gst/gstpluginfeature.c b/gst/gstpluginfeature.c index 4b193ca..ebce972 100644 --- a/gst/gstpluginfeature.c +++ b/gst/gstpluginfeature.c @@ -260,6 +260,41 @@ gst_plugin_feature_list_free (GList * list) } /** + * gst_plugin_feature_list_copy: + * @list: list of #GstPluginFeature + * + * Copies the list of features. Caller should call @gst_plugin_feature_list_free + * when done with the list. + * + * Returns: a copy of @list, with each feature's reference count incremented. + */ +GList * +gst_plugin_feature_list_copy (GList * list) +{ + GList *new_list = NULL; + + if (G_LIKELY (list)) { + GList *last; + + new_list = g_list_alloc (); + new_list->data = g_object_ref ((GObject *) list->data); + new_list->prev = NULL; + last = new_list; + list = list->next; + while (list) { + last->next = g_list_alloc (); + last->next->prev = last; + last = last->next; + last->data = g_object_ref ((GObject *) list->data); + list = list->next; + } + last->next = NULL; + } + + return new_list; +} + +/** * gst_plugin_feature_check_version: * @feature: a feature * @min_major: minimum required major version diff --git a/gst/gstpluginfeature.h b/gst/gstpluginfeature.h index a0a732d..ee1a6ce 100644 --- a/gst/gstpluginfeature.h +++ b/gst/gstpluginfeature.h @@ -137,6 +137,7 @@ guint gst_plugin_feature_get_rank (GstPluginFeature *featu G_CONST_RETURN gchar *gst_plugin_feature_get_name (GstPluginFeature *feature); void gst_plugin_feature_list_free (GList *list); +GList *gst_plugin_feature_list_copy (GList *list); gboolean gst_plugin_feature_check_version (GstPluginFeature *feature, guint min_major, diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index bc3ad3e..fc88756 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -711,6 +711,7 @@ EXPORTS gst_plugin_feature_get_name gst_plugin_feature_get_rank gst_plugin_feature_get_type + gst_plugin_feature_list_copy gst_plugin_feature_list_free gst_plugin_feature_load gst_plugin_feature_set_name -- 2.7.4