1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-07-23 06:12:14 +08:00

adpcm: convert ima_ws to bytestream2.

This commit is contained in:
Ronald S. Bultje
2012-03-17 14:17:48 -07:00
parent 74d7ac95fb
commit 16b7a5e241

@ -809,28 +809,29 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
} }
break; break;
case CODEC_ID_ADPCM_IMA_WS: case CODEC_ID_ADPCM_IMA_WS:
if (c->vqa_version == 3) {
for (channel = 0; channel < avctx->channels; channel++) { for (channel = 0; channel < avctx->channels; channel++) {
const uint8_t *src0;
int src_stride;
int16_t *smp = samples + channel; int16_t *smp = samples + channel;
if (c->vqa_version == 3) {
src0 = src + channel * buf_size / 2;
src_stride = 1;
} else {
src0 = src + channel;
src_stride = avctx->channels;
}
for (n = nb_samples / 2; n > 0; n--) { for (n = nb_samples / 2; n > 0; n--) {
uint8_t v = *src0; int v = bytestream2_get_byteu(&gb);
src0 += src_stride;
*smp = adpcm_ima_expand_nibble(&c->status[channel], v >> 4 , 3); *smp = adpcm_ima_expand_nibble(&c->status[channel], v >> 4 , 3);
smp += avctx->channels; smp += avctx->channels;
*smp = adpcm_ima_expand_nibble(&c->status[channel], v & 0x0F, 3); *smp = adpcm_ima_expand_nibble(&c->status[channel], v & 0x0F, 3);
smp += avctx->channels; smp += avctx->channels;
} }
} }
src = buf + buf_size; } else {
for (n = nb_samples / 2; n > 0; n--) {
for (channel = 0; channel < avctx->channels; channel++) {
int v = bytestream2_get_byteu(&gb);
*samples++ = adpcm_ima_expand_nibble(&c->status[channel], v >> 4 , 3);
samples[st] = adpcm_ima_expand_nibble(&c->status[channel], v & 0x0F, 3);
}
samples += avctx->channels;
}
}
bytestream2_seek(&gb, 0, SEEK_END);
break; break;
case CODEC_ID_ADPCM_XA: case CODEC_ID_ADPCM_XA:
while (buf_size >= 128) { while (buf_size >= 128) {