@ -1022,47 +1022,6 @@ static int cbr_bit_allocation(AC3EncodeContext *s)
}
/**
* Downgrade exponent strategies to reduce the bits used by the exponents .
* This is a fallback for when bit allocation fails with the normal exponent
* strategies . Each time this function is run it only downgrades the
* strategy in 1 channel of 1 block .
* @ return non - zero if downgrade was unsuccessful
*/
static int downgrade_exponents ( AC3EncodeContext * s )
{
int ch , blk ;
for ( blk = AC3_MAX_BLOCKS - 1 ; blk > = 0 ; blk - - ) {
for ( ch = ! s - > blocks [ blk ] . cpl_in_use ; ch < = s - > fbw_channels ; ch + + ) {
if ( s - > exp_strategy [ ch ] [ blk ] = = EXP_D15 ) {
s - > exp_strategy [ ch ] [ blk ] = EXP_D25 ;
return 0 ;
}
}
}
for ( blk = AC3_MAX_BLOCKS - 1 ; blk > = 0 ; blk - - ) {
for ( ch = ! s - > blocks [ blk ] . cpl_in_use ; ch < = s - > fbw_channels ; ch + + ) {
if ( s - > exp_strategy [ ch ] [ blk ] = = EXP_D25 ) {
s - > exp_strategy [ ch ] [ blk ] = EXP_D45 ;
return 0 ;
}
}
}
/* block 0 cannot reuse exponents, so only downgrade D45 to REUSE if
the block number > 0 */
for ( blk = AC3_MAX_BLOCKS - 1 ; blk > 0 ; blk - - ) {
for ( ch = ! s - > blocks [ blk ] . cpl_in_use ; ch < = s - > fbw_channels ; ch + + ) {
if ( s - > exp_strategy [ ch ] [ blk ] > EXP_REUSE ) {
s - > exp_strategy [ ch ] [ blk ] = EXP_REUSE ;
return 0 ;
}
}
}
return - 1 ;
}
/**
* Perform bit allocation search .
* Finds the SNR offset value that maximizes quality and fits in the specified
@ -1071,39 +1030,11 @@ static int downgrade_exponents(AC3EncodeContext *s)
*/
static int compute_bit_allocation ( AC3EncodeContext * s )
{
int ret ;
count_frame_bits ( s ) ;
bit_alloc_masking ( s ) ;
ret = cbr_bit_allocation ( s ) ;
while ( ret ) {
/* fallback 1: disable channel coupling */
if ( s - > cpl_on ) {
s - > cpl_on = 0 ;
compute_coupling_strategy ( s ) ;
s - > compute_rematrixing_strategy ( s ) ;
apply_rematrixing ( s ) ;
process_exponents ( s ) ;
ret = compute_bit_allocation ( s ) ;
continue ;
}
/* fallback 2: downgrade exponents */
if ( ! downgrade_exponents ( s ) ) {
extract_exponents ( s ) ;
encode_exponents ( s ) ;
group_exponents ( s ) ;
ret = compute_bit_allocation ( s ) ;
continue ;
}
/* fallbacks were not enough... */
break ;
}
return ret ;
return cbr_bit_allocation ( s ) ;
}