subtitleoverlay: replace accept-caps with caps query
authorThiago Santos <thiagoss@osg.samsung.com>
Mon, 11 Jan 2016 21:24:48 +0000 (18:24 -0300)
committerThiago Santos <thiagoss@osg.samsung.com>
Mon, 11 Jan 2016 21:35:29 +0000 (18:35 -0300)
Those accept caps are actually checking if downstream supports
some particular caps to check if it need to negotiate a different
format. Checking only the next element with accept-caps is not enough
to guarantee that it is supported.

Using a caps query makes it obtain the supported caps for downstream
as a whole instead of only the next element.

gst/playback/gstsubtitleoverlay.c

index 719eebb..4b4b0aa 100644 (file)
@@ -157,6 +157,20 @@ unblock_subtitle (GstSubtitleOverlay * self)
   }
 }
 
+static gboolean
+pad_supports_caps (GstPad * pad, GstCaps * caps)
+{
+  GstCaps *pad_caps;
+  gboolean ret = FALSE;
+
+  pad_caps = gst_pad_query_caps (pad, NULL);
+  if (gst_caps_can_intersect (caps, pad_caps))
+    ret = TRUE;
+  gst_caps_unref (pad_caps);
+
+  return ret;
+}
+
 static void
 gst_subtitle_overlay_finalize (GObject * object)
 {
@@ -1063,7 +1077,7 @@ _pad_blocked_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
     GstPad *target =
         gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (self->subtitle_sinkpad));
 
-    if (target && gst_pad_query_accept_caps (target, subcaps)) {
+    if (target && pad_supports_caps (target, subcaps)) {
       GST_DEBUG_OBJECT (pad, "Target accepts caps");
 
       gst_object_unref (target);
@@ -1673,7 +1687,7 @@ gst_subtitle_overlay_video_sink_setcaps (GstSubtitleOverlay * self,
 
   GST_SUBTITLE_OVERLAY_LOCK (self);
 
-  if (!target || !gst_pad_query_accept_caps (target, caps)) {
+  if (!target || !pad_supports_caps (target, caps)) {
     GST_DEBUG_OBJECT (target, "Target did not accept caps -- reconfiguring");
 
     block_subtitle (self);
@@ -1809,7 +1823,7 @@ gst_subtitle_overlay_subtitle_sink_setcaps (GstSubtitleOverlay * self,
   GST_SUBTITLE_OVERLAY_LOCK (self);
   gst_caps_replace (&self->subcaps, caps);
 
-  if (target && gst_pad_query_accept_caps (target, caps)) {
+  if (target && pad_supports_caps (target, caps)) {
     GST_DEBUG_OBJECT (self, "Target accepts caps");
     GST_SUBTITLE_OVERLAY_UNLOCK (self);
     goto out;