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);