|
|
|
@ -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)); |
|
|
|
|