aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2010-12-14 14:51:02 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2010-12-14 14:51:02 +0000
commit918cd2255c449409c88879ce8c12a842b13f7c01 (patch)
tree555f82fb04eaf849802ce2cfd077f83790c7bb2a
parent228315bbd3f8b2e77cea5fe0a14e461716f0c466 (diff)
downloadffmpeg-918cd2255c449409c88879ce8c12a842b13f7c01.tar.gz
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
-rw-r--r--libavcodec/ac3enc.c21
-rw-r--r--tests/ref/acodec/ac32
2 files changed, 8 insertions, 15 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index eb4f753d95..b79a0fadcf 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 b39395637c..32f47e0f5a 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