videorate: replace accept-caps with a caps query
authorThiago Santos <thiagoss@osg.samsung.com>
Fri, 8 Jan 2016 18:05:38 +0000 (15:05 -0300)
committerThiago Santos <thiagoss@osg.samsung.com>
Fri, 8 Jan 2016 18:05:38 +0000 (15:05 -0300)
accept-caps is only a shallow check, it needs to know
whether downstream as a whole accepts the framerate

gst/videorate/gstvideorate.c

index 2c17ba4..4a815d5 100644 (file)
@@ -1011,7 +1011,7 @@ gst_video_rate_check_variable_rate (GstVideoRate * videorate,
 {
   GstStructure *st;
   gint fps_d, fps_n;
-  GstCaps *srcpadcaps, *tmpcaps;
+  GstCaps *srcpadcaps, *tmpcaps, *downstream_caps;
   GstPad *pad = NULL;
 
   srcpadcaps =
@@ -1026,13 +1026,16 @@ gst_video_rate_check_variable_rate (GstVideoRate * videorate,
   gst_caps_unref (srcpadcaps);
 
   pad = gst_pad_get_peer (GST_BASE_TRANSFORM_SRC_PAD (videorate));
-  if (pad && !gst_pad_query_accept_caps (pad, tmpcaps)) {
+  downstream_caps = gst_pad_query_caps (pad, NULL);
+  if (pad && !gst_caps_can_intersect (tmpcaps, downstream_caps)) {
     videorate->force_variable_rate = TRUE;
+    gst_caps_unref (downstream_caps);
     GST_DEBUG_OBJECT (videorate, "Downstream forces variable framerate"
         " respecting it");
 
     goto done;
   }
+  gst_caps_unref (downstream_caps);
 
   videorate->to_rate_numerator = fps_n;
   videorate->to_rate_denominator = fps_d;