opus: Buffer the samples from the correct offset
authorMichael Niedermayer <michael@niedermayer.cc>
Tue, 27 Oct 2015 12:47:12 +0000 (13:47 +0100)
committerLuca Barbato <lu_zero@gentoo.org>
Wed, 28 Oct 2015 15:59:57 +0000 (16:59 +0100)
When not all the opus stream have the same amount of decoded samples
process the least amount and store what is left from the other streams.

Bug-Id: 909
CC: libav-stable@libav.org
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
libavcodec/opusdec.c

index acae6e1..919e5e3 100644 (file)
@@ -567,8 +567,8 @@ static int opus_decode_packet(AVCodecContext *avctx, void *data,
         if (buffer_samples) {
             float *buf[2] = { c->out[2 * i + 0] ? c->out[2 * i + 0] : (float*)frame->extended_data[0],
                               c->out[2 * i + 1] ? c->out[2 * i + 1] : (float*)frame->extended_data[0] };
-            buf[0] += buffer_samples;
-            buf[1] += buffer_samples;
+            buf[0] += decoded_samples;
+            buf[1] += decoded_samples;
             ret = av_audio_fifo_write(c->sync_buffers[i], (void**)buf, buffer_samples);
             if (ret < 0)
                 return ret;