audioenc/dec: Preserve downstream caps preference in get caps
authorOlivier CrĂȘte <olivier.crete@collabora.com>
Tue, 3 Jan 2023 23:52:05 +0000 (18:52 -0500)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 4 Jan 2023 11:09:31 +0000 (11:09 +0000)
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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3673>

subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioutilsprivate.c

index 1db4601..154d732 100644 (file)
@@ -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;
   }