mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/adpcm: fix decoding of stereo non 4-bit ADPCM IMA WAV
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
3395ad48fa
commit
66eb5b809a
|
@ -783,15 +783,23 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
|
||||||
|
|
||||||
if (avctx->bits_per_coded_sample != 4) {
|
if (avctx->bits_per_coded_sample != 4) {
|
||||||
int samples_per_block = ff_adpcm_ima_block_samples[avctx->bits_per_coded_sample - 2];
|
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;
|
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 (n = 0; n < (nb_samples - 1) / samples_per_block; n++) {
|
||||||
for (i = 0; i < avctx->channels; i++) {
|
for (i = 0; i < avctx->channels; i++) {
|
||||||
|
int j;
|
||||||
|
|
||||||
cs = &c->status[i];
|
cs = &c->status[i];
|
||||||
samples = &samples_p[i][1 + n * samples_per_block];
|
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++) {
|
for (m = 0; m < samples_per_block; m++) {
|
||||||
samples[m] = adpcm_ima_wav_expand_nibble(cs, &g,
|
samples[m] = adpcm_ima_wav_expand_nibble(cs, &g,
|
||||||
avctx->bits_per_coded_sample);
|
avctx->bits_per_coded_sample);
|
||||||
|
|
Loading…
Reference in New Issue