# HG changeset patch # User jbr # Date 1249434822 0 # Node ID e60ed9255bf44e90651049f063e02480f8dd4db5 # Parent f6c433eacc5a2b2c467de54ab6639200a829a54a 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. diff -r f6c433eacc5a -r e60ed9255bf4 ac3dec.c --- 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 */ diff -r f6c433eacc5a -r e60ed9255bf4 ac3dec.h --- 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)