Commit 94e6b5ac authored by Misty De Meo's avatar Misty De Meo Committed by Michael Niedermayer

adpcm: consume remainder after consuming XA chunks

Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent fba00b74
...@@ -1115,6 +1115,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, ...@@ -1115,6 +1115,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
int16_t *out1 = samples_p[1]; int16_t *out1 = samples_p[1];
int samples_per_block = 28 * (3 - avctx->channels) * 4; int samples_per_block = 28 * (3 - avctx->channels) * 4;
int sample_offset = 0; int sample_offset = 0;
int bytes_remaining;
while (bytestream2_get_bytes_left(&gb) >= 128) { while (bytestream2_get_bytes_left(&gb) >= 128) {
if ((ret = xa_decode(avctx, out0, out1, buf + bytestream2_tell(&gb), if ((ret = xa_decode(avctx, out0, out1, buf + bytestream2_tell(&gb),
&c->status[0], &c->status[1], &c->status[0], &c->status[1],
...@@ -1123,6 +1124,12 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, ...@@ -1123,6 +1124,12 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
bytestream2_skipu(&gb, 128); bytestream2_skipu(&gb, 128);
sample_offset += samples_per_block; sample_offset += samples_per_block;
} }
/* Less than a full block of data left, e.g. when reading from
* 2324 byte per sector XA; the remainder is padding */
bytes_remaining = bytestream2_get_bytes_left(&gb);
if (bytes_remaining > 0) {
bytestream2_skip(&gb, bytes_remaining);
}
break; break;
} }
case AV_CODEC_ID_ADPCM_IMA_EA_EACS: case AV_CODEC_ID_ADPCM_IMA_EA_EACS:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment