Commit 27e6f622 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Removed scalings before ProcessStereoIGF_fx in stereo_mdct_core_enc_fx and decoder MSAN fix

parent 58412847
Loading
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -10859,8 +10859,11 @@ void ProcessStereoIGF_fx(
    Word16 q_pITFMDCTSpectrum_1,
    Word16 q_pITFMDCTSpectrum_2,
    Word32 *pPowerSpectrum_fx[CPE_CHANNELS],              /* i/o: MDCT^2 + MDST^2 spectrum, or estimate   */
    Word16 exp_pPowerSpectrum_fx[CPE_CHANNELS],           /* i/o: exp of pPowerSpectrum_fx                */
    Word32 *pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i  : inverse power spectrum                  */
    Word16 exp_pPowerSpectrumMsInv_fx[CPE_CHANNELS],      /* i/o: exp of pPowerSpectrumMsInv_fx           */
    Word32 *inv_spectrum_fx[CPE_CHANNELS][NB_DIV],        /* i  : inverse spectrum                        */
    Word16 exp_inv_spectrum_fx[CPE_CHANNELS],             /* i/o: exp of inv_spectrum_fx                  */
    const Word16 frameno,                                 /* i  : flag indicating index of current subfr. */
    const Word16 sp_aud_decision0,                        /* i  : sp_aud_decision0                        */
    const Word32 element_brate,                           /* i  : element bitrate                         */
@@ -10873,8 +10876,11 @@ void IGFEncApplyStereo_fx(
    const Word16 igfGridIdx,                              /* i  : IGF grid index                          */
    Encoder_State *sts[CPE_CHANNELS],                     /* i  : Encoder state                           */
    Word32 *pPowerSpectrum_fx[CPE_CHANNELS],              /* i/o: MDCT^2 + MDST^2 spectrum, or estimate   */
    Word16 exp_pPowerSpectrum_fx[CPE_CHANNELS],           /* i/o: exp of pPowerSpectrum_fx                */
    Word32 *pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i/o: inverse power spectrum                  */
    Word16 exp_pPowerSpectrumMsInv_fx[CPE_CHANNELS],      /* i/o: exp of pPowerSpectrumMsInv_fx           */
    Word32 *inv_spectrum_fx[CPE_CHANNELS][NB_DIV],        /* i  : inverse spectrum                        */
    Word16 exp_inv_spectrum_fx[CPE_CHANNELS],             /* i  : exp of inverse spectrum                 */
    const Word16 frameno,                                 /* i  : flag indicating index of current subfr. */
    const Word16 sp_aud_decision0,                        /* i  : sp_aud_decision0                        */
    const Word32 element_brate,                           /* i  : element bitrate                         */
+5 −0
Original line number Diff line number Diff line
@@ -138,6 +138,11 @@ ivas_error ivas_osba_dirac_td_binaural_jbm_fx(
    Word32 *p_sepobj_fx[BINAURAL_CHANNELS];
    Word16 channel_offset;

    FOR( Word16 i = 0; i < BINAURAL_CHANNELS; i++ )
    {
        set32_fx( output_separated_objects_fx[i], 0, L_FRAME48k );
    }

    FOR( n = 0; n < BINAURAL_CHANNELS; n++ )
    {
        p_sepobj_fx[n] = &output_separated_objects_fx[n][0];
+8 −3
Original line number Diff line number Diff line
@@ -2626,8 +2626,11 @@ void IGFEncApplyStereo_fx(
    const Word16 igfGridIdx,                              /* i  : IGF grid index                          */
    Encoder_State *sts[CPE_CHANNELS],                     /* i  : Encoder state                           */
    Word32 *pPowerSpectrum_fx[CPE_CHANNELS],              /* i/o: MDCT^2 + MDST^2 spectrum, or estimate   */
    Word16 exp_pPowerSpectrum_fx[CPE_CHANNELS],           /* i/o: exp of pPowerSpectrum_fx                */
    Word32 *pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i/o: inverse power spectrum                  */
    Word16 exp_pPowerSpectrumMsInv_fx[CPE_CHANNELS],      /* i/o: exp of pPowerSpectrumMsInv_fx           */
    Word32 *inv_spectrum_fx[CPE_CHANNELS][NB_DIV],        /* i  : inverse spectrum                        */
    Word16 exp_inv_spectrum_fx[CPE_CHANNELS],             /* i  : exp of inverse spectrum                 */
    const Word16 frameno,                                 /* i  : flag indicating index of current subfr. */
    const Word16 sp_aud_decision0,                        /* i  : sp_aud_decision0                        */
    const Word32 element_brate,                           /* i  : element bitrate                         */
@@ -2691,7 +2694,9 @@ void IGFEncApplyStereo_fx(
        last_core_acelp = extract_l( EQ_16( sts[ch]->last_core, ACELP_CORE ) );

        IGF_UpdateInfo( hIGFEnc[ch], igfGridIdx );
        IGF_CalculateStereoEnvelope_fx( hIGFEnc[ch], sts[ch]->hTcxEnc->spectrum_fx[frameno], sts[ch]->hTcxEnc->spectrum_e[frameno], inv_spectrum_fx[ch][frameno], sts[ch]->hTcxEnc->spectrum_e[frameno], pPowerSpectrumParameter_fx[ch], sts[ch]->hTcxEnc->spectrum_e[frameno], pPowerSpectrumParameterMsInv_fx[ch], sts[ch]->hTcxEnc->spectrum_e[frameno], igfGridIdx, coreMsMask, sts[ch]->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp );
        IGF_CalculateStereoEnvelope_fx( hIGFEnc[ch], sts[ch]->hTcxEnc->spectrum_fx[frameno], sts[ch]->hTcxEnc->spectrum_e[frameno], inv_spectrum_fx[ch][frameno],
                                        exp_inv_spectrum_fx[ch], pPowerSpectrumParameter_fx[ch], exp_pPowerSpectrum_fx[ch], pPowerSpectrumParameterMsInv_fx[ch],
                                        exp_pPowerSpectrumMsInv_fx[ch], igfGridIdx, coreMsMask, sts[ch]->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp );

        IF( EQ_16( sts[ch]->core, TCX_20_CORE ) )
        {
@@ -2702,11 +2707,11 @@ void IGFEncApplyStereo_fx(
            pPowerSpectrumParameter_fx[ch] = NULL;
        }

        set16_fx( exp_pPowerSpectrum, sts[ch]->hTcxEnc->spectrum_e[frameno], L_FRAME48k );
        set16_fx( exp_pPowerSpectrum, exp_pPowerSpectrum_fx[ch], L_FRAME48k );

        IGF_Whitening_ivas_fx( hIGFEnc[ch], pPowerSpectrumParameter_fx[ch], &exp_pPowerSpectrum[0], igfGridIdx, sts[ch]->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp, ( sts[0]->hTcxEnc->fUseTns[frameno] || sts[1]->hTcxEnc->fUseTns[frameno] ), sp_aud_decision0, element_brate, sts[ch]->element_mode );

        IGF_ErodeSpectrum_ivas_fx( hIGFEnc[ch], sts[ch]->hTcxEnc->spectrum_fx[frameno], pPowerSpectrumParameter_fx[ch], sts[ch]->hTcxEnc->spectrum_e[frameno], igfGridIdx, mct_on );
        IGF_ErodeSpectrum_ivas_fx( hIGFEnc[ch], sts[ch]->hTcxEnc->spectrum_fx[frameno], pPowerSpectrumParameter_fx[ch], exp_pPowerSpectrum_fx[ch], igfGridIdx, mct_on );
    }
    return;
}
+7 −5
Original line number Diff line number Diff line
@@ -1072,7 +1072,7 @@ void mctStereoIGF_enc_fx(
            IF( NE_16( hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[n], hMCT->hBlockData[b]->hStereoMdct->IGFStereoMode[n] ) ||
                EQ_16( hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[n], SMDCT_BW_MS ) )
            {

                Word16 exp_powerSpec_tmp[CPE_CHANNELS];
                FOR( ch = 0; ch < CPE_CHANNELS; ch++ )
                {
                    s = s_min( s, sub( 31, p_st[ch]->hTcxEnc->spectrum_e[n] ) );
@@ -1095,10 +1095,12 @@ void mctStereoIGF_enc_fx(
                    move16();
                    move16();
                }

                ProcessStereoIGF_fx( hMCT->hBlockData[b]->hStereoMdct, p_st, hMCT->hBlockData[b]->mask,
                                     p_orig_spectrum_fx, q_origSpec, q_origSpec,
                                     p_powerSpec_fx, p_powerSpecMsInv_fx, p_inv_spectrum_fx, n, sp_aud_decision0[ch1], p_st[0]->total_brate, 1 );
                exp_powerSpec_tmp[0] = p_st[0]->hTcxEnc->spectrum_e[0];
                exp_powerSpec_tmp[1] = p_st[1]->hTcxEnc->spectrum_e[0];
                move16();
                move16();
                ProcessStereoIGF_fx( hMCT->hBlockData[b]->hStereoMdct, p_st, hMCT->hBlockData[b]->mask, p_orig_spectrum_fx, q_origSpec, q_origSpec, p_powerSpec_fx, exp_powerSpec_tmp,
                                     p_powerSpecMsInv_fx, exp_powerSpec_tmp, p_inv_spectrum_fx, exp_powerSpec_tmp, n, sp_aud_decision0[ch1], p_st[0]->total_brate, 1 );
            }
            ELSE
            {
+20 −48
Original line number Diff line number Diff line
@@ -143,6 +143,7 @@ void stereo_mdct_core_enc_fx(
    Word32 *quantized_spectrum_fx[CPE_CHANNELS][NB_DIV];
    Word32 *inv_mdst_spectrum_fx[CPE_CHANNELS][NB_DIV];
    Word32 *inv_spectrum_fx[CPE_CHANNELS][NB_DIV];
    Word16 exp_inv_spectrum[CPE_CHANNELS];
    Word16 i, ch, nSubframes, L_subframeTCX;
    Word16 n, nAvailBits;
    Word16 tnsSize[CPE_CHANNELS][NB_DIV];          /* number of tns parameters put into prm */
@@ -151,8 +152,8 @@ void stereo_mdct_core_enc_fx(
    Word32 *p_mdst_spectrum_long_fx[CPE_CHANNELS];
    Word32 mdst_spectrum_long_fx[CPE_CHANNELS][N_MAX];
    Word32 *mdst_spectrum_fx[CPE_CHANNELS][NB_DIV];
    Word16 q_powSpecMsInv[MCT_MAX_CHANNELS], q_spec, tmp_s;
    Word16 tmp_q_powSpec[N_MAX], tmp_q_powSpecInv[N_MAX], *tmp_q_psi[2];
    Word16 exp_powSpecMsInv[MCT_MAX_CHANNELS], q_spec, tmp_s;
    Word16 tmp_q_powSpecInv[N_MAX], *tmp_q_psi[2];
    Word64 W_tmp;
    Encoder_State *st, **sts;
    STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct;
@@ -186,8 +187,6 @@ void stereo_mdct_core_enc_fx(
    }

    set16_fx( tmp_q_powSpecInv, 63, N_MAX );
    set16_fx( tmp_q_powSpec, 63, N_MAX );
    set16_fx( q_powSpecMsInv, 31, MCT_MAX_CHANNELS );

    tmp_q_psi[0] = tmp_q_powSpecInv;
    tmp_q_psi[1] = &tmp_q_powSpecInv[N_TCX10_MAX];
@@ -398,6 +397,9 @@ void stereo_mdct_core_enc_fx(
            }
        }
        stereo_coder_tcx_fx( hStereoMdct, sts, ms_mask, mdst_spectrum_fx, inv_spectrum_fx, inv_mdst_spectrum_fx, 0, q_spec );
        exp_inv_spectrum[0] = exp_inv_spectrum[1] = sub( Q31, q_spec );
        move16();
        move16();
    }

    /*--------------------------------------------------------------*
@@ -516,16 +518,15 @@ void stereo_mdct_core_enc_fx(

        /* Aligning the Q-factors */
        {
            q_powSpecMsInv[ch] = Q31;
            Word16 q_temp = Q31;
            move16();
            FOR( n = 0; n < nSubframes; n++ )
            {
                FOR( i = 0; i < L_subframeTCX; i++ )
                {
                    IF( powerSpecMsInv_fx[ch][n][i] != 0 )
                    if ( powerSpecMsInv_fx[ch][n][i] != 0 )
                    {
                        q_powSpecMsInv[ch] = s_min( q_powSpecMsInv[ch], tmp_q_psi[n][i] );
                        move16();
                        q_temp = s_min( q_temp, tmp_q_psi[n][i] );
                    }
                }
            }
@@ -533,10 +534,12 @@ void stereo_mdct_core_enc_fx(
            {
                FOR( i = 0; i < L_subframeTCX; i++ )
                {
                    powerSpecMsInv_fx[ch][n][i] = L_shr_sat( powerSpecMsInv_fx[ch][n][i], sub( tmp_q_psi[n][i], q_powSpecMsInv[ch] ) );
                    powerSpecMsInv_fx[ch][n][i] = L_shr_sat( powerSpecMsInv_fx[ch][n][i], sub( tmp_q_psi[n][i], q_temp ) );
                    move32();
                }
            }
            exp_powSpecMsInv[ch] = sub( Q31, q_temp );
            move16();
        }
    }

@@ -605,7 +608,7 @@ void stereo_mdct_core_enc_fx(
                {
                    IGF_ENC_INSTANCE_HANDLE hIGFEnc[CPE_CHANNELS];
                    Word32 powerSpec_fx[CPE_CHANNELS][N_MAX], *p_powerSpec_fx[CPE_CHANNELS];
                    Word16 q_powSpec[CPE_CHANNELS];
                    Word16 exp_powSpec[CPE_CHANNELS];
                    p_powerSpec_fx[0] = powerSpec_fx[0];
                    p_powerSpec_fx[1] = powerSpec_fx[1];
                    {
@@ -642,52 +645,21 @@ void stereo_mdct_core_enc_fx(
                                }
                            }
                            set32_fx( powerSpec_fx[ch] + length, 0, sub( N_MAX, length ) );
                            q_powSpec[ch] = sub( 31, exp ); // exp: exp
                            exp_powSpec[ch] = exp; // exp: exp
                            move16();
                        }
                    }

                    hIGFEnc[0] = sts[0]->hIGFEnc;
                    hIGFEnc[1] = sts[1]->hIGFEnc;

                    FOR( ch = 0; ch < CPE_CHANNELS; ch++ )
                    {
                        q_spec = sub( Q31, sts[ch]->hTcxEnc->spectrum_e[n] );
                        Word16 q_comm = s_min( sub( Q31, sts[ch]->hTcxEnc->spectrum_e[n] ), s_min( q_powSpec[ch], q_powSpecMsInv[ch] ) );
                        Word16 n_sb = NB_DIV;
                        move16();
                        if ( EQ_16( sts[ch]->hTcxEnc->tcxMode, TCX_20 ) )
                        {
                            n_sb = 1;
                            move16();
                        }
                        length = idiv1616( sts[ch]->hTcxEnc->L_frameTCX, n_sb ); /* Q0 */
                        IF( NE_16( q_spec, q_comm ) )
                        {
                            Scale_sig32( sts[ch]->hTcxEnc->spectrum_fx[n], length, sub( q_comm, q_spec ) ); /* q_powSpec */
                            Scale_sig32( inv_spectrum_fx[ch][n], length, sub( q_comm, q_spec ) );           /* q_powSpec */
                            sts[ch]->hTcxEnc->spectrum_e[n] = sub( Q31, q_comm );
                            move16();
                        }
                        IF( NE_16( q_powSpec[ch], q_comm ) )
                        {
                            Scale_sig32( &p_powerSpec_fx[ch][0], L_subframeTCX, sub( q_comm, q_powSpec[ch] ) ); /* q_spec */
                            q_powSpec[ch] = q_comm;
                            move16();
                        }
                        IF( NE_16( q_powSpecMsInv[ch], q_comm ) )
                        {
                            Scale_sig32( powerSpecMsInv_fx[ch][0], L_subframeTCX, sub( q_comm, q_powSpecMsInv[ch] ) ); /* q_spec */
                            q_powSpecMsInv[ch] = q_comm;
                            move16();
                        }
                    }
                    hIGFEnc[0]->spec_be_igf_e = p_orig_spectrum_e[0];
                    move16();
                    hIGFEnc[1]->spec_be_igf_e = p_orig_spectrum_e[1];
                    move16();
                    ProcessStereoIGF_fx( hStereoMdct, sts, ms_mask,
                                         orig_spectrum_fx, sub( Q31, p_orig_spectrum_e[0] ), sub( Q31, p_orig_spectrum_e[1] ),
                                         p_powerSpec_fx, powerSpecMsInv_fx, inv_spectrum_fx, n, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->element_brate, 0 );
                    move16();

                    ProcessStereoIGF_fx( hStereoMdct, sts, ms_mask, orig_spectrum_fx, sub( Q31, p_orig_spectrum_e[0] ), sub( Q31, p_orig_spectrum_e[1] ),
                                         p_powerSpec_fx, exp_powSpec, powerSpecMsInv_fx, exp_powSpecMsInv, inv_spectrum_fx, exp_inv_spectrum,
                                         n, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->element_brate, 0 );
                }
                ELSE
                {
Loading