mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-22 23:28:16 +00:00
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.
This commit is contained in:
parent
cc3942e673
commit
83939c81e7
1 changed files with 12 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue