Loading lib_com/ivas_prot_fx.h +1 −0 Original line number Diff line number Diff line Loading @@ -5957,6 +5957,7 @@ ivas_error pre_proc_front_ivas_fx( const Word16 ch_idx #endif ); ivas_error pre_proc_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ const Word16 last_element_mode, /* i : last element mode Q0*/ Loading lib_dec/ivas_core_dec_fx.c +2 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,8 @@ ivas_error ivas_core_dec_fx( Word16 tmp16, tmp16_2, j; Word16 Q_white_exc; set16_fx( tmp_buffer_fx, 0, L_FRAME48k ); Word16 tmps, incr; Word32 bwe_exc_extended_fx[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; Loading lib_dec/ivas_out_setup_conversion_fx.c +18 −4 Original line number Diff line number Diff line Loading @@ -657,6 +657,7 @@ void ivas_ls_setup_conversion_process_mdct_fx( Word16 transform_type[MAX_CICP_CHANNELS][2]; Word16 frameSize; Word32 targetEnergy[MAX_SFB + 2], dmxEnergy[MAX_SFB + 2]; Word16 dmxEnergy_exp[MAX_SFB + 2], dmxEnergy_exp_temp; Word32 dmxCoeff; Word32 dmxSignalReal[L_FRAME48k], dmxSignalImag[L_FRAME48k]; Word32 eqGain; Loading Loading @@ -739,6 +740,9 @@ void ivas_ls_setup_conversion_process_mdct_fx( set32_fx( targetEnergy, 0, MAX_SFB + 2 ); set32_fx( dmxEnergy, 0, MAX_SFB + 2 ); set16_fx( dmxEnergy_exp, 0, MAX_SFB + 2 ); dmxEnergy_exp_temp = 0; move16(); FOR( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) { Loading Loading @@ -829,6 +833,7 @@ void ivas_ls_setup_conversion_process_mdct_fx( FOR( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) { Word32 tmpReal, tmpImag, DMXEne; Word16 DMXEne_exp; start = hLsSetUpConversion->sfbOffset[bandIdx]; move16(); Loading @@ -838,6 +843,8 @@ void ivas_ls_setup_conversion_process_mdct_fx( /* Loop over all the bins in the band */ DMXEne = 0; move32(); DMXEne_exp = 0; move16(); FOR( binIdx = start; binIdx < stop; binIdx++ ) { tmpReal = dmxSignalReal[binIdx]; Loading @@ -845,13 +852,20 @@ void ivas_ls_setup_conversion_process_mdct_fx( tmpImag = dmxSignalImag[binIdx]; move32(); DMXEne = L_add( DMXEne, L_add( Mpy_32_32( tmpReal, tmpReal ), Mpy_32_32( tmpImag, tmpImag ) ) ); DMXEne = BASOP_Util_Add_Mant32Exp( DMXEne, DMXEne_exp, L_add( Mpy_32_32( tmpReal, tmpReal ), Mpy_32_32( tmpImag, tmpImag ) ), sub( 40, shl( q_output, 1 ) ), &DMXEne_exp ); } dmxEnergy[bandIdx] = L_add( dmxEnergy[bandIdx], DMXEne ); dmxEnergy[bandIdx] = BASOP_Util_Add_Mant32Exp( dmxEnergy[bandIdx], dmxEnergy_exp[bandIdx], DMXEne, DMXEne_exp, &dmxEnergy_exp[bandIdx] ); move32(); dmxEnergy_exp_temp = s_max( dmxEnergy_exp_temp, dmxEnergy_exp[bandIdx] ); } } /* end of out channel loop */ /* Scaling to common exponent */ FOR( bandIdx = 0; bandIdx < MAX_SFB + 2; bandIdx++ ) { dmxEnergy[bandIdx] = L_shl( dmxEnergy[bandIdx], sub( dmxEnergy_exp[bandIdx], dmxEnergy_exp_temp ) ); move32(); } /* Step 3: Peform energy smoothing */ Word16 te_scale = getScaleFactor32( hLsSetUpConversion->targetEnergyPrev_fx[0], hLsSetUpConversion->sfbCnt ); Loading @@ -860,13 +874,13 @@ void ivas_ls_setup_conversion_process_mdct_fx( scale_sig32( hLsSetUpConversion->dmxEnergyPrev_fx[0], hLsSetUpConversion->sfbCnt, dmx_sacle ); Word16 te_max_e = s_max( sub( 40, shl( q_output, 1 ) ), sub( hLsSetUpConversion->te_prev_exp[0], te_scale ) ); Word16 dmx_max_e = s_max( sub( 40, shl( q_output, 1 ) ), sub( hLsSetUpConversion->dmx_prev_exp[0], dmx_sacle ) ); Word16 dmx_max_e = s_max( dmxEnergy_exp_temp, sub( hLsSetUpConversion->dmx_prev_exp[0], dmx_sacle ) ); FOR( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) { targetEnergy[bandIdx] = L_add( Mpy_32_32( LS_OUT_CONV_SMOOTHING_FACTOR_Q31, L_shr( targetEnergy[bandIdx], sub( te_max_e, sub( 40, shl( q_output, 1 ) ) ) ) ), Mpy_32_32( ( ONE_IN_Q31 - LS_OUT_CONV_SMOOTHING_FACTOR_Q31 ), L_shr( hLsSetUpConversion->targetEnergyPrev_fx[0][bandIdx], sub( te_max_e, sub( hLsSetUpConversion->te_prev_exp[0], te_scale ) ) ) ) ); move32(); dmxEnergy[bandIdx] = L_add( Mpy_32_32( LS_OUT_CONV_SMOOTHING_FACTOR_Q31, L_shr( dmxEnergy[bandIdx], sub( dmx_max_e, sub( 40, shl( q_output, 1 ) ) ) ) ), Mpy_32_32( ( ONE_IN_Q31 - LS_OUT_CONV_SMOOTHING_FACTOR_Q31 ), L_shr( hLsSetUpConversion->dmxEnergyPrev_fx[0][bandIdx], sub( dmx_max_e, sub( hLsSetUpConversion->dmx_prev_exp[0], dmx_sacle ) ) ) ) ); dmxEnergy[bandIdx] = L_add( Mpy_32_32( LS_OUT_CONV_SMOOTHING_FACTOR_Q31, L_shr( dmxEnergy[bandIdx], sub( dmx_max_e, dmxEnergy_exp_temp ) ) ), Mpy_32_32( ( ONE_IN_Q31 - LS_OUT_CONV_SMOOTHING_FACTOR_Q31 ), L_shr( hLsSetUpConversion->dmxEnergyPrev_fx[0][bandIdx], sub( dmx_max_e, sub( hLsSetUpConversion->dmx_prev_exp[0], dmx_sacle ) ) ) ) ); move32(); hLsSetUpConversion->targetEnergyPrev_fx[0][bandIdx] = targetEnergy[bandIdx]; /* te_prev_exp = 40 - 2*q_output */ move32(); Loading lib_enc/fd_cng_enc_fx.c +8 −5 Original line number Diff line number Diff line Loading @@ -2841,14 +2841,17 @@ void FdCngEncodeMDCTStereoSID_fx( { t1 = BASOP_Util_Log2( lr_in_ptr_fx[ch][p] ); // Q25 t2 = L_add( t1, L_shl( lr_in_ptr_e[ch], Q25 ) ); // Q25 ms_ptr_fx[ch][p] = Mpy_32_32( t2, TEN_MULT_LOG10_2_IN_Q29 ); // Q23 move32(); } ELSE { t2 = 0; // 10.f * log10f( EPSILON ) --> -150.0f // Subsequent additions / subtractions happen on these numbers, so to avoid saturations // this value is set to -128.0f in Q23 ms_ptr_fx[ch][p] = -ONE_IN_Q30; // Q23 move32(); } ms_ptr_fx[ch][p] = Mpy_32_32( t2, TEN_MULT_LOG10_2_IN_Q29 ); // Q23 move32(); E_fx[ch] = L_add( E_fx[ch], L_shr( ms_ptr_fx[ch][p], 4 ) ); // Q19 move32(); } Loading lib_enc/init_enc_fx.c +6 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ ivas_error init_encoder_fx( { st_fx->input_fx = st_fx->input_buff_fx + st_fx->input_Fs / FRAMES_PER_SEC; } } ELSE { Loading Loading @@ -1427,6 +1428,11 @@ ivas_error init_encoder_ivas_fx( { st->input32_fx = st->input_buff32_fx + Mpy_32_32( st->input_Fs, 42949673 ) /* 1/50 in Q31*/; // st->input_Fs / FRAMES_PER_SEC st->input_fx = st->input_buff_fx + frame_length; /*st->inp_12k8_hp = st->inp_12k8_hp_buf + frame_length; set16_fx(st->inp_12k8_hp_buf, 0, L_FRAME48k + L_FRAME48k + NS2SA(48000, DELAY_FIR_RESAMPL_NS)); st->Q_inp_12k8_hp = Q15; set16_fx(st->old_inp_12k8_hp_fx, 0, L_INP_MEM); st->Q_old_inp_12k8_hp_fx = Q15;*/ } #if 1 // TODO: To be removed later #endif Loading Loading
lib_com/ivas_prot_fx.h +1 −0 Original line number Diff line number Diff line Loading @@ -5957,6 +5957,7 @@ ivas_error pre_proc_front_ivas_fx( const Word16 ch_idx #endif ); ivas_error pre_proc_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ const Word16 last_element_mode, /* i : last element mode Q0*/ Loading
lib_dec/ivas_core_dec_fx.c +2 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,8 @@ ivas_error ivas_core_dec_fx( Word16 tmp16, tmp16_2, j; Word16 Q_white_exc; set16_fx( tmp_buffer_fx, 0, L_FRAME48k ); Word16 tmps, incr; Word32 bwe_exc_extended_fx[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; Loading
lib_dec/ivas_out_setup_conversion_fx.c +18 −4 Original line number Diff line number Diff line Loading @@ -657,6 +657,7 @@ void ivas_ls_setup_conversion_process_mdct_fx( Word16 transform_type[MAX_CICP_CHANNELS][2]; Word16 frameSize; Word32 targetEnergy[MAX_SFB + 2], dmxEnergy[MAX_SFB + 2]; Word16 dmxEnergy_exp[MAX_SFB + 2], dmxEnergy_exp_temp; Word32 dmxCoeff; Word32 dmxSignalReal[L_FRAME48k], dmxSignalImag[L_FRAME48k]; Word32 eqGain; Loading Loading @@ -739,6 +740,9 @@ void ivas_ls_setup_conversion_process_mdct_fx( set32_fx( targetEnergy, 0, MAX_SFB + 2 ); set32_fx( dmxEnergy, 0, MAX_SFB + 2 ); set16_fx( dmxEnergy_exp, 0, MAX_SFB + 2 ); dmxEnergy_exp_temp = 0; move16(); FOR( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) { Loading Loading @@ -829,6 +833,7 @@ void ivas_ls_setup_conversion_process_mdct_fx( FOR( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) { Word32 tmpReal, tmpImag, DMXEne; Word16 DMXEne_exp; start = hLsSetUpConversion->sfbOffset[bandIdx]; move16(); Loading @@ -838,6 +843,8 @@ void ivas_ls_setup_conversion_process_mdct_fx( /* Loop over all the bins in the band */ DMXEne = 0; move32(); DMXEne_exp = 0; move16(); FOR( binIdx = start; binIdx < stop; binIdx++ ) { tmpReal = dmxSignalReal[binIdx]; Loading @@ -845,13 +852,20 @@ void ivas_ls_setup_conversion_process_mdct_fx( tmpImag = dmxSignalImag[binIdx]; move32(); DMXEne = L_add( DMXEne, L_add( Mpy_32_32( tmpReal, tmpReal ), Mpy_32_32( tmpImag, tmpImag ) ) ); DMXEne = BASOP_Util_Add_Mant32Exp( DMXEne, DMXEne_exp, L_add( Mpy_32_32( tmpReal, tmpReal ), Mpy_32_32( tmpImag, tmpImag ) ), sub( 40, shl( q_output, 1 ) ), &DMXEne_exp ); } dmxEnergy[bandIdx] = L_add( dmxEnergy[bandIdx], DMXEne ); dmxEnergy[bandIdx] = BASOP_Util_Add_Mant32Exp( dmxEnergy[bandIdx], dmxEnergy_exp[bandIdx], DMXEne, DMXEne_exp, &dmxEnergy_exp[bandIdx] ); move32(); dmxEnergy_exp_temp = s_max( dmxEnergy_exp_temp, dmxEnergy_exp[bandIdx] ); } } /* end of out channel loop */ /* Scaling to common exponent */ FOR( bandIdx = 0; bandIdx < MAX_SFB + 2; bandIdx++ ) { dmxEnergy[bandIdx] = L_shl( dmxEnergy[bandIdx], sub( dmxEnergy_exp[bandIdx], dmxEnergy_exp_temp ) ); move32(); } /* Step 3: Peform energy smoothing */ Word16 te_scale = getScaleFactor32( hLsSetUpConversion->targetEnergyPrev_fx[0], hLsSetUpConversion->sfbCnt ); Loading @@ -860,13 +874,13 @@ void ivas_ls_setup_conversion_process_mdct_fx( scale_sig32( hLsSetUpConversion->dmxEnergyPrev_fx[0], hLsSetUpConversion->sfbCnt, dmx_sacle ); Word16 te_max_e = s_max( sub( 40, shl( q_output, 1 ) ), sub( hLsSetUpConversion->te_prev_exp[0], te_scale ) ); Word16 dmx_max_e = s_max( sub( 40, shl( q_output, 1 ) ), sub( hLsSetUpConversion->dmx_prev_exp[0], dmx_sacle ) ); Word16 dmx_max_e = s_max( dmxEnergy_exp_temp, sub( hLsSetUpConversion->dmx_prev_exp[0], dmx_sacle ) ); FOR( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) { targetEnergy[bandIdx] = L_add( Mpy_32_32( LS_OUT_CONV_SMOOTHING_FACTOR_Q31, L_shr( targetEnergy[bandIdx], sub( te_max_e, sub( 40, shl( q_output, 1 ) ) ) ) ), Mpy_32_32( ( ONE_IN_Q31 - LS_OUT_CONV_SMOOTHING_FACTOR_Q31 ), L_shr( hLsSetUpConversion->targetEnergyPrev_fx[0][bandIdx], sub( te_max_e, sub( hLsSetUpConversion->te_prev_exp[0], te_scale ) ) ) ) ); move32(); dmxEnergy[bandIdx] = L_add( Mpy_32_32( LS_OUT_CONV_SMOOTHING_FACTOR_Q31, L_shr( dmxEnergy[bandIdx], sub( dmx_max_e, sub( 40, shl( q_output, 1 ) ) ) ) ), Mpy_32_32( ( ONE_IN_Q31 - LS_OUT_CONV_SMOOTHING_FACTOR_Q31 ), L_shr( hLsSetUpConversion->dmxEnergyPrev_fx[0][bandIdx], sub( dmx_max_e, sub( hLsSetUpConversion->dmx_prev_exp[0], dmx_sacle ) ) ) ) ); dmxEnergy[bandIdx] = L_add( Mpy_32_32( LS_OUT_CONV_SMOOTHING_FACTOR_Q31, L_shr( dmxEnergy[bandIdx], sub( dmx_max_e, dmxEnergy_exp_temp ) ) ), Mpy_32_32( ( ONE_IN_Q31 - LS_OUT_CONV_SMOOTHING_FACTOR_Q31 ), L_shr( hLsSetUpConversion->dmxEnergyPrev_fx[0][bandIdx], sub( dmx_max_e, sub( hLsSetUpConversion->dmx_prev_exp[0], dmx_sacle ) ) ) ) ); move32(); hLsSetUpConversion->targetEnergyPrev_fx[0][bandIdx] = targetEnergy[bandIdx]; /* te_prev_exp = 40 - 2*q_output */ move32(); Loading
lib_enc/fd_cng_enc_fx.c +8 −5 Original line number Diff line number Diff line Loading @@ -2841,14 +2841,17 @@ void FdCngEncodeMDCTStereoSID_fx( { t1 = BASOP_Util_Log2( lr_in_ptr_fx[ch][p] ); // Q25 t2 = L_add( t1, L_shl( lr_in_ptr_e[ch], Q25 ) ); // Q25 ms_ptr_fx[ch][p] = Mpy_32_32( t2, TEN_MULT_LOG10_2_IN_Q29 ); // Q23 move32(); } ELSE { t2 = 0; // 10.f * log10f( EPSILON ) --> -150.0f // Subsequent additions / subtractions happen on these numbers, so to avoid saturations // this value is set to -128.0f in Q23 ms_ptr_fx[ch][p] = -ONE_IN_Q30; // Q23 move32(); } ms_ptr_fx[ch][p] = Mpy_32_32( t2, TEN_MULT_LOG10_2_IN_Q29 ); // Q23 move32(); E_fx[ch] = L_add( E_fx[ch], L_shr( ms_ptr_fx[ch][p], 4 ) ); // Q19 move32(); } Loading
lib_enc/init_enc_fx.c +6 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ ivas_error init_encoder_fx( { st_fx->input_fx = st_fx->input_buff_fx + st_fx->input_Fs / FRAMES_PER_SEC; } } ELSE { Loading Loading @@ -1427,6 +1428,11 @@ ivas_error init_encoder_ivas_fx( { st->input32_fx = st->input_buff32_fx + Mpy_32_32( st->input_Fs, 42949673 ) /* 1/50 in Q31*/; // st->input_Fs / FRAMES_PER_SEC st->input_fx = st->input_buff_fx + frame_length; /*st->inp_12k8_hp = st->inp_12k8_hp_buf + frame_length; set16_fx(st->inp_12k8_hp_buf, 0, L_FRAME48k + L_FRAME48k + NS2SA(48000, DELAY_FIR_RESAMPL_NS)); st->Q_inp_12k8_hp = Q15; set16_fx(st->old_inp_12k8_hp_fx, 0, L_INP_MEM); st->Q_old_inp_12k8_hp_fx = Q15;*/ } #if 1 // TODO: To be removed later #endif Loading