From: Paul B Mahol Date: Wed, 4 May 2016 09:33:34 +0000 (+0200) Subject: avcodec/adpcm: fix decoding of stereo non 4-bit ADPCM IMA WAV X-Git-Tag: android-x86-7.1-r1~5387 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=66eb5b809add21f8f977b9efb0fe3b4fd6253d38;p=android-x86%2Fexternal-ffmpeg.git avcodec/adpcm: fix decoding of stereo non 4-bit ADPCM IMA WAV Signed-off-by: Paul B Mahol --- diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 791631751d..0b6b92e8dc 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -783,15 +783,23 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, if (avctx->bits_per_coded_sample != 4) { int samples_per_block = ff_adpcm_ima_block_samples[avctx->bits_per_coded_sample - 2]; + int block_size = ff_adpcm_ima_block_sizes[avctx->bits_per_coded_sample - 2]; + uint8_t temp[20] = { 0 }; GetBitContext g; - ret = init_get_bits8(&g, gb.buffer, bytestream2_get_bytes_left(&gb)); - if (ret < 0) - return ret; for (n = 0; n < (nb_samples - 1) / samples_per_block; n++) { for (i = 0; i < avctx->channels; i++) { + int j; + cs = &c->status[i]; samples = &samples_p[i][1 + n * samples_per_block]; + for (j = 0; j < block_size; j++) { + temp[j] = buf[4 * avctx->channels + block_size * n * avctx->channels + + (j % 4) + (j / 4) * (avctx->channels * 4) + i * 4]; + } + ret = init_get_bits8(&g, (const uint8_t *)&temp, block_size); + if (ret < 0) + return ret; for (m = 0; m < samples_per_block; m++) { samples[m] = adpcm_ima_wav_expand_nibble(cs, &g, avctx->bits_per_coded_sample);