mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
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
This commit is contained in:
parent
56be0653e0
commit
5ef0a09794
1 changed files with 5 additions and 2 deletions
|
@ -1011,7 +1011,7 @@ gst_video_rate_check_variable_rate (GstVideoRate * videorate,
|
||||||
{
|
{
|
||||||
GstStructure *st;
|
GstStructure *st;
|
||||||
gint fps_d, fps_n;
|
gint fps_d, fps_n;
|
||||||
GstCaps *srcpadcaps, *tmpcaps;
|
GstCaps *srcpadcaps, *tmpcaps, *downstream_caps;
|
||||||
GstPad *pad = NULL;
|
GstPad *pad = NULL;
|
||||||
|
|
||||||
srcpadcaps =
|
srcpadcaps =
|
||||||
|
@ -1026,13 +1026,16 @@ gst_video_rate_check_variable_rate (GstVideoRate * videorate,
|
||||||
gst_caps_unref (srcpadcaps);
|
gst_caps_unref (srcpadcaps);
|
||||||
|
|
||||||
pad = gst_pad_get_peer (GST_BASE_TRANSFORM_SRC_PAD (videorate));
|
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;
|
videorate->force_variable_rate = TRUE;
|
||||||
|
gst_caps_unref (downstream_caps);
|
||||||
GST_DEBUG_OBJECT (videorate, "Downstream forces variable framerate"
|
GST_DEBUG_OBJECT (videorate, "Downstream forces variable framerate"
|
||||||
" respecting it");
|
" respecting it");
|
||||||
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
gst_caps_unref (downstream_caps);
|
||||||
|
|
||||||
videorate->to_rate_numerator = fps_n;
|
videorate->to_rate_numerator = fps_n;
|
||||||
videorate->to_rate_denominator = fps_d;
|
videorate->to_rate_denominator = fps_d;
|
||||||
|
|
Loading…
Reference in a new issue