shithub: opus

Download patch

ref: a8fb25f11cf23b2e50a5e2610fce6d417151efc7
parent: a09815925a1116847ba6948ca8aa25052816b26f
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Wed Mar 20 09:36:42 EDT 2019

Remove NaN checks

--- a/dnn/arch.h
+++ b/dnn/arch.h
@@ -157,22 +157,6 @@
 typedef float celt_norm;
 typedef float celt_ener;
 
-#ifdef FLOAT_APPROX
-/* This code should reliably detect NaN/inf even when -ffast-math is used.
-   Assumes IEEE 754 format. */
-static OPUS_INLINE int celt_isnan(float x)
-{
-   union {float f; opus_uint32 i;} in;
-   in.f = x;
-   return ((in.i>>23)&0xFF)==0xFF && (in.i&0x007FFFFF)!=0;
-}
-#else
-#ifdef __FAST_MATH__
-#error Cannot build libopus with -ffast-math unless FLOAT_APPROX is defined. This could result in crashes on extreme (e.g. NaN) input
-#endif
-#define celt_isnan(x) ((x)!=(x))
-#endif
-
 #define Q15ONE 1.0f
 
 #define NORM_SCALING 1.f
--- a/dnn/vec.h
+++ b/dnn/vec.h
@@ -52,16 +52,6 @@
     int i;
     float y, dy;
     float sign=1;
-    /* Tests are reversed to catch NaNs */
-    if (!(x<8))
-        return 1;
-    if (!(x>-8))
-        return -1;
-#ifndef FIXED_POINT
-    /* Another check in case of -ffast-math */
-    if (celt_isnan(x))
-       return 0;
-#endif
     if (x<0)
     {
        x=-x;
@@ -68,6 +58,7 @@
        sign=-1;
     }
     i = (int)floor(.5f+25*x);
+    i = IMAX(0, IMIN(200, i));
     x -= .04f*i;
     y = tansig_table[i];
     dy = 1-y*y;
--