X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Feac3dec.c;h=0b10b41848a1256a9880f83b1b3e8b28143f46ee;hb=ede725104b57c6bf0fa6b20f18d1035ea091e1cc;hp=836cb8ef0524b748121d4562826bf2eef242ecd1;hpb=1ffbafa02b3cbc00e24a92cba8cd3a66ba02ec50;p=ffmpeg diff --git a/libavcodec/eac3dec.c b/libavcodec/eac3dec.c index 836cb8ef052..0b10b41848a 100644 --- a/libavcodec/eac3dec.c +++ b/libavcodec/eac3dec.c @@ -131,7 +131,7 @@ void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch) /* Vector Quantization */ int v = get_bits(gbc, bits); for (blk = 0; blk < 6; blk++) { - s->pre_mantissa[ch][bin][blk] = ff_eac3_vq_hebap[hebap][v][blk] << 8; + s->pre_mantissa[ch][bin][blk] = ff_eac3_mantissa_vq[hebap][v][blk] << 8; } } else { /* Gain Adaptive Quantization */ @@ -420,21 +420,21 @@ int ff_eac3_parse_header(AC3DecodeContext *s) /* determine which channels use AHT */ if (parse_aht_info) { - /* AHT is only available when there are 6 blocks in the frame. - The coupling channel can only use AHT when coupling is in use for - all blocks. - reference: Section E3.3.2 Bit Stream Helper Variables */ + /* For AHT to be used, all non-zero blocks must reuse exponents from + the first block. Furthermore, for AHT to be used in the coupling + channel, all blocks must use coupling and use the same coupling + strategy. */ s->channel_uses_aht[CPL_CH]=0; for (ch = (num_cpl_blocks != 6); ch <= s->channels; ch++) { - int nchregs = 0; - for (blk = 0; blk < 6; blk++) { - if (ch) - nchregs += (s->exp_strategy[blk][ch] != EXP_REUSE); - else - nchregs += s->cpl_strategy_exists[blk] || - (s->exp_strategy[blk][CPL_CH] != EXP_REUSE); + int use_aht = 1; + for (blk = 1; blk < 6; blk++) { + if ((s->exp_strategy[blk][ch] != EXP_REUSE) || + (!ch && s->cpl_strategy_exists[blk])) { + use_aht = 0; + break; + } } - s->channel_uses_aht[ch] = (nchregs == 1) && get_bits1(gbc); + s->channel_uses_aht[ch] = use_aht && get_bits1(gbc); } } else { memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));