From 5ef0a0979419b20f3aa7d40ba3be3657b53ea738 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Fri, 8 Jan 2016 15:05:38 -0300 Subject: [PATCH] videorate: replace accept-caps with a caps query accept-caps is only a shallow check, it needs to know whether downstream as a whole accepts the framerate --- gst/videorate/gstvideorate.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gst/videorate/gstvideorate.c b/gst/videorate/gstvideorate.c index 2c17ba4bc0..4a815d5448 100644 --- a/gst/videorate/gstvideorate.c +++ b/gst/videorate/gstvideorate.c @@ -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;