]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
simplify code and comment regarding determination whether or not AHT is used.
authorjbr <jbr@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sun, 31 Aug 2008 03:01:56 +0000 (03:01 +0000)
committerjbr <jbr@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sun, 31 Aug 2008 03:01:56 +0000 (03:01 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@15101 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/eac3dec.c

index 7f43e6307f636bd15d0a7c35962e32138a69c2ec..0b10b41848a1256a9880f83b1b3e8b28143f46ee 100644 (file)
@@ -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));