diff options
author | Seungha Yang <seungha@centricular.com> | 2021-05-25 19:47:28 +0900 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2021-05-27 08:15:15 +0000 |
commit | 1ac30ad53fff9b572212d7727695b1424b803214 (patch) | |
tree | 3d6caa42c55480e38d3ac7bb7173b9bac50f585c /gst | |
parent | da33921f8d6d746d638c011065231419da221f71 (diff) | |
download | gstreamer-plugins-bad-1ac30ad53fff9b572212d7727695b1424b803214.tar.gz |
interlace: Drop framerate from query caps of sinkpad
Query caps should return caps which represent the element can accept,
not resulting format.
Fixing negotiation error with
gst-launch-1.0 videotestsrc ! video/x-raw,framerate=25/1 ! interlace field-pattern=0 ! fakesink
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2282>
Diffstat (limited to 'gst')
-rw-r--r-- | gst/interlace/gstinterlace.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/gst/interlace/gstinterlace.c b/gst/interlace/gstinterlace.c index 409de1b1e..8858d97f2 100644 --- a/gst/interlace/gstinterlace.c +++ b/gst/interlace/gstinterlace.c @@ -980,18 +980,25 @@ gst_interlace_getcaps (GstPad * pad, GstInterlace * interlace, GstCaps * filter) icaps = gst_caps_merge (icaps, alternate); } - if (pattern == GST_INTERLACE_PATTERN_1_1) { - icaps = - gst_interlace_caps_double_framerate (icaps, (pad == interlace->srcpad), - FALSE); - } else if (pattern != GST_INTERLACE_PATTERN_2_2) { - GST_FIXME_OBJECT (interlace, - "Add calculations for telecine framerate conversions"); + /* Drop framerate for sinkpad */ + if (pad == interlace->sinkpad) { for (i = 0; i < gst_caps_get_size (icaps); ++i) { GstStructure *s = gst_caps_get_structure (icaps, i); gst_structure_remove_field (s, "framerate"); } + } else { + if (pattern == GST_INTERLACE_PATTERN_1_1) { + icaps = gst_interlace_caps_double_framerate (icaps, TRUE, FALSE); + } else if (pattern != GST_INTERLACE_PATTERN_2_2) { + GST_FIXME_OBJECT (interlace, + "Add calculations for telecine framerate conversions"); + for (i = 0; i < gst_caps_get_size (icaps); ++i) { + GstStructure *s = gst_caps_get_structure (icaps, i); + + gst_structure_remove_field (s, "framerate"); + } + } } if (clean_filter) |