diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2012-03-17 12:51:59 -0700 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2012-03-18 15:25:25 -0700 |
commit | 39505f42405d31b344918d37bb8f2eb51fe356ac (patch) | |
tree | 42ac7c1b6e0ab91023bc062beb82250c731dea04 /libavcodec/adpcm.c | |
parent | 9604307dd89745071611e6e2898a78460bb61fcb (diff) | |
download | ffmpeg-39505f42405d31b344918d37bb8f2eb51fe356ac.tar.gz |
adpcm: convert adpcm_ima_wav to bytestream2.
Diffstat (limited to 'libavcodec/adpcm.c')
-rw-r--r-- | libavcodec/adpcm.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 1f61c56d80..9fd57240af 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -618,26 +618,23 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, } break; case CODEC_ID_ADPCM_IMA_WAV: - if (avctx->block_align != 0 && buf_size > avctx->block_align) - buf_size = avctx->block_align; - for(i=0; i<avctx->channels; i++){ cs = &(c->status[i]); - cs->predictor = *samples++ = (int16_t)bytestream_get_le16(&src); + cs->predictor = *samples++ = sign_extend(bytestream2_get_le16u(&gb), 16); - cs->step_index = *src++; - if (cs->step_index > 88){ - av_log(avctx, AV_LOG_ERROR, "ERROR: step_index = %i\n", cs->step_index); - cs->step_index = 88; + cs->step_index = sign_extend(bytestream2_get_le16u(&gb), 16); + if (cs->step_index > 88u){ + av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n", + i, cs->step_index); + return AVERROR_INVALIDDATA; } - if (*src++) av_log(avctx, AV_LOG_ERROR, "unused byte should be null but is %d!!\n", src[-1]); /* unused */ } for (n = (nb_samples - 1) / 8; n > 0; n--) { for (i = 0; i < avctx->channels; i++) { cs = &c->status[i]; for (m = 0; m < 4; m++) { - uint8_t v = *src++; + int v = bytestream2_get_byteu(&gb); *samples = adpcm_ima_expand_nibble(cs, v & 0x0F, 3); samples += avctx->channels; *samples = adpcm_ima_expand_nibble(cs, v >> 4 , 3); |