Commit b5c2f80f authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

LTV test 26032025

parent 692a0e38
Loading
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -1531,7 +1531,15 @@ Word16 ApplyFdCng_ivas_fx(
                move16();
                /* This sets the new CNG levels until a SID update overwrites it */
                Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ) ); /* This sets the new CNG levels until a SID update overwrites it */ /*Q31 - hFdCngDec->bandNoiseShape_exp*/
                *cngNoiseLevel_exp = hFdCngDec->bandNoiseShape_exp;

                Word16 shift1 = L_norm_arr( cngNoiseLevel, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ) );
                Word16 shift2 = L_norm_arr( cngNoiseLevel + sub( hFdCngCom->stopBand, hFdCngCom->startBand ), sub( FFTCLDFBLEN, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ) ) );
                Word16 shift = s_max( sub( hFdCngDec->bandNoiseShape_exp, shift1 ), sub( *cngNoiseLevel_exp, shift2 ) );

                scale_sig32( cngNoiseLevel, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ), sub( sub( hFdCngDec->bandNoiseShape_exp, shift1 ), shift ) );
                scale_sig32( cngNoiseLevel + sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ), sub( FFTCLDFBLEN, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ) ), sub( sub( *cngNoiseLevel_exp, shift2 ), shift ) );

                *cngNoiseLevel_exp = shift;
                move16();

                /*st->cngTDLevel = (float)sqrt( (sumFLOAT(cngNoiseLevel, hFdCngCom->stopFFTbin - hFdCngCom->startBand) / 2 * hFdCngCom->fftlen) / st->Mode2_L_frame);*/
@@ -5059,7 +5067,14 @@ void FdCng_decodeSID_ivas_fx(
    }

    scalebands( sidNoiseEst, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, sub( hFdCngCom->stopBand, hFdCngCom->startBand ), hFdCngCom->cngNoiseLevel, 1 );
    hFdCngCom->cngNoiseLevelExp = hFdCngCom->sidNoiseEstExp;
    Word16 shift1 = L_norm_arr( hFdCngCom->cngNoiseLevel, sub( hFdCngCom->stopBand, hFdCngCom->startBand ) );
    Word16 shift2 = L_norm_arr( hFdCngCom->cngNoiseLevel + sub( hFdCngCom->stopBand, hFdCngCom->startBand ), sub( FFTCLDFBLEN, sub( hFdCngCom->stopBand, hFdCngCom->startBand ) ) );
    Word16 shift = s_max( sub( hFdCngCom->sidNoiseEstExp, shift1 ), sub( hFdCngCom->cngNoiseLevelExp, shift2 ) );

    scale_sig32( hFdCngCom->cngNoiseLevel, sub( hFdCngCom->stopBand, hFdCngCom->startBand ), sub( sub( hFdCngCom->sidNoiseEstExp, shift1 ), shift ) );
    scale_sig32( hFdCngCom->cngNoiseLevel + sub( hFdCngCom->stopBand, hFdCngCom->startBand ), sub( FFTCLDFBLEN, sub( hFdCngCom->stopBand, hFdCngCom->startBand ) ), sub( sub( hFdCngCom->cngNoiseLevelExp, shift2 ), shift ) );

    hFdCngCom->cngNoiseLevelExp = shift;
    move16();

    lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, st->preemph_fac );
+6 −1
Original line number Diff line number Diff line
@@ -181,7 +181,12 @@ void ivas_ism_dtx_limit_noise_energy_for_near_silence_fx(
            cng_noise_nrg_obj_fx = dotp_fixed_o( hFdCngCom->cngNoiseLevel, hFdCngCom->cngNoiseLevel, cng_noise_level_len, 9, &Q_cng_noise_nrg_obj ); /*Resultant Q_cng_noise_nrg_obj= (Q_cng_noise_nrg_obj-x)<=31*/
            IF( GT_32( cng_noise_nrg_obj_fx, cng_noise_nrg_dominant_fx ) )
            {
                Word32 temp = divide3232( L_shr( cng_noise_nrg_dominant_fx, 1 ), cng_noise_nrg_obj_fx );   /*Stores value of cng_noise_nrg_dominant_fx/cng_noise_nrg_obj_fx*/
                Word32 temp = 0;
                move32();
                IF( L_shr( cng_noise_nrg_dominant_fx, 1 ) )
                {
                    temp = divide3232( L_shr( cng_noise_nrg_dominant_fx, 1 ), cng_noise_nrg_obj_fx ); /*Stores value of cng_noise_nrg_dominant_fx/cng_noise_nrg_obj_fx*/
                }
                Word16 Q_temp = add( sub( sub( Q_cng_noise_nrg_dominant, 1 ), Q_cng_noise_nrg_obj ), 15 ); /*Stores resultant Q after divide3232 operation above*/
                IF( EQ_16( Q_temp % 2, 1 ) )                                                               /*Making Q_temp even for sqrt function*/
                {
+18 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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++ )
    {
@@ -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();
@@ -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];
@@ -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 );
@@ -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();
+8 −5
Original line number Diff line number Diff line
@@ -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();
        }
+35 −4
Original line number Diff line number Diff line
@@ -666,14 +666,45 @@ ivas_error front_vad_spar_fx(

        old_pitch = st->pitch[1];
        move16();
        Scale_sig( wsp_fx, 368, sub( Q8, Q_inp_12k8 ) ); // Q8
        pitch_ol_ivas_fx( st->pitch, st->voicing_fx, &st->old_pitch, &st->old_corr_fx, corr_shift_fx, &st->old_thres_fx, &st->delta_pit, st->old_wsp2_fx, wsp_fx, st->mem_decim2_fx, relE_fx, st->clas, st->input_bwidth, st->Opt_SC_VBR, Q8 );
        Word16 shift, Q_wsp;
        Word16 shift1 = norm_arr( old_wsp_fx, L_WSP_MEM );
        Word16 shift2 = norm_arr( wsp_fx, L_WSP - L_WSP_MEM );
        maximum_abs_16_fx( old_wsp_fx, L_WSP_MEM, &shift );
        if ( !shift )
        {
            shift1 = Q15;
            move16();
        }
        maximum_abs_16_fx( wsp_fx, L_WSP - L_WSP_MEM, &shift );
        if ( !shift )
        {
            shift2 = Q15;
            move16();
        }

        shift = s_min( Q15, s_min( add( Q_inp_12k8, shift1 ), add( Q_inp_12k8, shift2 ) ) );
        shift = s_min( shift, add( norm_arr( st->mem_decim2_fx, 3 ), st->Q_old_wsp2 ) );
        shift = s_min( shift, add( norm_arr( st->old_wsp2_fx, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ), st->Q_old_wsp2 ) );

        scale_sig( old_wsp_fx, L_WSP_MEM, sub( shift, Q_inp_12k8 ) );
        scale_sig( wsp_fx, L_WSP - L_WSP_MEM, sub( shift, Q_inp_12k8 ) );

        Q_wsp = shift;
        move16();

        scale_sig( st->mem_decim2_fx, 3, sub( Q_wsp, st->Q_old_wsp2 ) );                                    // Q( mem_decim ) = Q( old_wsp2 )
        scale_sig( st->old_wsp2_fx, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM, sub( Q_wsp, st->Q_old_wsp2 ) ); // Q_wsp

        st->Q_old_wsp2 = Q_wsp;
        move16();

        pitch_ol_ivas_fx( st->pitch, st->voicing_fx, &st->old_pitch, &st->old_corr_fx, corr_shift_fx, &st->old_thres_fx, &st->delta_pit, st->old_wsp2_fx, wsp_fx, st->mem_decim2_fx, relE_fx, st->clas, st->input_bwidth, st->Opt_SC_VBR, Q_wsp );

        /* Updates for adaptive lag window memory */
        st->old_pitch_la = st->pitch[2]; /* Q0 */
        move16();
        Scale_sig( wsp_fx, 368, Q9 - Q8 ); /* Q9 */
        StableHighPitchDetect_ivas_fx( &flag_spitch, st->pitch, st->voicing_fx, wsp_fx, st->localVAD, &st->voicing_sm_fx, &st->voicing0_sm_fx, &st->LF_EnergyRatio_sm_fx, &st->predecision_flag, &st->diff_sm_fx, &st->energy_sm_fx, Q12, st->lgBin_E_fx );

        StableHighPitchDetect_ivas_fx( &flag_spitch, st->pitch, st->voicing_fx, wsp_fx, st->localVAD, &st->voicing_sm_fx, &st->voicing0_sm_fx, &st->LF_EnergyRatio_sm_fx, &st->predecision_flag, &st->diff_sm_fx, &st->energy_sm_fx, Q_wsp, st->lgBin_E_fx );
        IF( st->hSpMusClas != NULL )
        {
            Word16 dummy_int;
Loading