diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2012-03-17 13:42:17 -0700 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2012-03-18 15:25:26 -0700 |
commit | 97219014407bf9a34a42d128b3e313ffff4e0dfe (patch) | |
tree | 9e432412bafc7dec1f01e3f449302753e73104b1 /libavcodec/adpcm.c | |
parent | 1da958702647e2f25a041550b9ab49916e7eee37 (diff) | |
download | ffmpeg-97219014407bf9a34a42d128b3e313ffff4e0dfe.tar.gz |
adpcm: convert adpcm_ima_iss to bytestream2.
Diffstat (limited to 'libavcodec/adpcm.c')
-rw-r--r-- | libavcodec/adpcm.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 885b768999..16044d882e 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -777,14 +777,18 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, case CODEC_ID_ADPCM_IMA_ISS: for (channel = 0; channel < avctx->channels; channel++) { cs = &c->status[channel]; - cs->predictor = (int16_t)bytestream_get_le16(&src); - cs->step_index = av_clip(*src++, 0, 88); - src++; + cs->predictor = sign_extend(bytestream2_get_le16u(&gb), 16); + 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", + channel, cs->step_index); + return AVERROR_INVALIDDATA; + } } - for (n = nb_samples >> (1 - st); n > 0; n--, src++) { - uint8_t v1, v2; - uint8_t v = *src; + for (n = nb_samples >> (1 - st); n > 0; n--) { + int v1, v2; + int v = bytestream2_get_byteu(&gb); /* nibbles are swapped for mono */ if (st) { v1 = v >> 4; |