adx: simplify adx_decode() by using get_sbits() to read residual samples
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
#include "libavutil/intreadwrite.h"
|
#include "libavutil/intreadwrite.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "adx.h"
|
#include "adx.h"
|
||||||
|
#include "get_bits.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file
|
* @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)
|
static void adx_decode(ADXContext *c, int16_t *out, const uint8_t *in, int ch)
|
||||||
{
|
{
|
||||||
ADXChannelState *prev = &c->prev[ch];
|
ADXChannelState *prev = &c->prev[ch];
|
||||||
|
GetBitContext gb;
|
||||||
int scale = AV_RB16(in);
|
int scale = AV_RB16(in);
|
||||||
int i;
|
int i;
|
||||||
int s0, s1, s2, d;
|
int s0, s1, s2, d;
|
||||||
|
|
||||||
in += 2;
|
init_get_bits(&gb, in + 2, (18 - 2) * 8);
|
||||||
s1 = prev->s1;
|
s1 = prev->s1;
|
||||||
s2 = prev->s2;
|
s2 = prev->s2;
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 32; i++) {
|
||||||
d = in[i];
|
d = get_sbits(&gb, 4);
|
||||||
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;
|
|
||||||
s0 = (BASEVOL * d * scale + SCALE1 * s1 - SCALE2 * s2) >> 14;
|
s0 = (BASEVOL * d * scale + SCALE1 * s1 - SCALE2 * s2) >> 14;
|
||||||
s2 = s1;
|
s2 = s1;
|
||||||
s1 = av_clip_int16(s0);
|
s1 = av_clip_int16(s0);
|
||||||
|
Reference in New Issue
Block a user