mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 04:31:06 +00:00
opusdec: intersect with the filter before returning on getcaps
So upstream gets a smaller set to decide upon as it is what it requested with the filter https://bugzilla.gnome.org/show_bug.cgi?id=765684
This commit is contained in:
parent
7a5797d3a6
commit
60c765174f
2 changed files with 29 additions and 8 deletions
|
@ -903,20 +903,27 @@ gst_opus_dec_caps_extend_rate_options (GstCaps * caps)
|
||||||
GstCaps *
|
GstCaps *
|
||||||
gst_opus_dec_getcaps (GstAudioDecoder * dec, GstCaps * filter)
|
gst_opus_dec_getcaps (GstAudioDecoder * dec, GstCaps * filter)
|
||||||
{
|
{
|
||||||
GstCaps *caps;
|
GstCaps *caps, *proxy_filter = NULL, *ret;
|
||||||
|
|
||||||
if (filter) {
|
if (filter) {
|
||||||
filter = gst_caps_copy (filter);
|
proxy_filter = gst_caps_copy (filter);
|
||||||
gst_opus_dec_caps_extend_channels_options (filter);
|
gst_opus_dec_caps_extend_channels_options (proxy_filter);
|
||||||
gst_opus_dec_caps_extend_rate_options (filter);
|
gst_opus_dec_caps_extend_rate_options (proxy_filter);
|
||||||
}
|
}
|
||||||
caps = gst_audio_decoder_proxy_getcaps (dec, NULL, filter);
|
caps = gst_audio_decoder_proxy_getcaps (dec, NULL, proxy_filter);
|
||||||
if (filter)
|
if (proxy_filter)
|
||||||
gst_caps_unref (filter);
|
gst_caps_unref (proxy_filter);
|
||||||
if (caps) {
|
if (caps) {
|
||||||
caps = gst_caps_make_writable (caps);
|
caps = gst_caps_make_writable (caps);
|
||||||
gst_opus_dec_caps_extend_channels_options (caps);
|
gst_opus_dec_caps_extend_channels_options (caps);
|
||||||
gst_opus_dec_caps_extend_rate_options (caps);
|
gst_opus_dec_caps_extend_rate_options (caps);
|
||||||
}
|
}
|
||||||
return caps;
|
|
||||||
|
if (filter) {
|
||||||
|
ret = gst_caps_intersect (caps, filter);
|
||||||
|
gst_caps_unref (caps);
|
||||||
|
} else {
|
||||||
|
ret = caps;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -402,6 +402,20 @@ GST_START_TEST (test_opusdec_getcaps)
|
||||||
"audio/x-opus, rate=(int){48000, 24000, 16000, 12000, 8000}, channels=(int)[1,2]");
|
"audio/x-opus, rate=(int){48000, 24000, 16000, 12000, 8000}, channels=(int)[1,2]");
|
||||||
run_getcaps_check_from_strings (NULL, "audio/x-raw, channels=(int)5000",
|
run_getcaps_check_from_strings (NULL, "audio/x-raw, channels=(int)5000",
|
||||||
"EMPTY");
|
"EMPTY");
|
||||||
|
|
||||||
|
/* Now add filters */
|
||||||
|
|
||||||
|
/* Formats not acceptable */
|
||||||
|
run_getcaps_check_from_strings ("audio/x-opus, rate=(int)1000", NULL,
|
||||||
|
"EMPTY");
|
||||||
|
run_getcaps_check_from_strings ("audio/x-opus, channels=(int)200", NULL,
|
||||||
|
"EMPTY");
|
||||||
|
|
||||||
|
/* Should restrict the result of the caps query to the selected rate/channels */
|
||||||
|
run_getcaps_check_from_strings ("audio/x-opus, rate=(int)8000", NULL,
|
||||||
|
"audio/x-opus, rate=(int)8000, channels=(int)[1,8]");
|
||||||
|
run_getcaps_check_from_strings ("audio/x-opus, channels=(int)2", NULL,
|
||||||
|
"audio/x-opus, rate=(int){48000, 24000, 16000, 12000, 8000}, channels=(int)2");
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
Loading…
Reference in a new issue