|
|
|
@ -178,19 +178,21 @@ void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch) |
|
|
|
|
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; |
|
|
|
|