| Index: third_party/opus/src/silk/control_codec.c
|
| diff --git a/third_party/opus/src/silk/control_codec.c b/third_party/opus/src/silk/control_codec.c
|
| index 044eea3f2a84e0aa443f05cfc5af2f5c5e454cad..9350fd4b2b4cc9b58891d83b7b7b774f274b181f 100644
|
| --- a/third_party/opus/src/silk/control_codec.c
|
| +++ b/third_party/opus/src/silk/control_codec.c
|
| @@ -57,7 +57,7 @@ static opus_int silk_setup_complexity(
|
|
|
| static OPUS_INLINE opus_int silk_setup_LBRR(
|
| silk_encoder_state *psEncC, /* I/O */
|
| - const opus_int32 TargetRate_bps /* I */
|
| + const silk_EncControlStruct *encControl /* I */
|
| );
|
|
|
|
|
| @@ -65,7 +65,6 @@ static OPUS_INLINE opus_int silk_setup_LBRR(
|
| opus_int silk_control_encoder(
|
| silk_encoder_state_Fxx *psEnc, /* I/O Pointer to Silk encoder state */
|
| silk_EncControlStruct *encControl, /* I Control structure */
|
| - const opus_int32 TargetRate_bps, /* I Target max bitrate (bps) */
|
| const opus_int allow_bw_switch, /* I Flag to allow switching audio bandwidth */
|
| const opus_int channelNb, /* I Channel number */
|
| const opus_int force_fs_kHz
|
| @@ -125,7 +124,7 @@ opus_int silk_control_encoder(
|
| /********************************************/
|
| /* Set LBRR usage */
|
| /********************************************/
|
| - ret += silk_setup_LBRR( &psEnc->sCmn, TargetRate_bps );
|
| + ret += silk_setup_LBRR( &psEnc->sCmn, encControl );
|
|
|
| psEnc->sCmn.controlled_since_last_payload = 1;
|
|
|
| @@ -244,7 +243,6 @@ static opus_int silk_setup_fs(
|
| if( psEnc->sCmn.fs_kHz != fs_kHz ) {
|
| /* reset part of the state */
|
| silk_memset( &psEnc->sShape, 0, sizeof( psEnc->sShape ) );
|
| - silk_memset( &psEnc->sPrefilt, 0, sizeof( psEnc->sPrefilt ) );
|
| silk_memset( &psEnc->sCmn.sNSQ, 0, sizeof( psEnc->sCmn.sNSQ ) );
|
| silk_memset( psEnc->sCmn.prev_NLSFq_Q15, 0, sizeof( psEnc->sCmn.prev_NLSFq_Q15 ) );
|
| silk_memset( &psEnc->sCmn.sLP.In_LP_State, 0, sizeof( psEnc->sCmn.sLP.In_LP_State ) );
|
| @@ -255,7 +253,6 @@ static opus_int silk_setup_fs(
|
| /* Initialize non-zero parameters */
|
| psEnc->sCmn.prevLag = 100;
|
| psEnc->sCmn.first_frame_after_reset = 1;
|
| - psEnc->sPrefilt.lagPrev = 100;
|
| psEnc->sShape.LastGainIndex = 10;
|
| psEnc->sCmn.sNSQ.lagPrev = 100;
|
| psEnc->sCmn.sNSQ.prev_gain_Q16 = 65536;
|
| @@ -293,13 +290,10 @@ static opus_int silk_setup_fs(
|
| psEnc->sCmn.pitch_LPC_win_length = silk_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, fs_kHz );
|
| }
|
| if( psEnc->sCmn.fs_kHz == 16 ) {
|
| - psEnc->sCmn.mu_LTP_Q9 = SILK_FIX_CONST( MU_LTP_QUANT_WB, 9 );
|
| psEnc->sCmn.pitch_lag_low_bits_iCDF = silk_uniform8_iCDF;
|
| } else if( psEnc->sCmn.fs_kHz == 12 ) {
|
| - psEnc->sCmn.mu_LTP_Q9 = SILK_FIX_CONST( MU_LTP_QUANT_MB, 9 );
|
| psEnc->sCmn.pitch_lag_low_bits_iCDF = silk_uniform6_iCDF;
|
| } else {
|
| - psEnc->sCmn.mu_LTP_Q9 = SILK_FIX_CONST( MU_LTP_QUANT_NB, 9 );
|
| psEnc->sCmn.pitch_lag_low_bits_iCDF = silk_uniform4_iCDF;
|
| }
|
| }
|
| @@ -319,60 +313,75 @@ static opus_int silk_setup_complexity(
|
|
|
| /* Set encoding complexity */
|
| silk_assert( Complexity >= 0 && Complexity <= 10 );
|
| - if( Complexity < 2 ) {
|
| + if( Complexity < 1 ) {
|
| psEncC->pitchEstimationComplexity = SILK_PE_MIN_COMPLEX;
|
| psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.8, 16 );
|
| psEncC->pitchEstimationLPCOrder = 6;
|
| - psEncC->shapingLPCOrder = 8;
|
| + psEncC->shapingLPCOrder = 12;
|
| psEncC->la_shape = 3 * psEncC->fs_kHz;
|
| psEncC->nStatesDelayedDecision = 1;
|
| psEncC->useInterpolatedNLSFs = 0;
|
| - psEncC->LTPQuantLowComplexity = 1;
|
| psEncC->NLSF_MSVQ_Survivors = 2;
|
| psEncC->warping_Q16 = 0;
|
| - } else if( Complexity < 4 ) {
|
| + } else if( Complexity < 2 ) {
|
| psEncC->pitchEstimationComplexity = SILK_PE_MID_COMPLEX;
|
| psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.76, 16 );
|
| psEncC->pitchEstimationLPCOrder = 8;
|
| - psEncC->shapingLPCOrder = 10;
|
| + psEncC->shapingLPCOrder = 14;
|
| psEncC->la_shape = 5 * psEncC->fs_kHz;
|
| psEncC->nStatesDelayedDecision = 1;
|
| psEncC->useInterpolatedNLSFs = 0;
|
| - psEncC->LTPQuantLowComplexity = 0;
|
| + psEncC->NLSF_MSVQ_Survivors = 3;
|
| + psEncC->warping_Q16 = 0;
|
| + } else if( Complexity < 3 ) {
|
| + psEncC->pitchEstimationComplexity = SILK_PE_MIN_COMPLEX;
|
| + psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.8, 16 );
|
| + psEncC->pitchEstimationLPCOrder = 6;
|
| + psEncC->shapingLPCOrder = 12;
|
| + psEncC->la_shape = 3 * psEncC->fs_kHz;
|
| + psEncC->nStatesDelayedDecision = 2;
|
| + psEncC->useInterpolatedNLSFs = 0;
|
| + psEncC->NLSF_MSVQ_Survivors = 2;
|
| + psEncC->warping_Q16 = 0;
|
| + } else if( Complexity < 4 ) {
|
| + psEncC->pitchEstimationComplexity = SILK_PE_MID_COMPLEX;
|
| + psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.76, 16 );
|
| + psEncC->pitchEstimationLPCOrder = 8;
|
| + psEncC->shapingLPCOrder = 14;
|
| + psEncC->la_shape = 5 * psEncC->fs_kHz;
|
| + psEncC->nStatesDelayedDecision = 2;
|
| + psEncC->useInterpolatedNLSFs = 0;
|
| psEncC->NLSF_MSVQ_Survivors = 4;
|
| psEncC->warping_Q16 = 0;
|
| } else if( Complexity < 6 ) {
|
| psEncC->pitchEstimationComplexity = SILK_PE_MID_COMPLEX;
|
| psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.74, 16 );
|
| psEncC->pitchEstimationLPCOrder = 10;
|
| - psEncC->shapingLPCOrder = 12;
|
| + psEncC->shapingLPCOrder = 16;
|
| psEncC->la_shape = 5 * psEncC->fs_kHz;
|
| psEncC->nStatesDelayedDecision = 2;
|
| psEncC->useInterpolatedNLSFs = 1;
|
| - psEncC->LTPQuantLowComplexity = 0;
|
| - psEncC->NLSF_MSVQ_Survivors = 8;
|
| + psEncC->NLSF_MSVQ_Survivors = 6;
|
| psEncC->warping_Q16 = psEncC->fs_kHz * SILK_FIX_CONST( WARPING_MULTIPLIER, 16 );
|
| } else if( Complexity < 8 ) {
|
| psEncC->pitchEstimationComplexity = SILK_PE_MID_COMPLEX;
|
| psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.72, 16 );
|
| psEncC->pitchEstimationLPCOrder = 12;
|
| - psEncC->shapingLPCOrder = 14;
|
| + psEncC->shapingLPCOrder = 20;
|
| psEncC->la_shape = 5 * psEncC->fs_kHz;
|
| psEncC->nStatesDelayedDecision = 3;
|
| psEncC->useInterpolatedNLSFs = 1;
|
| - psEncC->LTPQuantLowComplexity = 0;
|
| - psEncC->NLSF_MSVQ_Survivors = 16;
|
| + psEncC->NLSF_MSVQ_Survivors = 8;
|
| psEncC->warping_Q16 = psEncC->fs_kHz * SILK_FIX_CONST( WARPING_MULTIPLIER, 16 );
|
| } else {
|
| psEncC->pitchEstimationComplexity = SILK_PE_MAX_COMPLEX;
|
| psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.7, 16 );
|
| psEncC->pitchEstimationLPCOrder = 16;
|
| - psEncC->shapingLPCOrder = 16;
|
| + psEncC->shapingLPCOrder = 24;
|
| psEncC->la_shape = 5 * psEncC->fs_kHz;
|
| psEncC->nStatesDelayedDecision = MAX_DEL_DEC_STATES;
|
| psEncC->useInterpolatedNLSFs = 1;
|
| - psEncC->LTPQuantLowComplexity = 0;
|
| - psEncC->NLSF_MSVQ_Survivors = 32;
|
| + psEncC->NLSF_MSVQ_Survivors = 16;
|
| psEncC->warping_Q16 = psEncC->fs_kHz * SILK_FIX_CONST( WARPING_MULTIPLIER, 16 );
|
| }
|
|
|
| @@ -387,40 +396,26 @@ static opus_int silk_setup_complexity(
|
| silk_assert( psEncC->warping_Q16 <= 32767 );
|
| silk_assert( psEncC->la_shape <= LA_SHAPE_MAX );
|
| silk_assert( psEncC->shapeWinLength <= SHAPE_LPC_WIN_MAX );
|
| - silk_assert( psEncC->NLSF_MSVQ_Survivors <= NLSF_VQ_MAX_SURVIVORS );
|
|
|
| return ret;
|
| }
|
|
|
| static OPUS_INLINE opus_int silk_setup_LBRR(
|
| silk_encoder_state *psEncC, /* I/O */
|
| - const opus_int32 TargetRate_bps /* I */
|
| + const silk_EncControlStruct *encControl /* I */
|
| )
|
| {
|
| opus_int LBRR_in_previous_packet, ret = SILK_NO_ERROR;
|
| - opus_int32 LBRR_rate_thres_bps;
|
|
|
| LBRR_in_previous_packet = psEncC->LBRR_enabled;
|
| - psEncC->LBRR_enabled = 0;
|
| - if( psEncC->useInBandFEC && psEncC->PacketLoss_perc > 0 ) {
|
| - if( psEncC->fs_kHz == 8 ) {
|
| - LBRR_rate_thres_bps = LBRR_NB_MIN_RATE_BPS;
|
| - } else if( psEncC->fs_kHz == 12 ) {
|
| - LBRR_rate_thres_bps = LBRR_MB_MIN_RATE_BPS;
|
| + psEncC->LBRR_enabled = encControl->LBRR_coded;
|
| + if( psEncC->LBRR_enabled ) {
|
| + /* Set gain increase for coding LBRR excitation */
|
| + if( LBRR_in_previous_packet == 0 ) {
|
| + /* Previous packet did not have LBRR, and was therefore coded at a higher bitrate */
|
| + psEncC->LBRR_GainIncreases = 7;
|
| } else {
|
| - LBRR_rate_thres_bps = LBRR_WB_MIN_RATE_BPS;
|
| - }
|
| - LBRR_rate_thres_bps = silk_SMULWB( silk_MUL( LBRR_rate_thres_bps, 125 - silk_min( psEncC->PacketLoss_perc, 25 ) ), SILK_FIX_CONST( 0.01, 16 ) );
|
| -
|
| - if( TargetRate_bps > LBRR_rate_thres_bps ) {
|
| - /* Set gain increase for coding LBRR excitation */
|
| - if( LBRR_in_previous_packet == 0 ) {
|
| - /* Previous packet did not have LBRR, and was therefore coded at a higher bitrate */
|
| - psEncC->LBRR_GainIncreases = 7;
|
| - } else {
|
| - psEncC->LBRR_GainIncreases = silk_max_int( 7 - silk_SMULWB( (opus_int32)psEncC->PacketLoss_perc, SILK_FIX_CONST( 0.4, 16 ) ), 2 );
|
| - }
|
| - psEncC->LBRR_enabled = 1;
|
| + psEncC->LBRR_GainIncreases = silk_max_int( 7 - silk_SMULWB( (opus_int32)psEncC->PacketLoss_perc, SILK_FIX_CONST( 0.4, 16 ) ), 2 );
|
| }
|
| }
|
|
|
|
|