From 3f9371680990e1eb8d9b76dde4d5fea82e4cd2ab Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Wed, 5 Aug 2009 01:13:42 +0000 Subject: [PATCH] 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. Originally committed as revision 19585 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/ac3dec.c | 18 ++++++++++-------- libavcodec/ac3dec.h | 1 - 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index 808274adc5..7f7efe56ba 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -724,32 +724,34 @@ static void ac3_upmix_delay(AC3DecodeContext *s) * @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 @@ static int decode_audio_block(AC3DecodeContext *s, int blk) 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 --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h index b5367b2fa4..8b42f986d7 100644 --- a/libavcodec/ac3dec.h +++ b/libavcodec/ac3dec.h @@ -82,7 +82,6 @@ typedef struct { 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)