changeset 10022:e60ed9255bf4 libavcodec

Modify decode_band_structure() so that the actual band structure is only used within the function. This removes the need to have the coupling band structure stored in the AC3DecodeContext.
author jbr
date Wed, 05 Aug 2009 01:13:42 +0000
parents f6c433eacc5a
children be3245d0147c
files ac3dec.c ac3dec.h
diffstat 2 files changed, 10 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/ac3dec.c	Wed Aug 05 01:00:41 2009 +0000
+++ b/ac3dec.c	Wed Aug 05 01:13:42 2009 +0000
@@ -724,32 +724,34 @@
  * @param[in] start_subband subband number for start of range
  * @param[in] end_subband subband number for end of range
  * @param[in] default_band_struct default band structure table
- * @param[out] band_struct decoded band structure
  * @param[out] num_bands number of bands (optionally NULL)
  * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
  */
 static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
                                   int ecpl, int start_subband, int end_subband,
                                   const uint8_t *default_band_struct,
-                                  uint8_t *band_struct, int *num_bands,
+                                  int *num_bands,
                                   uint8_t *band_sizes)
 {
     int subbnd, bnd, n_subbands, n_bands=0;
     uint8_t bnd_sz[22];
+    uint8_t coded_band_struct[22];
+    const uint8_t *band_struct;
 
     n_subbands = end_subband - start_subband;
 
     /* decode band structure from bitstream or use default */
     if (!eac3 || get_bits1(gbc)) {
         for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
-            band_struct[subbnd] = get_bits1(gbc);
+            coded_band_struct[subbnd] = get_bits1(gbc);
         }
+        band_struct = coded_band_struct;
     } else if (!blk) {
-        memcpy(band_struct,
-               &default_band_struct[start_subband+1],
-               n_subbands-1);
+        band_struct = &default_band_struct[start_subband+1];
+    } else {
+        /* no change in band structure */
+        return;
     }
-    band_struct[n_subbands-1] = 0;
 
     /* calculate number of bands and band sizes based on band structure.
        note that the first 4 subbands in enhanced coupling span only 6 bins
@@ -879,7 +881,7 @@
             decode_band_structure(gbc, blk, s->eac3, 0, cpl_start_subband,
                                   cpl_end_subband,
                                   ff_eac3_default_cpl_band_struct,
-                                  s->cpl_band_struct, &s->num_cpl_bands,
+                                  &s->num_cpl_bands,
                                   s->cpl_band_sizes);
         } else {
             /* coupling not in use */
--- a/ac3dec.h	Wed Aug 05 01:00:41 2009 +0000
+++ b/ac3dec.h	Wed Aug 05 01:13:42 2009 +0000
@@ -82,7 +82,6 @@
     int phase_flags_in_use;                 ///< phase flags in use                     (phsflginu)
     int phase_flags[18];                    ///< phase flags                            (phsflg)
     int num_cpl_bands;                      ///< number of coupling bands               (ncplbnd)
-    uint8_t cpl_band_struct[18];            ///< coupling band structure                (cplbndstrc)
     uint8_t cpl_band_sizes[18];             ///< number of coeffs in each coupling band
     int firstchincpl;                       ///< first channel in coupling
     int first_cpl_coords[AC3_MAX_CHANNELS]; ///< first coupling coordinates states      (firstcplcos)