Commit 83939c81 authored by Mathieu Duponchelle's avatar Mathieu Duponchelle

audioaggregator: fix filtered getcaps

In the situation described in
https://bugzilla.gnome.org/show_bug.cgi?id=795397,

downstream_caps consists of two structures, the first with
the preferred rate, if at all possible (44100), the second
containing the full range of allowed rates, as audioresample
correctly tries to negotiate passthrough caps.

As audioaggregator cannot perform rate conversion, it wants
to return a fixated rate in its getcaps implementation,
however it previously directly used the first structure in
the caps allowed downstream, without taking the filter into
consideration, to determine the rate to fixate to.

With this, we first intersect our downstream caps with the
filter, in order not to fixate to an unsupported rate.
parent cc3942e6
......@@ -650,6 +650,18 @@ gst_audio_aggregator_sink_getcaps (GstPad * pad, GstAggregator * agg,
sink_template_caps = gst_caps_make_writable (sink_template_caps);
s = gst_caps_get_structure (sink_template_caps, 0);
/* We will then use the rate in the first structure as the expected
* rate, we want to make sure only the compatible structures remain
* in downstream_caps
*/
if (downstream_caps && filter) {
GstCaps *tmp = gst_caps_intersect_full (downstream_caps, filter,
GST_CAPS_INTERSECT_FIRST);
gst_caps_unref (downstream_caps);
downstream_caps = tmp;
}
if (downstream_caps && !gst_caps_is_empty (downstream_caps))
s2 = gst_caps_get_structure (downstream_caps, 0);
else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment