| Index: third_party/opus/src/silk/fixed/noise_shape_analysis_FIX.c
|
| diff --git a/third_party/opus/src/silk/fixed/noise_shape_analysis_FIX.c b/third_party/opus/src/silk/fixed/noise_shape_analysis_FIX.c
|
| index 22a89f75aec0fc8d624409df861cbb6c2ca38595..85fea0bf09600594628001d7410712c4ee8c2612 100644
|
| --- a/third_party/opus/src/silk/fixed/noise_shape_analysis_FIX.c
|
| +++ b/third_party/opus/src/silk/fixed/noise_shape_analysis_FIX.c
|
| @@ -57,88 +57,79 @@ static OPUS_INLINE opus_int32 warped_gain( /* gain in Q16*/
|
| /* Convert warped filter coefficients to monic pseudo-warped coefficients and limit maximum */
|
| /* amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */
|
| static OPUS_INLINE void limit_warped_coefs(
|
| - opus_int32 *coefs_syn_Q24,
|
| - opus_int32 *coefs_ana_Q24,
|
| + opus_int32 *coefs_Q24,
|
| opus_int lambda_Q16,
|
| opus_int32 limit_Q24,
|
| opus_int order
|
| ) {
|
| opus_int i, iter, ind = 0;
|
| - opus_int32 tmp, maxabs_Q24, chirp_Q16, gain_syn_Q16, gain_ana_Q16;
|
| + opus_int32 tmp, maxabs_Q24, chirp_Q16, gain_Q16;
|
| opus_int32 nom_Q16, den_Q24;
|
| + opus_int32 limit_Q20, maxabs_Q20;
|
|
|
| /* Convert to monic coefficients */
|
| lambda_Q16 = -lambda_Q16;
|
| for( i = order - 1; i > 0; i-- ) {
|
| - coefs_syn_Q24[ i - 1 ] = silk_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 );
|
| - coefs_ana_Q24[ i - 1 ] = silk_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 );
|
| + coefs_Q24[ i - 1 ] = silk_SMLAWB( coefs_Q24[ i - 1 ], coefs_Q24[ i ], lambda_Q16 );
|
| }
|
| lambda_Q16 = -lambda_Q16;
|
| - nom_Q16 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 16 ), -(opus_int32)lambda_Q16, lambda_Q16 );
|
| - den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_syn_Q24[ 0 ], lambda_Q16 );
|
| - gain_syn_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
|
| - den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_ana_Q24[ 0 ], lambda_Q16 );
|
| - gain_ana_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
|
| + nom_Q16 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 16 ), -(opus_int32)lambda_Q16, lambda_Q16 );
|
| + den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_Q24[ 0 ], lambda_Q16 );
|
| + gain_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
|
| for( i = 0; i < order; i++ ) {
|
| - coefs_syn_Q24[ i ] = silk_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] );
|
| - coefs_ana_Q24[ i ] = silk_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] );
|
| + coefs_Q24[ i ] = silk_SMULWW( gain_Q16, coefs_Q24[ i ] );
|
| }
|
| -
|
| + limit_Q20 = silk_RSHIFT(limit_Q24, 4);
|
| for( iter = 0; iter < 10; iter++ ) {
|
| /* Find maximum absolute value */
|
| maxabs_Q24 = -1;
|
| for( i = 0; i < order; i++ ) {
|
| - tmp = silk_max( silk_abs_int32( coefs_syn_Q24[ i ] ), silk_abs_int32( coefs_ana_Q24[ i ] ) );
|
| + tmp = silk_abs_int32( coefs_Q24[ i ] );
|
| if( tmp > maxabs_Q24 ) {
|
| maxabs_Q24 = tmp;
|
| ind = i;
|
| }
|
| }
|
| - if( maxabs_Q24 <= limit_Q24 ) {
|
| + /* Use Q20 to avoid any overflow when multiplying by (ind + 1) later. */
|
| + maxabs_Q20 = silk_RSHIFT(maxabs_Q24, 4);
|
| + if( maxabs_Q20 <= limit_Q20 ) {
|
| /* Coefficients are within range - done */
|
| return;
|
| }
|
|
|
| /* Convert back to true warped coefficients */
|
| for( i = 1; i < order; i++ ) {
|
| - coefs_syn_Q24[ i - 1 ] = silk_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 );
|
| - coefs_ana_Q24[ i - 1 ] = silk_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 );
|
| + coefs_Q24[ i - 1 ] = silk_SMLAWB( coefs_Q24[ i - 1 ], coefs_Q24[ i ], lambda_Q16 );
|
| }
|
| - gain_syn_Q16 = silk_INVERSE32_varQ( gain_syn_Q16, 32 );
|
| - gain_ana_Q16 = silk_INVERSE32_varQ( gain_ana_Q16, 32 );
|
| + gain_Q16 = silk_INVERSE32_varQ( gain_Q16, 32 );
|
| for( i = 0; i < order; i++ ) {
|
| - coefs_syn_Q24[ i ] = silk_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] );
|
| - coefs_ana_Q24[ i ] = silk_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] );
|
| + coefs_Q24[ i ] = silk_SMULWW( gain_Q16, coefs_Q24[ i ] );
|
| }
|
|
|
| /* Apply bandwidth expansion */
|
| chirp_Q16 = SILK_FIX_CONST( 0.99, 16 ) - silk_DIV32_varQ(
|
| - silk_SMULWB( maxabs_Q24 - limit_Q24, silk_SMLABB( SILK_FIX_CONST( 0.8, 10 ), SILK_FIX_CONST( 0.1, 10 ), iter ) ),
|
| - silk_MUL( maxabs_Q24, ind + 1 ), 22 );
|
| - silk_bwexpander_32( coefs_syn_Q24, order, chirp_Q16 );
|
| - silk_bwexpander_32( coefs_ana_Q24, order, chirp_Q16 );
|
| + silk_SMULWB( maxabs_Q20 - limit_Q20, silk_SMLABB( SILK_FIX_CONST( 0.8, 10 ), SILK_FIX_CONST( 0.1, 10 ), iter ) ),
|
| + silk_MUL( maxabs_Q20, ind + 1 ), 22 );
|
| + silk_bwexpander_32( coefs_Q24, order, chirp_Q16 );
|
|
|
| /* Convert to monic warped coefficients */
|
| lambda_Q16 = -lambda_Q16;
|
| for( i = order - 1; i > 0; i-- ) {
|
| - coefs_syn_Q24[ i - 1 ] = silk_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 );
|
| - coefs_ana_Q24[ i - 1 ] = silk_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 );
|
| + coefs_Q24[ i - 1 ] = silk_SMLAWB( coefs_Q24[ i - 1 ], coefs_Q24[ i ], lambda_Q16 );
|
| }
|
| lambda_Q16 = -lambda_Q16;
|
| nom_Q16 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 16 ), -(opus_int32)lambda_Q16, lambda_Q16 );
|
| - den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_syn_Q24[ 0 ], lambda_Q16 );
|
| - gain_syn_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
|
| - den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_ana_Q24[ 0 ], lambda_Q16 );
|
| - gain_ana_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
|
| + den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_Q24[ 0 ], lambda_Q16 );
|
| + gain_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
|
| for( i = 0; i < order; i++ ) {
|
| - coefs_syn_Q24[ i ] = silk_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] );
|
| - coefs_ana_Q24[ i ] = silk_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] );
|
| + coefs_Q24[ i ] = silk_SMULWW( gain_Q16, coefs_Q24[ i ] );
|
| }
|
| }
|
| silk_assert( 0 );
|
| }
|
|
|
| -#if defined(MIPSr1_ASM)
|
| +/* Disable MIPS version until it's updated. */
|
| +#if 0 && defined(MIPSr1_ASM)
|
| #include "mips/noise_shape_analysis_FIX_mipsr1.h"
|
| #endif
|
|
|
| @@ -155,14 +146,13 @@ void silk_noise_shape_analysis_FIX(
|
| )
|
| {
|
| silk_shape_state_FIX *psShapeSt = &psEnc->sShape;
|
| - opus_int k, i, nSamples, Qnrg, b_Q14, warping_Q16, scale = 0;
|
| - opus_int32 SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp32;
|
| - opus_int32 nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_variation_Q7;
|
| - opus_int32 delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16, strength_Q16, b_Q8;
|
| + opus_int k, i, nSamples, nSegs, Qnrg, b_Q14, warping_Q16, scale = 0;
|
| + opus_int32 SNR_adj_dB_Q7, HarmShapeGain_Q16, Tilt_Q16, tmp32;
|
| + opus_int32 nrg, log_energy_Q7, log_energy_prev_Q7, energy_variation_Q7;
|
| + opus_int32 BWExp_Q16, gain_mult_Q16, gain_add_Q16, strength_Q16, b_Q8;
|
| opus_int32 auto_corr[ MAX_SHAPE_LPC_ORDER + 1 ];
|
| opus_int32 refl_coef_Q16[ MAX_SHAPE_LPC_ORDER ];
|
| - opus_int32 AR1_Q24[ MAX_SHAPE_LPC_ORDER ];
|
| - opus_int32 AR2_Q24[ MAX_SHAPE_LPC_ORDER ];
|
| + opus_int32 AR_Q24[ MAX_SHAPE_LPC_ORDER ];
|
| VARDECL( opus_int16, x_windowed );
|
| const opus_int16 *x_ptr, *pitch_res_ptr;
|
| SAVE_STACK;
|
| @@ -209,14 +199,14 @@ void silk_noise_shape_analysis_FIX(
|
| if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
|
| /* Initially set to 0; may be overruled in process_gains(..) */
|
| psEnc->sCmn.indices.quantOffsetType = 0;
|
| - psEncCtrl->sparseness_Q8 = 0;
|
| } else {
|
| /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */
|
| nSamples = silk_LSHIFT( psEnc->sCmn.fs_kHz, 1 );
|
| energy_variation_Q7 = 0;
|
| log_energy_prev_Q7 = 0;
|
| pitch_res_ptr = pitch_res;
|
| - for( k = 0; k < silk_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) / 2; k++ ) {
|
| + nSegs = silk_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) / 2;
|
| + for( k = 0; k < nSegs; k++ ) {
|
| silk_sum_sqr_shift( &nrg, &scale, pitch_res_ptr, nSamples );
|
| nrg += silk_RSHIFT( nSamples, scale ); /* Q(-scale)*/
|
|
|
| @@ -228,18 +218,12 @@ void silk_noise_shape_analysis_FIX(
|
| pitch_res_ptr += nSamples;
|
| }
|
|
|
| - psEncCtrl->sparseness_Q8 = silk_RSHIFT( silk_sigm_Q15( silk_SMULWB( energy_variation_Q7 -
|
| - SILK_FIX_CONST( 5.0, 7 ), SILK_FIX_CONST( 0.1, 16 ) ) ), 7 );
|
| -
|
| /* Set quantization offset depending on sparseness measure */
|
| - if( psEncCtrl->sparseness_Q8 > SILK_FIX_CONST( SPARSENESS_THRESHOLD_QNT_OFFSET, 8 ) ) {
|
| + if( energy_variation_Q7 > SILK_FIX_CONST( ENERGY_VARIATION_THRESHOLD_QNT_OFFSET, 7 ) * (nSegs-1) ) {
|
| psEnc->sCmn.indices.quantOffsetType = 0;
|
| } else {
|
| psEnc->sCmn.indices.quantOffsetType = 1;
|
| }
|
| -
|
| - /* Increase coding SNR for sparse signals */
|
| - SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7, SILK_FIX_CONST( SPARSE_SNR_INCR_dB, 15 ), psEncCtrl->sparseness_Q8 - SILK_FIX_CONST( 0.5, 8 ) );
|
| }
|
|
|
| /*******************************/
|
| @@ -247,14 +231,8 @@ void silk_noise_shape_analysis_FIX(
|
| /*******************************/
|
| /* More BWE for signals with high prediction gain */
|
| strength_Q16 = silk_SMULWB( psEncCtrl->predGain_Q16, SILK_FIX_CONST( FIND_PITCH_WHITE_NOISE_FRACTION, 16 ) );
|
| - BWExp1_Q16 = BWExp2_Q16 = silk_DIV32_varQ( SILK_FIX_CONST( BANDWIDTH_EXPANSION, 16 ),
|
| + BWExp_Q16 = silk_DIV32_varQ( SILK_FIX_CONST( BANDWIDTH_EXPANSION, 16 ),
|
| silk_SMLAWW( SILK_FIX_CONST( 1.0, 16 ), strength_Q16, strength_Q16 ), 16 );
|
| - delta_Q16 = silk_SMULWB( SILK_FIX_CONST( 1.0, 16 ) - silk_SMULBB( 3, psEncCtrl->coding_quality_Q14 ),
|
| - SILK_FIX_CONST( LOW_RATE_BANDWIDTH_EXPANSION_DELTA, 16 ) );
|
| - BWExp1_Q16 = silk_SUB32( BWExp1_Q16, delta_Q16 );
|
| - BWExp2_Q16 = silk_ADD32( BWExp2_Q16, delta_Q16 );
|
| - /* BWExp1 will be applied after BWExp2, so make it relative */
|
| - BWExp1_Q16 = silk_DIV32_16( silk_LSHIFT( BWExp1_Q16, 14 ), silk_RSHIFT( BWExp2_Q16, 2 ) );
|
|
|
| if( psEnc->sCmn.warping_Q16 > 0 ) {
|
| /* Slightly more warping in analysis will move quantization noise up in frequency, where it's better masked */
|
| @@ -284,7 +262,7 @@ void silk_noise_shape_analysis_FIX(
|
|
|
| if( psEnc->sCmn.warping_Q16 > 0 ) {
|
| /* Calculate warped auto correlation */
|
| - silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, warping_Q16, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder );
|
| + silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, warping_Q16, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder, arch );
|
| } else {
|
| /* Calculate regular auto correlation */
|
| silk_autocorr( auto_corr, &scale, x_windowed, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder + 1, arch );
|
| @@ -299,7 +277,7 @@ void silk_noise_shape_analysis_FIX(
|
| silk_assert( nrg >= 0 );
|
|
|
| /* Convert reflection coefficients to prediction coefficients */
|
| - silk_k2a_Q16( AR2_Q24, refl_coef_Q16, psEnc->sCmn.shapingLPCOrder );
|
| + silk_k2a_Q16( AR_Q24, refl_coef_Q16, psEnc->sCmn.shapingLPCOrder );
|
|
|
| Qnrg = -scale; /* range: -12...30*/
|
| silk_assert( Qnrg >= -12 );
|
| @@ -318,40 +296,34 @@ void silk_noise_shape_analysis_FIX(
|
|
|
| if( psEnc->sCmn.warping_Q16 > 0 ) {
|
| /* Adjust gain for warping */
|
| - gain_mult_Q16 = warped_gain( AR2_Q24, warping_Q16, psEnc->sCmn.shapingLPCOrder );
|
| - silk_assert( psEncCtrl->Gains_Q16[ k ] >= 0 );
|
| - if ( silk_SMULWW( silk_RSHIFT_ROUND( psEncCtrl->Gains_Q16[ k ], 1 ), gain_mult_Q16 ) >= ( silk_int32_MAX >> 1 ) ) {
|
| - psEncCtrl->Gains_Q16[ k ] = silk_int32_MAX;
|
| + gain_mult_Q16 = warped_gain( AR_Q24, warping_Q16, psEnc->sCmn.shapingLPCOrder );
|
| + silk_assert( psEncCtrl->Gains_Q16[ k ] > 0 );
|
| + if( psEncCtrl->Gains_Q16[ k ] < SILK_FIX_CONST( 0.25, 16 ) ) {
|
| + psEncCtrl->Gains_Q16[ k ] = silk_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 );
|
| } else {
|
| - psEncCtrl->Gains_Q16[ k ] = silk_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 );
|
| + psEncCtrl->Gains_Q16[ k ] = silk_SMULWW( silk_RSHIFT_ROUND( psEncCtrl->Gains_Q16[ k ], 1 ), gain_mult_Q16 );
|
| + if ( psEncCtrl->Gains_Q16[ k ] >= ( silk_int32_MAX >> 1 ) ) {
|
| + psEncCtrl->Gains_Q16[ k ] = silk_int32_MAX;
|
| + } else {
|
| + psEncCtrl->Gains_Q16[ k ] = silk_LSHIFT32( psEncCtrl->Gains_Q16[ k ], 1 );
|
| + }
|
| }
|
| + silk_assert( psEncCtrl->Gains_Q16[ k ] > 0 );
|
| }
|
|
|
| - /* Bandwidth expansion for synthesis filter shaping */
|
| - silk_bwexpander_32( AR2_Q24, psEnc->sCmn.shapingLPCOrder, BWExp2_Q16 );
|
| -
|
| - /* Compute noise shaping filter coefficients */
|
| - silk_memcpy( AR1_Q24, AR2_Q24, psEnc->sCmn.shapingLPCOrder * sizeof( opus_int32 ) );
|
| -
|
| - /* Bandwidth expansion for analysis filter shaping */
|
| - silk_assert( BWExp1_Q16 <= SILK_FIX_CONST( 1.0, 16 ) );
|
| - silk_bwexpander_32( AR1_Q24, psEnc->sCmn.shapingLPCOrder, BWExp1_Q16 );
|
| -
|
| - /* Ratio of prediction gains, in energy domain */
|
| - pre_nrg_Q30 = silk_LPC_inverse_pred_gain_Q24( AR2_Q24, psEnc->sCmn.shapingLPCOrder );
|
| - nrg = silk_LPC_inverse_pred_gain_Q24( AR1_Q24, psEnc->sCmn.shapingLPCOrder );
|
| -
|
| - /*psEncCtrl->GainsPre[ k ] = 1.0f - 0.7f * ( 1.0f - pre_nrg / nrg ) = 0.3f + 0.7f * pre_nrg / nrg;*/
|
| - pre_nrg_Q30 = silk_LSHIFT32( silk_SMULWB( pre_nrg_Q30, SILK_FIX_CONST( 0.7, 15 ) ), 1 );
|
| - psEncCtrl->GainsPre_Q14[ k ] = ( opus_int ) SILK_FIX_CONST( 0.3, 14 ) + silk_DIV32_varQ( pre_nrg_Q30, nrg, 14 );
|
| + /* Bandwidth expansion */
|
| + silk_bwexpander_32( AR_Q24, psEnc->sCmn.shapingLPCOrder, BWExp_Q16 );
|
|
|
| - /* Convert to monic warped prediction coefficients and limit absolute values */
|
| - limit_warped_coefs( AR2_Q24, AR1_Q24, warping_Q16, SILK_FIX_CONST( 3.999, 24 ), psEnc->sCmn.shapingLPCOrder );
|
| + if( psEnc->sCmn.warping_Q16 > 0 ) {
|
| + /* Convert to monic warped prediction coefficients and limit absolute values */
|
| + limit_warped_coefs( AR_Q24, warping_Q16, SILK_FIX_CONST( 3.999, 24 ), psEnc->sCmn.shapingLPCOrder );
|
|
|
| - /* Convert from Q24 to Q13 and store in int16 */
|
| - for( i = 0; i < psEnc->sCmn.shapingLPCOrder; i++ ) {
|
| - psEncCtrl->AR1_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( AR1_Q24[ i ], 11 ) );
|
| - psEncCtrl->AR2_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( AR2_Q24[ i ], 11 ) );
|
| + /* Convert from Q24 to Q13 and store in int16 */
|
| + for( i = 0; i < psEnc->sCmn.shapingLPCOrder; i++ ) {
|
| + psEncCtrl->AR_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( AR_Q24[ i ], 11 ) );
|
| + }
|
| + } else {
|
| + silk_LPC_fit( &psEncCtrl->AR_Q13[ k * MAX_SHAPE_LPC_ORDER ], AR_Q24, 13, 24, psEnc->sCmn.shapingLPCOrder );
|
| }
|
| }
|
|
|
| @@ -368,11 +340,6 @@ void silk_noise_shape_analysis_FIX(
|
| psEncCtrl->Gains_Q16[ k ] = silk_ADD_POS_SAT32( psEncCtrl->Gains_Q16[ k ], gain_add_Q16 );
|
| }
|
|
|
| - gain_mult_Q16 = SILK_FIX_CONST( 1.0, 16 ) + silk_RSHIFT_ROUND( silk_MLA( SILK_FIX_CONST( INPUT_TILT, 26 ),
|
| - psEncCtrl->coding_quality_Q14, SILK_FIX_CONST( HIGH_RATE_INPUT_TILT, 12 ) ), 10 );
|
| - for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
|
| - psEncCtrl->GainsPre_Q14[ k ] = silk_SMULWB( gain_mult_Q16, psEncCtrl->GainsPre_Q14[ k ] );
|
| - }
|
|
|
| /************************************************/
|
| /* Control low-frequency shaping and noise tilt */
|
| @@ -410,14 +377,6 @@ void silk_noise_shape_analysis_FIX(
|
| /****************************/
|
| /* HARMONIC SHAPING CONTROL */
|
| /****************************/
|
| - /* Control boosting of harmonic frequencies */
|
| - HarmBoost_Q16 = silk_SMULWB( silk_SMULWB( SILK_FIX_CONST( 1.0, 17 ) - silk_LSHIFT( psEncCtrl->coding_quality_Q14, 3 ),
|
| - psEnc->LTPCorr_Q15 ), SILK_FIX_CONST( LOW_RATE_HARMONIC_BOOST, 16 ) );
|
| -
|
| - /* More harmonic boost for noisy input signals */
|
| - HarmBoost_Q16 = silk_SMLAWB( HarmBoost_Q16,
|
| - SILK_FIX_CONST( 1.0, 16 ) - silk_LSHIFT( psEncCtrl->input_quality_Q14, 2 ), SILK_FIX_CONST( LOW_INPUT_QUALITY_HARMONIC_BOOST, 16 ) );
|
| -
|
| if( USE_HARM_SHAPING && psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
|
| /* More harmonic noise shaping for high bitrates or noisy input */
|
| HarmShapeGain_Q16 = silk_SMLAWB( SILK_FIX_CONST( HARMONIC_SHAPING, 16 ),
|
| @@ -435,14 +394,11 @@ void silk_noise_shape_analysis_FIX(
|
| /* Smooth over subframes */
|
| /*************************/
|
| for( k = 0; k < MAX_NB_SUBFR; k++ ) {
|
| - psShapeSt->HarmBoost_smth_Q16 =
|
| - silk_SMLAWB( psShapeSt->HarmBoost_smth_Q16, HarmBoost_Q16 - psShapeSt->HarmBoost_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
|
| psShapeSt->HarmShapeGain_smth_Q16 =
|
| silk_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - psShapeSt->HarmShapeGain_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
|
| psShapeSt->Tilt_smth_Q16 =
|
| silk_SMLAWB( psShapeSt->Tilt_smth_Q16, Tilt_Q16 - psShapeSt->Tilt_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
|
|
|
| - psEncCtrl->HarmBoost_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->HarmBoost_smth_Q16, 2 );
|
| psEncCtrl->HarmShapeGain_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->HarmShapeGain_smth_Q16, 2 );
|
| psEncCtrl->Tilt_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->Tilt_smth_Q16, 2 );
|
| }
|
|
|