diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2011-11-20 13:06:32 -0500 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2011-11-26 16:25:06 -0500 |
commit | c52ddc60241229af198ac03c8d86d219e7d5942a (patch) | |
tree | 34c37c23f0ab184e53d2d90494139506c9cf313f | |
parent | ca9e4727baf0458d4dd7038987e060c6415eca09 (diff) | |
download | ffmpeg-c52ddc60241229af198ac03c8d86d219e7d5942a.tar.gz |
adx: simplify adx_decode() by using get_sbits() to read residual samples
-rw-r--r-- | libavcodec/adxdec.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/libavcodec/adxdec.c b/libavcodec/adxdec.c index c5a30b2b4e..39223c2e4f 100644 --- a/libavcodec/adxdec.c +++ b/libavcodec/adxdec.c @@ -22,6 +22,7 @@ #include "libavutil/intreadwrite.h" #include "avcodec.h" #include "adx.h" +#include "get_bits.h" /** * @file @@ -48,24 +49,16 @@ static av_cold int adx_decode_init(AVCodecContext *avctx) static void adx_decode(ADXContext *c, int16_t *out, const uint8_t *in, int ch) { ADXChannelState *prev = &c->prev[ch]; + GetBitContext gb; int scale = AV_RB16(in); int i; int s0, s1, s2, d; - in += 2; + init_get_bits(&gb, in + 2, (18 - 2) * 8); s1 = prev->s1; s2 = prev->s2; - for (i = 0; i < 16; i++) { - d = in[i]; - d = (signed char)d >> 4; - s0 = (BASEVOL * d * scale + SCALE1 * s1 - SCALE2 * s2) >> 14; - s2 = s1; - s1 = av_clip_int16(s0); - *out = s1; - out += c->channels; - - d = in[i]; - d = (signed char)(d << 4) >> 4; + for (i = 0; i < 32; i++) { + d = get_sbits(&gb, 4); s0 = (BASEVOL * d * scale + SCALE1 * s1 - SCALE2 * s2) >> 14; s2 = s1; s1 = av_clip_int16(s0); |