Update SILK code using the CELT range coder
[opus.git] / src_SigProc_FIX / SKP_Silk_array_maxabs.c
similarity index 91%
rename from src/SKP_Silk_array_maxabs.c
rename to src_SigProc_FIX/SKP_Silk_array_maxabs.c
index 915af9f..8561524 100644 (file)
@@ -37,6 +37,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include "SKP_Silk_SigProc_FIX.h"\r
 \r
 /* Function that returns the maximum absolut value of the input vector */\r
+#if (! defined(__mips__)) && EMBEDDED_ARM<4\r
 SKP_int16 SKP_Silk_int16_array_maxabs(    /* O    Maximum absolute value, max: 2^15-1   */\r
     const SKP_int16        *vec,            /* I    Input vector  [len]                   */\r
     const SKP_int32        len              /* I    Length of input vector                */\r
@@ -55,10 +56,14 @@ SKP_int16 SKP_Silk_int16_array_maxabs(    /* O    Maximum absolute value, max: 2
     }\r
 \r
     /* Do not return 32768, as it will not fit in an int16 so may lead to problems later on */\r
-    lvl = SKP_abs( vec[ ind ] );\r
-    if( lvl > SKP_int16_MAX ) {\r
+    if( max >= 1073676289 ) { // (2^15-1)^2 = 1073676289\r
         return( SKP_int16_MAX );\r
     } else {\r
-        return( (SKP_int16)lvl );\r
+        if( vec[ ind ] < 0 ) {\r
+            return( -vec[ ind ] );\r
+        } else {\r
+            return(  vec[ ind ] );\r
+        }\r
     }\r
 }\r
+#endif\r