@ -724,32 +724,34 @@ static void ac3_upmix_delay(AC3DecodeContext *s)
* @ param [ in ] start_subband subband number for start of range
* @ param [ in ] start_subband subband number for start of range
* @ param [ in ] end_subband subband number for end of range
* @ param [ in ] end_subband subband number for end of range
* @ param [ in ] default_band_struct default band structure table
* @ 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 ] num_bands number of bands ( optionally NULL )
* @ param [ out ] band_sizes array containing the number of bins in each band ( 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 ,
static void decode_band_structure ( GetBitContext * gbc , int blk , int eac3 ,
int ecpl , int start_subband , int end_subband ,
int ecpl , int start_subband , int end_subband ,
const uint8_t * default_band_struct ,
const uint8_t * default_band_struct ,
uint8_t * band_struct , int * num_bands ,
int * num_bands ,
uint8_t * band_sizes )
uint8_t * band_sizes )
{
{
int subbnd , bnd , n_subbands , n_bands = 0 ;
int subbnd , bnd , n_subbands , n_bands = 0 ;
uint8_t bnd_sz [ 22 ] ;
uint8_t bnd_sz [ 22 ] ;
uint8_t coded_band_struct [ 22 ] ;
const uint8_t * band_struct ;
n_subbands = end_subband - start_subband ;
n_subbands = end_subband - start_subband ;
/* decode band structure from bitstream or use default */
/* decode band structure from bitstream or use default */
if ( ! eac3 | | get_bits1 ( gbc ) ) {
if ( ! eac3 | | get_bits1 ( gbc ) ) {
for ( subbnd = 0 ; subbnd < n_subbands - 1 ; subbnd + + ) {
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 ) {
} else if ( ! blk ) {
memcpy ( band_struct ,
band_struct = & default_band_struct [ start_subband + 1 ] ;
& default_band_struct [ start_subband + 1 ] ,
} else {
n_subbands - 1 ) ;
/* no change in band structure */
return ;
}
}
band_struct [ n_subbands - 1 ] = 0 ;
/* calculate number of bands and band sizes based on band structure.
/* calculate number of bands and band sizes based on band structure.
note that the first 4 subbands in enhanced coupling span only 6 bins
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 ,
decode_band_structure ( gbc , blk , s - > eac3 , 0 , cpl_start_subband ,
cpl_end_subband ,
cpl_end_subband ,
ff_eac3_default_cpl_band_struct ,
ff_eac3_default_cpl_band_struct ,
s - > cpl_band_struct , & s - > num_cpl_bands ,
& s - > num_cpl_bands ,
s - > cpl_band_sizes ) ;
s - > cpl_band_sizes ) ;
} else {
} else {
/* coupling not in use */
/* coupling not in use */