[SCM] libav/experimental: Simplify fix15(). Turn it into 2 macros, and use av_clip_int16() and lrintf(). This matches the int16 to float sample conversion in audioconvert.c. The regression test output is different due to lrintf() rounding.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:20:08 UTC 2013


The following commit has been merged in the experimental branch:
commit 918cd2255c449409c88879ce8c12a842b13f7c01
Author: Justin Ruggles <justin.ruggles at gmail.com>
Date:   Tue Dec 14 14:51:02 2010 +0000

    Simplify fix15().
    Turn it into 2 macros, and use av_clip_int16() and lrintf().
    This matches the int16 to float sample conversion in audioconvert.c.
    The regression test output is different due to lrintf() rounding.
    
    Originally committed as revision 25956 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index eb4f753..b79a0fa 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -33,6 +33,8 @@
 #include "ac3.h"
 #include "audioconvert.h"
 
+#define SCALE_FLOAT(a, bits) lrintf((a) * (float)(1 << (bits)))
+
 typedef struct AC3EncodeContext {
     PutBitContext pb;                       ///< bitstream writer context
 
@@ -86,16 +88,7 @@ static int16_t xsin1[128];
 /* new exponents are sent if their Norm 1 exceed this number */
 #define EXP_DIFF_THRESHOLD 1000
 
-static inline int16_t fix15(float a)
-{
-    int v;
-    v = (int)(a * (float)(1 << 15));
-    if (v < -32767)
-        v = -32767;
-    else if (v > 32767)
-        v = 32767;
-    return v;
-}
+#define FIX15(a) av_clip_int16(SCALE_FLOAT(a, 15))
 
 typedef struct IComplex {
     int16_t re,im;
@@ -110,8 +103,8 @@ static av_cold void fft_init(int ln)
 
     for(i=0;i<(n/2);i++) {
         alpha = 2 * M_PI * (float)i / (float)n;
-        costab[i] = fix15(cos(alpha));
-        sintab[i] = fix15(sin(alpha));
+        costab[i] = FIX15(cos(alpha));
+        sintab[i] = FIX15(sin(alpha));
     }
 }
 
@@ -126,8 +119,8 @@ static av_cold void mdct_init(int nbits)
 
     for(i=0;i<n4;i++) {
         alpha = 2 * M_PI * (i + 1.0 / 8.0) / n;
-        xcos1[i] = fix15(-cos(alpha));
-        xsin1[i] = fix15(-sin(alpha));
+        xcos1[i] = FIX15(-cos(alpha));
+        xsin1[i] = FIX15(-sin(alpha));
     }
 }
 
diff --git a/tests/ref/acodec/ac3 b/tests/ref/acodec/ac3
index b393956..32f47e0 100644
--- a/tests/ref/acodec/ac3
+++ b/tests/ref/acodec/ac3
@@ -1,2 +1,2 @@
-081bfd5e683b13cccf1b07c43c1c5005 *./tests/data/acodec/ac3.rm
+464093173530736050e338caf152044c *./tests/data/acodec/ac3.rm
 98751 ./tests/data/acodec/ac3.rm

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list