ref: e448df8301bc2512aa173331e07bddb08b50783b
parent: 5257e3fee8838e0198a3e4888e4742319a204053
author: Jean-Marc Valin <[email protected]>
date: Sun Sep 11 14:12:31 EDT 2011
Properly implementing the multistream decoder ctl()s Not tested
--- a/src/opus_multistream.c
+++ b/src/opus_multistream.c
@@ -710,7 +710,8 @@
ptr = (char*)st + align(sizeof(OpusMSDecoder));
switch (request)
{
- default:
+ case OPUS_GET_BANDWIDTH_REQUEST:
+ case OPUS_GET_FINAL_RANGE_REQUEST:
{
int s;
/* This only works for int32* params, but that's all we have right now */
@@ -717,18 +718,40 @@
opus_uint32 *value = va_arg(ap, opus_uint32*);
for (s=0;s<st->layout.nb_streams;s++)
{
- OpusDecoder *enc;
+ OpusDecoder *dec;
- enc = (OpusDecoder*)ptr;
+ dec = (OpusDecoder*)ptr;
if (s < st->layout.nb_coupled_streams)
ptr += align(coupled_size);
else
ptr += align(mono_size);
- ret = opus_decoder_ctl(enc, request, value);
+ ret = opus_decoder_ctl(dec, request, value);
if (ret < 0)
break;
}
}
+ break;
+ case OPUS_RESET_STATE:
+ {
+ int s;
+ /* This only works for int32* params, but that's all we have right now */
+ for (s=0;s<st->layout.nb_streams;s++)
+ {
+ OpusDecoder *dec;
+
+ dec = (OpusDecoder*)ptr;
+ if (s < st->layout.nb_coupled_streams)
+ ptr += align(coupled_size);
+ else
+ ptr += align(mono_size);
+ ret = opus_decoder_ctl(dec, OPUS_RESET_STATE);
+ if (ret < 0)
+ break;
+ }
+ }
+ break;
+ default:
+ ret = OPUS_UNIMPLEMENTED;
break;
}