The change to FLOAT2INT16 in a8734e0f would break float input for
authorGregory Maxwell <greg@xiph.org>
Fri, 22 May 2009 03:08:46 +0000 (23:08 -0400)
committerGregory Maxwell <greg@xiph.org>
Fri, 22 May 2009 03:08:46 +0000 (23:08 -0400)
fixed point compilation because SCALEIN is a no-op in fixed point
mode but the float interface is still normally +/- 1.0.

This patch adds a seperate define for the scaling factor so people
can adjust it for unusual input levels.

libcelt/arch.h
libcelt/celt.c

index 3367517..caef58a 100644 (file)
@@ -37,6 +37,7 @@
 
 #include "celt_types.h"
 
+#define CELT_SIG_SCALE 32768.
 
 #define celt_fatal(str) _celt_fatal(str, __FILE__, __LINE__);
 #ifdef ENABLE_ASSERTIONS
@@ -217,8 +218,8 @@ typedef float celt_mask_t;
 #define DIV32(a,b)     (((celt_word32_t)(a))/(celt_word32_t)(b))
 #define PDIV32(a,b)     (((celt_word32_t)(a))/(celt_word32_t)(b))
 
-#define SCALEIN(a)     ((a)*32768.)
-#define SCALEOUT(a)    ((a)*(1/32768.))
+#define SCALEIN(a)     ((a)*CELT_SIG_SCALE)
+#define SCALEOUT(a)    ((a)*(1/CELT_SIG_SCALE))
 
 #endif /* !FIXED_POINT */
 
index 884edee..31c617a 100644 (file)
@@ -158,7 +158,7 @@ void celt_encoder_destroy(CELTEncoder *st)
 
 static inline celt_int16_t FLOAT2INT16(float x)
 {
-   x = SCALEIN(x);
+   x = x*CELT_SIG_SCALE;
    x = MAX32(x, -32768);
    x = MIN32(x, 32767);
    return (celt_int16_t)float2int(x);