mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
adx: simplify adx_decode() by using get_sbits() to read residual samples
This commit is contained in:
parent
ca9e4727ba
commit
c52ddc6024
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user