shithub: opus

Download patch

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;
    }