diff ac3dec.c @ 8133:043e1096c83d libavcodec

simplify decoding of coupling frequency range
author jbr
date Thu, 13 Nov 2008 03:17:56 +0000
parents 4cd689b64c36
children 10541875e559
line wrap: on
line diff
--- a/ac3dec.c	Thu Nov 13 03:17:50 2008 +0000
+++ b/ac3dec.c	Thu Nov 13 03:17:56 2008 +0000
@@ -802,16 +802,18 @@
             /* coupling frequency range */
             /* TODO: modify coupling end freq if spectral extension is used */
             cpl_start_subband = get_bits(gbc, 4);
-            cpl_end_subband = get_bits(gbc, 4);
-            if (3 + cpl_end_subband - cpl_start_subband < 0) {
-                av_log(s->avctx, AV_LOG_ERROR, "3+cplendf = %d < cplbegf = %d\n", 3+cpl_end_subband, cpl_start_subband);
+            cpl_end_subband   = get_bits(gbc, 4) + 3;
+            s->num_cpl_subbands = cpl_end_subband - cpl_start_subband;
+            if (s->num_cpl_subbands < 0) {
+                av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d > %d)\n",
+                       cpl_start_subband, cpl_end_subband);
                 return -1;
             }
-            s->num_cpl_bands = s->num_cpl_subbands = 3 + cpl_end_subband - cpl_start_subband;
             s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
-            s->end_freq[CPL_CH] = cpl_end_subband * 12 + 73;
+            s->end_freq[CPL_CH]   = cpl_end_subband   * 12 + 37;
 
             /* coupling band structure */
+            s->num_cpl_bands = s->num_cpl_subbands;
             if (!s->eac3 || get_bits1(gbc)) {
                 for (bnd = 0; bnd < s->num_cpl_subbands - 1; bnd++) {
                     s->cpl_band_struct[bnd] = get_bits1(gbc);