mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-29 15:22:17 +00:00
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
This commit is contained in:
parent
9e792ee5b8
commit
ebee258806
4 changed files with 38 additions and 0 deletions
|
@ -1787,6 +1787,7 @@ gst_plugin_feature_set_name
|
||||||
gst_plugin_feature_get_rank
|
gst_plugin_feature_get_rank
|
||||||
gst_plugin_feature_get_name
|
gst_plugin_feature_get_name
|
||||||
gst_plugin_feature_load
|
gst_plugin_feature_load
|
||||||
|
gst_plugin_feature_list_copy
|
||||||
gst_plugin_feature_list_free
|
gst_plugin_feature_list_free
|
||||||
gst_plugin_feature_check_version
|
gst_plugin_feature_check_version
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
|
|
|
@ -259,6 +259,41 @@ gst_plugin_feature_list_free (GList * list)
|
||||||
g_list_free (list);
|
g_list_free (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:
|
* gst_plugin_feature_check_version:
|
||||||
* @feature: a feature
|
* @feature: a feature
|
||||||
|
|
|
@ -137,6 +137,7 @@ guint gst_plugin_feature_get_rank (GstPluginFeature *featu
|
||||||
G_CONST_RETURN gchar *gst_plugin_feature_get_name (GstPluginFeature *feature);
|
G_CONST_RETURN gchar *gst_plugin_feature_get_name (GstPluginFeature *feature);
|
||||||
|
|
||||||
void gst_plugin_feature_list_free (GList *list);
|
void gst_plugin_feature_list_free (GList *list);
|
||||||
|
GList *gst_plugin_feature_list_copy (GList *list);
|
||||||
|
|
||||||
gboolean gst_plugin_feature_check_version (GstPluginFeature *feature,
|
gboolean gst_plugin_feature_check_version (GstPluginFeature *feature,
|
||||||
guint min_major,
|
guint min_major,
|
||||||
|
|
|
@ -711,6 +711,7 @@ EXPORTS
|
||||||
gst_plugin_feature_get_name
|
gst_plugin_feature_get_name
|
||||||
gst_plugin_feature_get_rank
|
gst_plugin_feature_get_rank
|
||||||
gst_plugin_feature_get_type
|
gst_plugin_feature_get_type
|
||||||
|
gst_plugin_feature_list_copy
|
||||||
gst_plugin_feature_list_free
|
gst_plugin_feature_list_free
|
||||||
gst_plugin_feature_load
|
gst_plugin_feature_load
|
||||||
gst_plugin_feature_set_name
|
gst_plugin_feature_set_name
|
||||||
|
|
Loading…
Reference in a new issue