mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 20:42:30 +00:00
autoconvert: Remove broken usage of the iterator
We're a subclass, so we can just take the object lock and iterate the list directly.
This commit is contained in:
parent
907ffc7352
commit
f3f6cdd451
1 changed files with 11 additions and 35 deletions
|
@ -269,48 +269,24 @@ gst_auto_convert_get_property (GObject * object,
|
||||||
static GstElement *
|
static GstElement *
|
||||||
gst_auto_convert_get_element_by_type (GstAutoConvert * autoconvert, GType type)
|
gst_auto_convert_get_element_by_type (GstAutoConvert * autoconvert, GType type)
|
||||||
{
|
{
|
||||||
GstIterator *iter = NULL;
|
GList *item;
|
||||||
gboolean done;
|
GstBin *bin = GST_BIN (autoconvert);
|
||||||
GValue item = { 0, };
|
GstElement *element = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (type != 0, NULL);
|
g_return_val_if_fail (type != 0, NULL);
|
||||||
|
|
||||||
iter = gst_bin_iterate_elements (GST_BIN (autoconvert));
|
GST_OBJECT_LOCK (autoconvert);
|
||||||
|
|
||||||
if (!iter)
|
for (item = bin->children; item; item = item->next) {
|
||||||
return NULL;
|
if (G_TYPE_CHECK_INSTANCE_TYPE (item->data, type)) {
|
||||||
|
element = gst_object_ref (item->data);
|
||||||
done = FALSE;
|
break;
|
||||||
while (!done) {
|
|
||||||
switch (gst_iterator_next (iter, &item)) {
|
|
||||||
case GST_ITERATOR_OK:
|
|
||||||
if (G_TYPE_CHECK_VALUE_TYPE (&item, type))
|
|
||||||
done = TRUE;
|
|
||||||
else
|
|
||||||
g_value_unset (&item);
|
|
||||||
break;
|
|
||||||
case GST_ITERATOR_RESYNC:
|
|
||||||
gst_iterator_resync (iter);
|
|
||||||
g_value_unset (&item);
|
|
||||||
break;
|
|
||||||
case GST_ITERATOR_ERROR:
|
|
||||||
GST_ERROR ("Error iterating elements in bin");
|
|
||||||
g_value_unset (&item);
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
case GST_ITERATOR_DONE:
|
|
||||||
g_value_unset (&item);
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gst_iterator_free (iter);
|
|
||||||
|
|
||||||
/* Don't need to dup, the value on the stack has a ref, we steal it */
|
GST_OBJECT_UNLOCK (autoconvert);
|
||||||
if (G_VALUE_HOLDS_OBJECT (&item))
|
|
||||||
return g_value_get_object (&item);
|
return element;
|
||||||
else
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue