fixed-point: defined celt_maxabs16() as basic operator
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Fri, 21 Mar 2008 00:13:51 +0000 (11:13 +1100)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Fri, 21 Mar 2008 00:13:51 +0000 (11:13 +1100)
libcelt/fixed_c5x.h
libcelt/mathops.h
libcelt/pitch.c

index 170d79e..76bf47d 100644 (file)
 #define MULT16_32_Q15(a,b) ADD32(SHL(MULT16_16((a),SHR((b),16)),1), SHR(MULT16_16SU((a),(b)),15))
 
 
-
 #define celt_ilog2(x) (30 - _lnorm(x))
 #define OVERRIDE_CELT_ILOG2
 
+#define celt_maxabs16(x) MAX16(maxval((DATA *)x, len),-minval((DATA *)x, len))
+#define OVERRIDE_CELT_MAXABS16
+
 #endif /* FIXED_C5X_H */
index 9269fb7..39cfb4a 100644 (file)
@@ -64,6 +64,16 @@ static inline celt_int16_t celt_ilog2(celt_word32_t x)
 }
 #endif
 
+#ifndef OVERRIDE_CELT_MAXABS16
+static inline celt_word16_t celt_maxabs16(celt_word16_t *x, int len)
+{
+   int i;
+   celt_word16_t maxval = 0;
+   for (i=0;i<len;i++)
+      maxval = MAX16(maxval, ABS16(x[i]));
+   return maxval;
+}
+#endif
 
 /** Integer log in base2. Defined for zero, but not for negative numbers */
 static inline celt_int16_t celt_zlog2(celt_word32_t x)
index 86a3cdb..98306a4 100644 (file)
@@ -63,9 +63,8 @@ void pitch_state_free(kiss_fftr_cfg st)
 static void normalise16(celt_word16_t *x, int len, celt_word16_t val)
 {
    int i;
-   celt_word16_t maxval = 0;
-   for (i=0;i<len;i++)
-      maxval = MAX16(maxval, ABS16(x[i]));
+   celt_word16_t maxval;
+   maxval = celt_maxabs16(x,len);
    if (maxval > val)
    {
       int shift = 0;