Loading lib_dec/fd_cng_dec_fx.c +18 −4 Original line number Diff line number Diff line Loading @@ -1384,16 +1384,24 @@ Word16 ApplyFdCng_ivas_fx( IF( NE_16( s2, -( WORD32_BITS - 1 ) ) ) { s = sub( *cngNoiseLevel_exp, add( hFdCngDec->bandNoiseShape_exp, s2 ) ); Word16 e_shift=0; if (s > 0) { Word16 q_norm = L_norm_arr(&cngNoiseLevel[j], sub(FFTCLDFBLEN, j)); if (GT_16(s, q_norm)) { scale_sig32(cngNoiseLevel, j, sub(q_norm, s)); e_shift = sub(s, q_norm); } } FOR( ; k < hFdCngCom->npart; k++ ) { FOR( ; j <= hFdCngCom->part[k]; j++ ) { cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], sub( s, e_shift ) ); move32(); } } *cngNoiseLevel_exp = add( hFdCngDec->bandNoiseShape_exp, s2 ); *cngNoiseLevel_exp = add( add( hFdCngDec->bandNoiseShape_exp, s2 ), e_shift ); move16(); } } Loading Loading @@ -2793,8 +2801,14 @@ void perform_noise_estimation_dec_ivas_fx( { alpha = Inv16( add( hFdCngDec->first_cna_noise_update_cnt, 1 ), &e ); alpha = shl_sat( alpha, e ); // Q15 IF (LT_16(hFdCngDec->msPeriodog_exp, hFdCngDec->msNoiseEst_exp)) { scale_sig32(hFdCngDec->msPeriodog, NPART_SHAPING, sub(hFdCngDec->msPeriodog_exp,hFdCngDec->msNoiseEst_exp)); hFdCngDec->msPeriodog_exp=hFdCngDec->msNoiseEst_exp; } ELSE IF (GT_16(hFdCngDec->msPeriodog_exp, hFdCngDec->msNoiseEst_exp)) { scale_sig32(msNoiseEst, NPART_SHAPING, sub(hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_exp)); hFdCngDec->msNoiseEst_exp = hFdCngDec->msPeriodog_exp; } FOR( p = 0; p < npart; p++ ) { temp = msPeriodog[p]; Loading lib_dec/ivas_stereo_cng_dec.c +9 −1 Original line number Diff line number Diff line Loading @@ -1273,13 +1273,21 @@ static void stereo_dft_generate_comfort_noise_fx( FOR( k = 0; k < sub( hFdCngCom->nFFTpart, 2 ); k++ ) { factor = BASOP_Util_Divide3232_Scale_cadence( L_add( hFdCngCom->sidNoiseEstLp[k], DELTA_FX ), L_add( st->hFdCngDec->partNoiseShape[k], DELTA_FX ), &q_div ); factor = s_min( add( hStereoDft->scale_fx, extract_l( Mpy_32_16_1( L_mult( sub( extract_h( factor ), hStereoDft->scale_fx ), hStereoCng->xfade_frame_counter ), ONE_BY_MAX_K ) ) ), extract_h( factor ) ); q_div = add(q_div, sub(hFdCngCom->sidNoiseEstExp, st->hFdCngDec->partNoiseShape_exp)); if (q_div < 0) { factor = L_shl(factor, q_div); //Q31 q_div = 0; } //factor = s_min( add( hStereoDft->scale_fx, extract_l( Mpy_32_16_1( L_mult( sub( extract_h( factor ), hStereoDft->scale_fx ), hStereoCng->xfade_frame_counter ), ONE_BY_MAX_K ) ) ), extract_h( factor ) ); factor = L_min( L_add( L_shl( hStereoDft->scale_fx, sub( 16, q_div ) ), W_extract_l( W_mult0_32_32( Mpy_32_16_1( L_sub( factor, L_shl( hStereoDft->scale_fx, sub( 16, q_div ) ) ), ONE_BY_MAX_K ), hStereoCng->xfade_frame_counter ) ) ), factor ); FOR( ; j <= hFdCngCom->part[k]; j++ ) { hFdCngCom->cngNoiseLevel[j] = Mpy_32_32( st->hFdCngDec->bandNoiseShape[j], factor ); hFdCngCom->cngNoiseLevel[j] = L_shl(hFdCngCom->cngNoiseLevel[j], q_div); move32(); } } hFdCngCom->cngNoiseLevelExp = st->hFdCngDec->bandNoiseShape_exp; } } scale = shr( output_frame, 1 ); Loading Loading
lib_dec/fd_cng_dec_fx.c +18 −4 Original line number Diff line number Diff line Loading @@ -1384,16 +1384,24 @@ Word16 ApplyFdCng_ivas_fx( IF( NE_16( s2, -( WORD32_BITS - 1 ) ) ) { s = sub( *cngNoiseLevel_exp, add( hFdCngDec->bandNoiseShape_exp, s2 ) ); Word16 e_shift=0; if (s > 0) { Word16 q_norm = L_norm_arr(&cngNoiseLevel[j], sub(FFTCLDFBLEN, j)); if (GT_16(s, q_norm)) { scale_sig32(cngNoiseLevel, j, sub(q_norm, s)); e_shift = sub(s, q_norm); } } FOR( ; k < hFdCngCom->npart; k++ ) { FOR( ; j <= hFdCngCom->part[k]; j++ ) { cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], sub( s, e_shift ) ); move32(); } } *cngNoiseLevel_exp = add( hFdCngDec->bandNoiseShape_exp, s2 ); *cngNoiseLevel_exp = add( add( hFdCngDec->bandNoiseShape_exp, s2 ), e_shift ); move16(); } } Loading Loading @@ -2793,8 +2801,14 @@ void perform_noise_estimation_dec_ivas_fx( { alpha = Inv16( add( hFdCngDec->first_cna_noise_update_cnt, 1 ), &e ); alpha = shl_sat( alpha, e ); // Q15 IF (LT_16(hFdCngDec->msPeriodog_exp, hFdCngDec->msNoiseEst_exp)) { scale_sig32(hFdCngDec->msPeriodog, NPART_SHAPING, sub(hFdCngDec->msPeriodog_exp,hFdCngDec->msNoiseEst_exp)); hFdCngDec->msPeriodog_exp=hFdCngDec->msNoiseEst_exp; } ELSE IF (GT_16(hFdCngDec->msPeriodog_exp, hFdCngDec->msNoiseEst_exp)) { scale_sig32(msNoiseEst, NPART_SHAPING, sub(hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_exp)); hFdCngDec->msNoiseEst_exp = hFdCngDec->msPeriodog_exp; } FOR( p = 0; p < npart; p++ ) { temp = msPeriodog[p]; Loading
lib_dec/ivas_stereo_cng_dec.c +9 −1 Original line number Diff line number Diff line Loading @@ -1273,13 +1273,21 @@ static void stereo_dft_generate_comfort_noise_fx( FOR( k = 0; k < sub( hFdCngCom->nFFTpart, 2 ); k++ ) { factor = BASOP_Util_Divide3232_Scale_cadence( L_add( hFdCngCom->sidNoiseEstLp[k], DELTA_FX ), L_add( st->hFdCngDec->partNoiseShape[k], DELTA_FX ), &q_div ); factor = s_min( add( hStereoDft->scale_fx, extract_l( Mpy_32_16_1( L_mult( sub( extract_h( factor ), hStereoDft->scale_fx ), hStereoCng->xfade_frame_counter ), ONE_BY_MAX_K ) ) ), extract_h( factor ) ); q_div = add(q_div, sub(hFdCngCom->sidNoiseEstExp, st->hFdCngDec->partNoiseShape_exp)); if (q_div < 0) { factor = L_shl(factor, q_div); //Q31 q_div = 0; } //factor = s_min( add( hStereoDft->scale_fx, extract_l( Mpy_32_16_1( L_mult( sub( extract_h( factor ), hStereoDft->scale_fx ), hStereoCng->xfade_frame_counter ), ONE_BY_MAX_K ) ) ), extract_h( factor ) ); factor = L_min( L_add( L_shl( hStereoDft->scale_fx, sub( 16, q_div ) ), W_extract_l( W_mult0_32_32( Mpy_32_16_1( L_sub( factor, L_shl( hStereoDft->scale_fx, sub( 16, q_div ) ) ), ONE_BY_MAX_K ), hStereoCng->xfade_frame_counter ) ) ), factor ); FOR( ; j <= hFdCngCom->part[k]; j++ ) { hFdCngCom->cngNoiseLevel[j] = Mpy_32_32( st->hFdCngDec->bandNoiseShape[j], factor ); hFdCngCom->cngNoiseLevel[j] = L_shl(hFdCngCom->cngNoiseLevel[j], q_div); move32(); } } hFdCngCom->cngNoiseLevelExp = st->hFdCngDec->bandNoiseShape_exp; } } scale = shr( output_frame, 1 ); Loading