Skip to content
Snippets Groups Projects
Commit 7ac32601 authored by Thiago Santos's avatar Thiago Santos
Browse files

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
parent 85875487
No related branches found
No related tags found
No related merge requests found
......@@ -904,20 +904,27 @@ gst_opus_dec_caps_extend_rate_options (GstCaps * caps)
GstCaps *
gst_opus_dec_getcaps (GstAudioDecoder * dec, GstCaps * filter)
{
GstCaps *caps;
GstCaps *caps, *proxy_filter = NULL, *ret;
if (filter) {
filter = gst_caps_copy (filter);
gst_opus_dec_caps_extend_channels_options (filter);
gst_opus_dec_caps_extend_rate_options (filter);
proxy_filter = gst_caps_copy (filter);
gst_opus_dec_caps_extend_channels_options (proxy_filter);
gst_opus_dec_caps_extend_rate_options (proxy_filter);
}
caps = gst_audio_decoder_proxy_getcaps (dec, NULL, filter);
if (filter)
gst_caps_unref (filter);
caps = gst_audio_decoder_proxy_getcaps (dec, NULL, proxy_filter);
if (proxy_filter)
gst_caps_unref (proxy_filter);
if (caps) {
caps = gst_caps_make_writable (caps);
gst_opus_dec_caps_extend_channels_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]");
run_getcaps_check_from_strings (NULL, "audio/x-raw, channels=(int)5000",
"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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment