Mercurial > libavcodec.hg
diff eac3dec.c @ 9681:116836dbd25d libavcodec
eac3dec: make GAQ dequantization 24-bit
author | jbr |
---|---|
date | Thu, 21 May 2009 00:15:03 +0000 |
parents | debe2623a70a |
children | 0596729ae4af |
line wrap: on
line diff
--- a/eac3dec.c Thu May 21 00:09:23 2009 +0000 +++ b/eac3dec.c Thu May 21 00:15:03 2009 +0000 @@ -178,19 +178,21 @@ if (mant == -(1 << (gbits-1))) { /* large mantissa */ int b; - mant = get_sbits(gbc, bits-2+log_gain) << (26-log_gain-bits); + int mbits = bits - (2 - log_gain); + mant = get_sbits(gbc, mbits); + mant <<= (23 - (mbits - 1)); /* remap mantissa value to correct for asymmetric quantization */ if (mant >= 0) - b = 32768 >> (log_gain+8); + b = 1 << (23 - (mbits - 1)); else - b = ff_eac3_gaq_remap_2_4_b[hebap-8][log_gain-1]; - mant += (ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] * (mant>>8) + b) >> 7; + b = ff_eac3_gaq_remap_2_4_b[hebap-8][log_gain-1] << 8; + mant += (((ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] << 8) * (int64_t)mant) >> 23) + b; } else { /* small mantissa, no GAQ, or Gk=1 */ mant <<= 24 - bits; if (!log_gain) { /* remap mantissa value for no GAQ or Gk=1 */ - mant += (ff_eac3_gaq_remap_1[hebap-8] * (mant>>8)) >> 7; + mant += ((ff_eac3_gaq_remap_1[hebap-8] << 8) * (int64_t)mant) >> 23; } } s->pre_mantissa[ch][bin][blk] = mant;