diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2002-05-21 21:07:47 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2002-05-21 21:07:47 +0000 |
commit | 59d3e367a85f5faa1f8890bc69799e4d3bf2811e (patch) | |
tree | 0512c44ab17b103a90561bc94d6a7411a6ea37a7 /libavcodec/mpegaudiodec.c | |
parent | 777cc95fb4e58de7d7eb8d931b2ff3f4f83da56e (diff) | |
download | ffmpeg-59d3e367a85f5faa1f8890bc69799e4d3bf2811e.tar.gz |
fixed incorrect global gain - slightly increased precision of n^(4/3) table
Originally committed as revision 557 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/mpegaudiodec.c')
-rw-r--r-- | libavcodec/mpegaudiodec.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c index 9d882c6ff7..97b41ac658 100644 --- a/libavcodec/mpegaudiodec.c +++ b/libavcodec/mpegaudiodec.c @@ -279,12 +279,17 @@ static int int_pow(int i, int *exp_ptr) a = a << 1; eq--; } + /* now POW_FRAC_ONE <= a < 2 * POW_FRAC_ONE */ +#if (POW_FRAC_BITS - 1) > FRAC_BITS + a = (a + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS); + /* correct overflow */ + if (a >= 2 * (1 << FRAC_BITS)) { + a = a >> 1; + eq++; + } +#endif *exp_ptr = eq; -#if POW_FRAC_BITS == FRAC_BITS return a; -#else - return (a + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS); -#endif } static int decode_init(AVCodecContext * avctx) @@ -388,10 +393,6 @@ static int decode_init(AVCodecContext * avctx) for(i=1;i<TABLE_4_3_SIZE;i++) { int e, m; m = int_pow(i, &e); -#if FRAC_BITS <= 15 - if ((unsigned short)m != m) - m = 65535; -#endif #if 0 /* test code */ { @@ -401,8 +402,10 @@ static int decode_init(AVCodecContext * avctx) fm = frexp(f, &e1); m1 = FIXR(2 * fm); #if FRAC_BITS <= 15 - if ((unsigned short)m1 != m1) - m1 = 65535; + if ((unsigned short)m1 != m1) { + m1 = m1 >> 1; + e1++; + } #endif e1--; if (m != m1 || e != e1) { @@ -413,9 +416,8 @@ static int decode_init(AVCodecContext * avctx) #endif /* normalized to FRAC_BITS */ table_4_3_value[i] = m; - table_4_3_exp[i] = e - 1; + table_4_3_exp[i] = e; } - for(i=0;i<7;i++) { float f; |