media: handle add-added on non-bins too

Handle dynamic payloaders that are not bins, as used in the unit-test.
This commit is contained in:
Wim Taymans 2013-11-26 16:24:35 +01:00
parent 1ebc2c703e
commit 9da7b5eeb5

View file

@ -1532,28 +1532,34 @@ watch_destroyed (GstRTSPMedia * media)
static GstElement * static GstElement *
find_payload_element (GstElement * payloader) find_payload_element (GstElement * payloader)
{ {
GValue item = { 0 };
GstIterator *iter;
GstElement *pay = NULL; GstElement *pay = NULL;
iter = gst_bin_iterate_recurse (GST_BIN (payloader)); if (GST_IS_BIN (payloader)) {
while (gst_iterator_next (iter, &item) == GST_ITERATOR_OK) { GstIterator *iter;
GstElement *element = (GstElement *) g_value_get_object (&item); GValue item = { 0 };
GstElementClass *eclass = GST_ELEMENT_GET_CLASS (element);
const gchar *klass;
klass = gst_element_class_get_metadata (eclass, GST_ELEMENT_METADATA_KLASS); iter = gst_bin_iterate_recurse (GST_BIN (payloader));
if (klass == NULL) while (gst_iterator_next (iter, &item) == GST_ITERATOR_OK) {
continue; GstElement *element = (GstElement *) g_value_get_object (&item);
GstElementClass *eclass = GST_ELEMENT_GET_CLASS (element);
const gchar *klass;
if (strstr (klass, "Payloader") && strstr (klass, "RTP")) { klass =
pay = gst_object_ref (element); gst_element_class_get_metadata (eclass, GST_ELEMENT_METADATA_KLASS);
if (klass == NULL)
continue;
if (strstr (klass, "Payloader") && strstr (klass, "RTP")) {
pay = gst_object_ref (element);
g_value_unset (&item);
break;
}
g_value_unset (&item); g_value_unset (&item);
break;
} }
g_value_unset (&item); gst_iterator_free (iter);
} else {
pay = g_object_ref (payloader);
} }
gst_iterator_free (iter);
return pay; return pay;
} }