diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2010-12-14 14:51:02 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2010-12-14 14:51:02 +0000 |
commit | 918cd2255c449409c88879ce8c12a842b13f7c01 (patch) | |
tree | 555f82fb04eaf849802ce2cfd077f83790c7bb2a /libavcodec/ac3enc.c | |
parent | 228315bbd3f8b2e77cea5fe0a14e461716f0c466 (diff) | |
download | ffmpeg-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
Diffstat (limited to 'libavcodec/ac3enc.c')
-rw-r--r-- | libavcodec/ac3enc.c | 21 |
1 files changed, 7 insertions, 14 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)); } } |