mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47: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_name
|
||||
gst_plugin_feature_load
|
||||
gst_plugin_feature_list_copy
|
||||
gst_plugin_feature_list_free
|
||||
gst_plugin_feature_check_version
|
||||
<SUBSECTION Standard>
|
||||
|
|
|
@ -259,6 +259,41 @@ gst_plugin_feature_list_free (GList * 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:
|
||||
* @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);
|
||||
|
||||
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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue