From e03a10a0f27eecc07480f7d67435fc474a0b0ce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= Date: Tue, 3 Jan 2023 18:52:05 -0500 Subject: [PATCH] audioenc/dec: Preserve downstream caps preference in get caps This should fix pipelines such as this one to work as expected ... ! opusenc ! capsfilter caps='audio/x-opus, channels=1; audio/x-opus, channels=2' ! ... The expectation is that the encoder will propose the first structure before the second one to the source. Part-of: --- .../gst-libs/gst/audio/gstaudioutilsprivate.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioutilsprivate.c b/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioutilsprivate.c index 1db4601f0e..154d73224c 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioutilsprivate.c +++ b/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioutilsprivate.c @@ -128,13 +128,15 @@ __gst_audio_element_proxy_getcaps (GstElement * element, GstPad * sinkpad, filter_caps = __gst_audio_element_proxy_caps (element, templ_caps, allowed); - fcaps = gst_caps_intersect (filter_caps, templ_caps); + fcaps = gst_caps_intersect_full (filter_caps, templ_caps, + GST_CAPS_INTERSECT_FIRST); gst_caps_unref (filter_caps); gst_caps_unref (templ_caps); if (filter) { GST_LOG_OBJECT (element, "intersecting with %" GST_PTR_FORMAT, filter); - filter_caps = gst_caps_intersect (fcaps, filter); + filter_caps = gst_caps_intersect_full (fcaps, filter, + GST_CAPS_INTERSECT_FIRST); gst_caps_unref (fcaps); fcaps = filter_caps; }