playbin2: If a text sink is provided, let subtitle parsing be done by decodebin2...
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 23 Apr 2010 14:08:14 +0000 (16:08 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 29 Apr 2010 16:21:21 +0000 (18:21 +0200)
This way subtitle sinks only get buffers in the format that they
understand, i.e. raw parsed text in most cases.

Fixes bug #614942.

gst/playback/gstplaybin2.c

index 440bb5f..3b34fcb 100644 (file)
@@ -2972,8 +2972,25 @@ autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps,
 {
   GstCaps *subcaps;
   gboolean ret = FALSE;
+  GstElement *text_sink;
+  GstPad *text_sinkpad = NULL;
+
+  text_sink =
+      (group->playbin->text_sink) ? gst_object_ref (group->
+      playbin->text_sink) : NULL;
+  if (text_sink)
+    text_sinkpad = gst_element_get_static_pad (text_sink, "sink");
+
+  if (text_sinkpad) {
+    subcaps = gst_pad_get_caps_reffed (text_sinkpad);
+    gst_object_unref (text_sinkpad);
+  } else {
+    subcaps = gst_subtitle_overlay_create_factory_caps ();
+  }
+
+  if (text_sink)
+    gst_object_unref (text_sink);
 
-  subcaps = gst_subtitle_overlay_create_factory_caps ();
   ret = !gst_caps_can_intersect (subcaps, caps);
   gst_caps_unref (subcaps);