Originally committed as revision 18888 to svn://svn.ffmpeg.org/ffmpeg/trunk
| ... | ... |
@@ -87,19 +87,18 @@ const int16_t ff_eac3_gaq_remap_2_4_a[9][2] = {
|
| 87 | 87 |
/** |
| 88 | 88 |
* Table E3.6, Gk=2 & Gk=4, B |
| 89 | 89 |
* Large mantissa inverse quantization, negative mantissa remapping offsets |
| 90 |
- * Table values from the spec are right-shifted by 8 to simplify calculations. |
|
| 91 | 90 |
* ff_eac3_gaq_remap_3_4_b[hebap-8][Gk=2,4] |
| 92 | 91 |
*/ |
| 93 |
-const int8_t ff_eac3_gaq_remap_2_4_b[9][2] = {
|
|
| 94 |
- { -22, -5 },
|
|
| 95 |
- { -46, -20 },
|
|
| 96 |
- { -56, -26 },
|
|
| 97 |
- { -60, -29 },
|
|
| 98 |
- { -62, -31 },
|
|
| 99 |
- { -63, -32 },
|
|
| 100 |
- { -64, -32 },
|
|
| 101 |
- { -64, -32 },
|
|
| 102 |
- { -64, -32 },
|
|
| 92 |
+const int16_t ff_eac3_gaq_remap_2_4_b[9][2] = {
|
|
| 93 |
+ { -5461, -1170 },
|
|
| 94 |
+ { -11703, -4915 },
|
|
| 95 |
+ { -14199, -6606 },
|
|
| 96 |
+ { -15327, -7412 },
|
|
| 97 |
+ { -15864, -7805 },
|
|
| 98 |
+ { -16126, -7999 },
|
|
| 99 |
+ { -16255, -8096 },
|
|
| 100 |
+ { -16320, -8144 },
|
|
| 101 |
+ { -16352, -8168 }
|
|
| 103 | 102 |
}; |
| 104 | 103 |
|
| 105 | 104 |
static const int16_t vq_hebap1[4][6] = {
|
| ... | ... |
@@ -29,7 +29,7 @@ extern const uint8_t ff_eac3_hebap_tab[64]; |
| 29 | 29 |
extern const uint8_t ff_eac3_bits_vs_hebap[20]; |
| 30 | 30 |
extern const int16_t ff_eac3_gaq_remap_1[12]; |
| 31 | 31 |
extern const int16_t ff_eac3_gaq_remap_2_4_a[9][2]; |
| 32 |
-extern const int8_t ff_eac3_gaq_remap_2_4_b[9][2]; |
|
| 32 |
+extern const int16_t ff_eac3_gaq_remap_2_4_b[9][2]; |
|
| 33 | 33 |
|
| 34 | 34 |
extern const int16_t (* const ff_eac3_mantissa_vq[8])[6]; |
| 35 | 35 |
extern const uint8_t ff_eac3_frm_expstr[32][6]; |
| ... | ... |
@@ -178,19 +178,21 @@ void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch) |
| 178 | 178 |
if (mant == -(1 << (gbits-1))) {
|
| 179 | 179 |
/* large mantissa */ |
| 180 | 180 |
int b; |
| 181 |
- mant = get_sbits(gbc, bits-2+log_gain) << (26-log_gain-bits); |
|
| 181 |
+ int mbits = bits - (2 - log_gain); |
|
| 182 |
+ mant = get_sbits(gbc, mbits); |
|
| 183 |
+ mant <<= (23 - (mbits - 1)); |
|
| 182 | 184 |
/* remap mantissa value to correct for asymmetric quantization */ |
| 183 | 185 |
if (mant >= 0) |
| 184 |
- b = 32768 >> (log_gain+8); |
|
| 186 |
+ b = 1 << (23 - (mbits - 1)); |
|
| 185 | 187 |
else |
| 186 |
- b = ff_eac3_gaq_remap_2_4_b[hebap-8][log_gain-1]; |
|
| 187 |
- mant += (ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] * (mant>>8) + b) >> 7; |
|
| 188 |
+ b = ff_eac3_gaq_remap_2_4_b[hebap-8][log_gain-1] << 8; |
|
| 189 |
+ mant += (((ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] << 8) * (int64_t)mant) >> 23) + b; |
|
| 188 | 190 |
} else {
|
| 189 | 191 |
/* small mantissa, no GAQ, or Gk=1 */ |
| 190 | 192 |
mant <<= 24 - bits; |
| 191 | 193 |
if (!log_gain) {
|
| 192 | 194 |
/* remap mantissa value for no GAQ or Gk=1 */ |
| 193 |
- mant += (ff_eac3_gaq_remap_1[hebap-8] * (mant>>8)) >> 7; |
|
| 195 |
+ mant += ((ff_eac3_gaq_remap_1[hebap-8] << 8) * (int64_t)mant) >> 23; |
|
| 194 | 196 |
} |
| 195 | 197 |
} |
| 196 | 198 |
s->pre_mantissa[ch][bin][blk] = mant; |