| Index: third_party/opus/src/celt/mathops.h
|
| diff --git a/third_party/opus/src/celt/mathops.h b/third_party/opus/src/celt/mathops.h
|
| index a0525a961030ae5df1674ff59612f2054453a921..1f8a20cb4540255ffc4ea0a5f6716a31798c6a6f 100644
|
| --- a/third_party/opus/src/celt/mathops.h
|
| +++ b/third_party/opus/src/celt/mathops.h
|
| @@ -38,11 +38,44 @@
|
| #include "entcode.h"
|
| #include "os_support.h"
|
|
|
| +#define PI 3.141592653f
|
| +
|
| /* Multiplies two 16-bit fractional values. Bit-exactness of this macro is important */
|
| #define FRAC_MUL16(a,b) ((16384+((opus_int32)(opus_int16)(a)*(opus_int16)(b)))>>15)
|
|
|
| unsigned isqrt32(opus_uint32 _val);
|
|
|
| +/* CELT doesn't need it for fixed-point, by analysis.c does. */
|
| +#if !defined(FIXED_POINT) || defined(ANALYSIS_C)
|
| +#define cA 0.43157974f
|
| +#define cB 0.67848403f
|
| +#define cC 0.08595542f
|
| +#define cE ((float)PI/2)
|
| +static OPUS_INLINE float fast_atan2f(float y, float x) {
|
| + float x2, y2;
|
| + x2 = x*x;
|
| + y2 = y*y;
|
| + /* For very small values, we don't care about the answer, so
|
| + we can just return 0. */
|
| + if (x2 + y2 < 1e-18f)
|
| + {
|
| + return 0;
|
| + }
|
| + if(x2<y2){
|
| + float den = (y2 + cB*x2) * (y2 + cC*x2);
|
| + return -x*y*(y2 + cA*x2) / den + (y<0 ? -cE : cE);
|
| + }else{
|
| + float den = (x2 + cB*y2) * (x2 + cC*y2);
|
| + return x*y*(x2 + cA*y2) / den + (y<0 ? -cE : cE) - (x*y<0 ? -cE : cE);
|
| + }
|
| +}
|
| +#undef cA
|
| +#undef cB
|
| +#undef cC
|
| +#undef cD
|
| +#endif
|
| +
|
| +
|
| #ifndef OVERRIDE_CELT_MAXABS16
|
| static OPUS_INLINE opus_val32 celt_maxabs16(const opus_val16 *x, int len)
|
| {
|
| @@ -80,7 +113,6 @@ static OPUS_INLINE opus_val32 celt_maxabs32(const opus_val32 *x, int len)
|
|
|
| #ifndef FIXED_POINT
|
|
|
| -#define PI 3.141592653f
|
| #define celt_sqrt(x) ((float)sqrt(x))
|
| #define celt_rsqrt(x) (1.f/celt_sqrt(x))
|
| #define celt_rsqrt_norm(x) (celt_rsqrt(x))
|
|
|