rtsp-media: use element metadata to find payloader
authorWim Taymans <wtaymans@redhat.com>
Fri, 22 Nov 2013 10:16:20 +0000 (11:16 +0100)
committerWim Taymans <wtaymans@redhat.com>
Fri, 22 Nov 2013 10:19:35 +0000 (11:19 +0100)
Use the element metadata to find the payloader instead of checking
for the base class.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=712396

gst/rtsp-server/rtsp-media.c

index 09628d3..5767ba9 100644 (file)
@@ -67,8 +67,6 @@
 #include <gst/app/gstappsrc.h>
 #include <gst/app/gstappsink.h>
 
-#include <gst/rtp/gstrtpbasepayload.h>
-
 #include "rtsp-media.h"
 
 #define GST_RTSP_MEDIA_GET_PRIVATE(obj)  \
@@ -1536,13 +1534,19 @@ find_payload_element (GstElement * payloader)
 {
   GValue item = { 0 };
   GstIterator *iter;
-  GstElement *element;
   GstElement *pay = NULL;
 
   iter = gst_bin_iterate_recurse (GST_BIN (payloader));
   while (gst_iterator_next (iter, &item) == GST_ITERATOR_OK) {
-    element = (GstElement *) g_value_get_object (&item);
-    if (GST_IS_RTP_BASE_PAYLOAD (element)) {
+    GstElement *element = (GstElement *) g_value_get_object (&item);
+    GstElementClass *eclass = GST_ELEMENT_GET_CLASS (element);
+    const gchar *klass;
+
+    klass = 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;