mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec/adxdec: Remove unnecessary left-shift
Replace "(a * (1 << shift) * b + c) >> shift" by "a * b + (c >> shift)". It is equivalent to the old code because a is in the range of uint16_t, shift is 12 and b is effectively a signed 4-bit number, so that no overflow/truncation of high bits happens during the multiplication (overflow would be undefined anyway). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
59a9d65e0d
commit
340e6b0185
@ -81,7 +81,7 @@ static int adx_decode(ADXContext *c, int16_t *out, int offset,
|
|||||||
s2 = prev->s2;
|
s2 = prev->s2;
|
||||||
for (i = 0; i < BLOCK_SAMPLES; i++) {
|
for (i = 0; i < BLOCK_SAMPLES; i++) {
|
||||||
d = get_sbits(&gb, 4);
|
d = get_sbits(&gb, 4);
|
||||||
s0 = ((d * (1 << COEFF_BITS)) * scale + c->coeff[0] * s1 + c->coeff[1] * s2) >> COEFF_BITS;
|
s0 = d * scale + ((c->coeff[0] * s1 + c->coeff[1] * s2) >> COEFF_BITS);
|
||||||
s2 = s1;
|
s2 = s1;
|
||||||
s1 = av_clip_int16(s0);
|
s1 = av_clip_int16(s0);
|
||||||
*out++ = s1;
|
*out++ = s1;
|
||||||
|
Loading…
Reference in New Issue
Block a user