Loading lib_com/options.h +0 −4 Original line number Diff line number Diff line Loading @@ -95,10 +95,6 @@ #define HARMONIZE_2499_CONFIGUREFDCNGDEC /* FhG: basop issue 2499: harmonoize configureFdCngDec */ #define FIX_BASOP_2530_IVAS_DECISION_MAT /* VA: Fix ambiguous usage of extract_l() */ #define HARMONIZE_2539_cng_energy /* FhG: basop issue 2499: harmonoize cng_energy */ #ifdef HARMONIZE_2539_cng_energy #define HARMONIZE_2539_cng_energy_msu0 //#define HARMONIZE_2539_cng_energy_mac #endif /* #################### End BE switches ################################## */ Loading lib_enc/acelp_core_enc_fx.c +4 −0 Original line number Diff line number Diff line Loading @@ -434,7 +434,11 @@ ivas_error acelp_core_enc_fx( { IF( st->hTdCngEnc != NULL ) { #ifdef HARMONIZE_2539_cng_energy enr = cng_energy_fx( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att_fx, exc_fx, st->L_frame, Q_new ); /* Q8 */ #else enr = cng_energy_ivas_fx( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att_fx, exc_fx, st->L_frame, Q_new ); /* Q8 */ #endif /* calculate the energy quantization index */ enr_index = add( enr, 512 /* Q8(2.0) */ ); /* enr + 2.0 */ Loading lib_enc/fd_cng_enc_fx.c +74 −25 Original line number Diff line number Diff line Loading @@ -1163,7 +1163,7 @@ void generate_comfort_noise_enc_fx( return; } #ifndef HARMONIZE_2539_cng_energy /*-------------------------------------------------------------------* * cng_energy_fx() * Loading @@ -1186,12 +1186,7 @@ Word16 cng_energy_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy #ifdef HARMONIZE_2539_cng_energy_msu0 Word64 W_ener = W_shr( W_neg( W_deposit32_h( 1 ) ), 1 ); #endif #ifdef HARMONIZE_2539_cng_energy_mac Word64 W_ener = W_deposit32_h( 1 ); #endif move64(); #endif Loading Loading @@ -1278,6 +1273,7 @@ Word16 cng_energy_fx( return enr; } #endif /*-------------------------------------------------------------------* * cng_energy_ivas_fx() Loading @@ -1286,7 +1282,11 @@ Word16 cng_energy_fx( *-------------------------------------------------------------------*/ /*! r: CNG energy */ #ifdef HARMONIZE_2539_cng_energy Word16 cng_energy_fx( #else Word16 cng_energy_ivas_fx( #endif const Word16 element_mode, /* i : element mode Q0*/ const Word16 bwidth, /* i : audio bandwidh Q0*/ const Word16 CNG_mode, /* i : mode for DTX configuration Q0*/ Loading @@ -1301,8 +1301,17 @@ Word16 cng_energy_ivas_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy Word64 W_ener = W_shr( W_deposit32_h( 1 ), 1 ); Word64 W_ener; IF( EQ_16( element_mode, EVS_MONO ) ) { W_ener = W_shr( W_neg( W_deposit32_h( 1 ) ), 1 ); move64(); } ELSE { W_ener = W_shr( W_deposit32_h( 1 ), 1 ); move64(); } #endif maxv = 0; Loading @@ -1314,19 +1323,45 @@ Word16 cng_energy_ivas_fx( scale = norm_s( maxv ); pt_res = exc; L_ener = L_deposit_l( 1 ); #ifdef HARMONIZE_2539_cng_energy Word16 scale_tmp; Word32 scale_tmp32; IF( EQ_16( element_mode, EVS_MONO ) ) { scale_tmp = scale; scale_tmp32 = L_shr( 0x40000000, 7 - 1 ); } ELSE { scale_tmp = sub( scale, 4 ); scale_tmp32 = 0x80000000; } #endif IF( EQ_16( len, L_FRAME ) ) { FOR( i = 0; i < 128; i++ ) { #ifdef HARMONIZE_2539_cng_energy tmp16 = shl( *pt_res, scale_tmp ); L_tmp = L_mult0( tmp16, tmp16 ); pt_res++; tmp16 = shl( *pt_res, scale_tmp ); L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); if ( EQ_16( element_mode, EVS_MONO ) ) { L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); } pt_res++; W_ener = W_msu0_32_32( W_ener, L_tmp, scale_tmp32 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 L_tmp = L_mult0( tmp16, tmp16 ); pt_res++; tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) + 7 */ pt_res++; #ifdef HARMONIZE_2539_cng_energy W_ener = W_msu0_32_32( W_ener, L_tmp, 0x80000000 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_tmp ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif } Loading @@ -1335,33 +1370,46 @@ Word16 cng_energy_ivas_fx( { FOR( i = 0; i < 160; i++ ) { tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 #ifdef HARMONIZE_2539_cng_energy tmp16 = shl( *pt_res, scale_tmp ); L_tmp = L_mult( tmp16, tmp16 ); if ( EQ_16( element_mode, EVS_MONO ) ) { L_tmp = L_mult0( tmp16, tmp16 ); } pt_res++; tmp16 = shl( *pt_res, scale_tmp ); L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ if ( EQ_16( element_mode, EVS_MONO ) ) { L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); } pt_res++; W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), scale_tmp32 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 L_tmp = L_mult( tmp16, tmp16 ); #endif pt_res++; tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 #ifdef HARMONIZE_2539_cng_energy L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ #else L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ #endif pt_res++; #ifdef HARMONIZE_2539_cng_energy W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif } } #ifdef HARMONIZE_2539_cng_energy IF( EQ_16( element_mode, EVS_MONO ) ) { L_ener = L_shl( L_negate( W_extract_h( W_ener ) ), 1 ); } ELSE { L_ener = L_shl( W_extract_h( W_ener ), 1 ); if ( NE_16( len, L_FRAME ) ) { L_ener = L_shl( L_ener, 1 ); } } #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); Loading Loading @@ -1404,6 +1452,7 @@ Word16 cng_energy_ivas_fx( } void perform_noise_estimation_enc_fx( Word32 *band_energies, /* i : energy in critical bands without minimum noise floor MODE2_E_MIN band_energies_exp*/ Word16 band_energies_exp, Loading lib_enc/prot_fx_enc.h +2 −2 Original line number Diff line number Diff line Loading @@ -3860,7 +3860,7 @@ void writeLPCparam_fx( const Word16 no_param_lpc, /* i : number of LPC parameters */ Word16 *nbits_lpc /* o : LPC bits written */ ); #ifndef HARMONIZE_2539_cng_energy Word16 cng_energy_ivas_fx( const Word16 element_mode, /* i : element mode */ const Word16 bwidth, /* i : audio bandwidh */ Loading @@ -3870,7 +3870,7 @@ Word16 cng_energy_ivas_fx( const Word16 len, /* i : vector length */ const Word16 Q_new /* i : Input scaling */ ); #endif void SynthesisSTFT_enc_ivas_fx( Word32 *fftBuffer, /* i : pointer to FFT bins */ Loading Loading
lib_com/options.h +0 −4 Original line number Diff line number Diff line Loading @@ -95,10 +95,6 @@ #define HARMONIZE_2499_CONFIGUREFDCNGDEC /* FhG: basop issue 2499: harmonoize configureFdCngDec */ #define FIX_BASOP_2530_IVAS_DECISION_MAT /* VA: Fix ambiguous usage of extract_l() */ #define HARMONIZE_2539_cng_energy /* FhG: basop issue 2499: harmonoize cng_energy */ #ifdef HARMONIZE_2539_cng_energy #define HARMONIZE_2539_cng_energy_msu0 //#define HARMONIZE_2539_cng_energy_mac #endif /* #################### End BE switches ################################## */ Loading
lib_enc/acelp_core_enc_fx.c +4 −0 Original line number Diff line number Diff line Loading @@ -434,7 +434,11 @@ ivas_error acelp_core_enc_fx( { IF( st->hTdCngEnc != NULL ) { #ifdef HARMONIZE_2539_cng_energy enr = cng_energy_fx( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att_fx, exc_fx, st->L_frame, Q_new ); /* Q8 */ #else enr = cng_energy_ivas_fx( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att_fx, exc_fx, st->L_frame, Q_new ); /* Q8 */ #endif /* calculate the energy quantization index */ enr_index = add( enr, 512 /* Q8(2.0) */ ); /* enr + 2.0 */ Loading
lib_enc/fd_cng_enc_fx.c +74 −25 Original line number Diff line number Diff line Loading @@ -1163,7 +1163,7 @@ void generate_comfort_noise_enc_fx( return; } #ifndef HARMONIZE_2539_cng_energy /*-------------------------------------------------------------------* * cng_energy_fx() * Loading @@ -1186,12 +1186,7 @@ Word16 cng_energy_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy #ifdef HARMONIZE_2539_cng_energy_msu0 Word64 W_ener = W_shr( W_neg( W_deposit32_h( 1 ) ), 1 ); #endif #ifdef HARMONIZE_2539_cng_energy_mac Word64 W_ener = W_deposit32_h( 1 ); #endif move64(); #endif Loading Loading @@ -1278,6 +1273,7 @@ Word16 cng_energy_fx( return enr; } #endif /*-------------------------------------------------------------------* * cng_energy_ivas_fx() Loading @@ -1286,7 +1282,11 @@ Word16 cng_energy_fx( *-------------------------------------------------------------------*/ /*! r: CNG energy */ #ifdef HARMONIZE_2539_cng_energy Word16 cng_energy_fx( #else Word16 cng_energy_ivas_fx( #endif const Word16 element_mode, /* i : element mode Q0*/ const Word16 bwidth, /* i : audio bandwidh Q0*/ const Word16 CNG_mode, /* i : mode for DTX configuration Q0*/ Loading @@ -1301,8 +1301,17 @@ Word16 cng_energy_ivas_fx( const Word16 *pt_res; Word32 L_ener, L_tmp; #ifdef HARMONIZE_2539_cng_energy Word64 W_ener = W_shr( W_deposit32_h( 1 ), 1 ); Word64 W_ener; IF( EQ_16( element_mode, EVS_MONO ) ) { W_ener = W_shr( W_neg( W_deposit32_h( 1 ) ), 1 ); move64(); } ELSE { W_ener = W_shr( W_deposit32_h( 1 ), 1 ); move64(); } #endif maxv = 0; Loading @@ -1314,19 +1323,45 @@ Word16 cng_energy_ivas_fx( scale = norm_s( maxv ); pt_res = exc; L_ener = L_deposit_l( 1 ); #ifdef HARMONIZE_2539_cng_energy Word16 scale_tmp; Word32 scale_tmp32; IF( EQ_16( element_mode, EVS_MONO ) ) { scale_tmp = scale; scale_tmp32 = L_shr( 0x40000000, 7 - 1 ); } ELSE { scale_tmp = sub( scale, 4 ); scale_tmp32 = 0x80000000; } #endif IF( EQ_16( len, L_FRAME ) ) { FOR( i = 0; i < 128; i++ ) { #ifdef HARMONIZE_2539_cng_energy tmp16 = shl( *pt_res, scale_tmp ); L_tmp = L_mult0( tmp16, tmp16 ); pt_res++; tmp16 = shl( *pt_res, scale_tmp ); L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); if ( EQ_16( element_mode, EVS_MONO ) ) { L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); } pt_res++; W_ener = W_msu0_32_32( W_ener, L_tmp, scale_tmp32 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 L_tmp = L_mult0( tmp16, tmp16 ); pt_res++; tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 L_tmp = L_mac0( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) + 7 */ pt_res++; #ifdef HARMONIZE_2539_cng_energy W_ener = W_msu0_32_32( W_ener, L_tmp, 0x80000000 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, L_tmp ); /* 2*(Q_new+scale)+1, divide by L_frame done here */ #endif } Loading @@ -1335,33 +1370,46 @@ Word16 cng_energy_ivas_fx( { FOR( i = 0; i < 160; i++ ) { tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 #ifdef HARMONIZE_2539_cng_energy tmp16 = shl( *pt_res, scale_tmp ); L_tmp = L_mult( tmp16, tmp16 ); if ( EQ_16( element_mode, EVS_MONO ) ) { L_tmp = L_mult0( tmp16, tmp16 ); } pt_res++; tmp16 = shl( *pt_res, scale_tmp ); L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ if ( EQ_16( element_mode, EVS_MONO ) ) { L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); } pt_res++; W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), scale_tmp32 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 L_tmp = L_mult( tmp16, tmp16 ); #endif pt_res++; tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4 #ifdef HARMONIZE_2539_cng_energy L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ #else L_tmp = L_mac( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */ #endif pt_res++; #ifdef HARMONIZE_2539_cng_energy W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #else L_ener = L_add( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */ #endif } } #ifdef HARMONIZE_2539_cng_energy IF( EQ_16( element_mode, EVS_MONO ) ) { L_ener = L_shl( L_negate( W_extract_h( W_ener ) ), 1 ); } ELSE { L_ener = L_shl( W_extract_h( W_ener ), 1 ); if ( NE_16( len, L_FRAME ) ) { L_ener = L_shl( L_ener, 1 ); } } #endif hi = norm_l( L_ener ); lo = Log2_norm_lc( L_shl( L_ener, hi ) ); Loading Loading @@ -1404,6 +1452,7 @@ Word16 cng_energy_ivas_fx( } void perform_noise_estimation_enc_fx( Word32 *band_energies, /* i : energy in critical bands without minimum noise floor MODE2_E_MIN band_energies_exp*/ Word16 band_energies_exp, Loading
lib_enc/prot_fx_enc.h +2 −2 Original line number Diff line number Diff line Loading @@ -3860,7 +3860,7 @@ void writeLPCparam_fx( const Word16 no_param_lpc, /* i : number of LPC parameters */ Word16 *nbits_lpc /* o : LPC bits written */ ); #ifndef HARMONIZE_2539_cng_energy Word16 cng_energy_ivas_fx( const Word16 element_mode, /* i : element mode */ const Word16 bwidth, /* i : audio bandwidh */ Loading @@ -3870,7 +3870,7 @@ Word16 cng_energy_ivas_fx( const Word16 len, /* i : vector length */ const Word16 Q_new /* i : Input scaling */ ); #endif void SynthesisSTFT_enc_ivas_fx( Word32 *fftBuffer, /* i : pointer to FFT bins */ Loading