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:
Olivier Crête 2014-05-09 18:49:14 -04:00
parent 907ffc7352
commit f3f6cdd451

View file

@ -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;
} }
/** /**