From 1ac30ad53fff9b572212d7727695b1424b803214 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Tue, 25 May 2021 19:47:28 +0900 Subject: [PATCH] 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: --- gst/interlace/gstinterlace.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/gst/interlace/gstinterlace.c b/gst/interlace/gstinterlace.c index 409de1b1eb..8858d97f23 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)