diff --git a/celt/mathops.h b/celt/mathops.h index 3c7486ad643ae09e6e0146f572fab0deb4aea1a9..cb0b9c86ec0b84049d1d46bcb93f0a627fd6ae8b 100644 --- a/celt/mathops.h +++ b/celt/mathops.h @@ -48,9 +48,13 @@ static inline opus_val16 celt_maxabs16(const opus_val16 *x, int len) { int i; opus_val16 maxval = 0; + opus_val16 minval = 0; for (i=0;i<len;i++) - maxval = MAX16(maxval, ABS16(x[i])); - return maxval; + { + maxval = MAX16(maxval, x[i]); + minval = MIN16(minval, x[i]); + } + return MAX16(maxval,-minval); } #endif @@ -60,9 +64,13 @@ static inline opus_val32 celt_maxabs32(const opus_val32 *x, int len) { int i; opus_val32 maxval = 0; + opus_val32 minval = 0; for (i=0;i<len;i++) - maxval = MAX32(maxval, ABS32(x[i])); - return maxval; + { + maxval = MAX32(maxval, x[i]); + minval = MIN32(minval, x[i]); + } + return MAX32(maxval, -minval); } #else #define celt_maxabs32(x,len) celt_maxabs16(x,len)