diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2009-08-05 01:00:41 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2009-08-05 01:00:41 +0000 |
commit | 603139022d32be9a168ecf57f6577cf06daeb0bf (patch) | |
tree | d1a4c3b6f3aa5ddb4f91b026cf105b4c40a6d85d /libavcodec | |
parent | faccfeec0edd16645f1a86725a252868b7af8539 (diff) | |
download | ffmpeg-603139022d32be9a168ecf57f6577cf06daeb0bf.tar.gz |
Use coupling band sizes instead of coupling band structure when
calculating coupling transform coefficients.
Originally committed as revision 19584 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/ac3dec.c | 14 | ||||
-rw-r--r-- | libavcodec/ac3dec.h | 1 |
2 files changed, 6 insertions, 9 deletions
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index baff415900..808274adc5 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -412,14 +412,11 @@ static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps, */ static void calc_transform_coeffs_cpl(AC3DecodeContext *s) { - int i, j, ch, bnd, subbnd; + int i, j, ch, bnd; - subbnd = -1; i = s->start_freq[CPL_CH]; for(bnd=0; bnd<s->num_cpl_bands; bnd++) { - do { - subbnd++; - for(j=0; j<12; j++) { + for (j = 0; j < s->cpl_band_sizes[bnd]; j++,i++) { for(ch=1; ch<=s->fbw_channels; ch++) { if(s->channel_in_cpl[ch]) { s->fixed_coeffs[ch][i] = ((int64_t)s->fixed_coeffs[CPL_CH][i] * (int64_t)s->cpl_coords[ch][bnd]) >> 23; @@ -427,9 +424,7 @@ static void calc_transform_coeffs_cpl(AC3DecodeContext *s) s->fixed_coeffs[ch][i] = -s->fixed_coeffs[ch][i]; } } - i++; - } - } while(s->cpl_band_struct[subbnd]); + } } } @@ -884,7 +879,8 @@ 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, NULL); + s->cpl_band_struct, &s->num_cpl_bands, + s->cpl_band_sizes); } else { /* coupling not in use */ for (ch = 1; ch <= fbw_channels; ch++) { diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h index 38c2deb565..b5367b2fa4 100644 --- a/libavcodec/ac3dec.h +++ b/libavcodec/ac3dec.h @@ -83,6 +83,7 @@ typedef struct { 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) int cpl_coords[AC3_MAX_CHANNELS][18]; ///< coupling coordinates (cplco) |