Commit 7d24206b authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch '3gpp_issue_1185_fix' into 'main'

Fix for 3GPP issue 1185: Decoder: Assert in fft30_with_cmplx_data()

See merge request !1001
parents dda3192a ad475b06
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -122,4 +122,5 @@
#define FIX_ISSUE_1187                          /* Ittiam: Fix for issue 1187: Assertion error observed in evs_enc_fx (with option stereo_dmx_evs) from bass_pf_enc_fx function*/
#define FIX_ISSUE_1186                          /* Ittiam: Fix for Issue 1186: Energy/scaling issue for ISM-1 at all bitrates */
#define FIX_ISSUE_1165                          /* Ittiam: Fix for issue 1165: Assertion in lpc2lsp_fx for OMASA LTV input */
#define FIX_ISSUE_1185                          /* Ittiam: Fix for issue 1185: Assertion in ivas_dirac_dec_binaural_internal_fx() for crash in decoder in fft30_with_cmplx_data()*/
#endif
+30 −4
Original line number Diff line number Diff line
@@ -802,8 +802,30 @@ static void ivas_dirac_dec_binaural_internal_fx(

        IF( hDiracDecBin->useTdDecorr )
        {
#ifdef FIX_ISSUE_1185
            Word32 tmp_arr[60];
#endif
            FOR( ch = BINAURAL_CHANNELS; ch < ( 2 * BINAURAL_CHANNELS ); ch++ )
            {
#ifdef FIX_ISSUE_1185
                q_cldfb[ch][slot] = sub( q_input, 1 );
                move16();

                Copy_Scale_sig32( &( st_ivas->hTcBuffer->tc_fx[ch][nBins * slot + offsetSamples] ), tmp_arr, 60, -1 );
                scale_sig32( st_ivas->cldfbAnaDec[ch]->cldfb_state_fx, sub( st_ivas->cldfbAnaDec[ch]->p_filter_length, st_ivas->cldfbAnaDec[ch]->no_channels ), sub( sub( q_input, 1 ), st_ivas->cldfbAnaDec[ch]->Q_cldfb_state ) );
                st_ivas->cldfbAnaDec[ch]->Q_cldfb_state = sub( q_input, 1 );
                move16();

                cldfbAnalysis_ts_fx_fixed_q(
                    tmp_arr,
                    Cldfb_RealBuffer_in_fx[ch][slot],
                    Cldfb_ImagBuffer_in_fx[ch][slot],
                    nBins, st_ivas->cldfbAnaDec[ch], &q_cldfb[ch][slot] );

                scale_sig32( st_ivas->cldfbAnaDec[ch]->cldfb_state_fx, sub( st_ivas->cldfbAnaDec[ch]->p_filter_length, st_ivas->cldfbAnaDec[ch]->no_channels ), sub( q_input, st_ivas->cldfbAnaDec[ch]->Q_cldfb_state ) );
                st_ivas->cldfbAnaDec[ch]->Q_cldfb_state = q_input;
                move16();
#else
                q_cldfb[ch][slot] = q_input;
                move16();
                cldfbAnalysis_ts_fx_fixed_q(
@@ -811,6 +833,8 @@ static void ivas_dirac_dec_binaural_internal_fx(
                    Cldfb_RealBuffer_in_fx[ch][slot],
                    Cldfb_ImagBuffer_in_fx[ch][slot],
                    nBins, st_ivas->cldfbAnaDec[ch], &q_cldfb[ch][slot] );
#endif /*FIX_ISSUE_1185*/

                test();
                test();
                IF( EQ_16( config_data.nchan_transport, 1 ) &&
@@ -851,6 +875,10 @@ static void ivas_dirac_dec_binaural_internal_fx(
        {
            scale_sig32( Cldfb_RealBuffer_in_fx[cha][slot], 60, sub( q_inp, q_cldfb[cha][slot] ) ); // Q6
            scale_sig32( Cldfb_ImagBuffer_in_fx[cha][slot], 60, sub( q_inp, q_cldfb[cha][slot] ) ); // Q6
#ifdef FIX_ISSUE_1185
            q_cldfb[cha][slot] = 6;
            move16();
#endif
        }
    }

@@ -882,8 +910,7 @@ static void ivas_dirac_dec_binaural_internal_fx(
    }

    test();
    ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices_fx( hDiracDecBin, hSpatParamRendCom, &config_data, Cldfb_RealBuffer_in_fx, Cldfb_ImagBuffer_in_fx, Rmat_fx, subframe,
                                                                               hCombinedOrientationData && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] > 0, st_ivas->hMasaIsmData, q_inp );
    ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices_fx( hDiracDecBin, hSpatParamRendCom, &config_data, Cldfb_RealBuffer_in_fx, Cldfb_ImagBuffer_in_fx, Rmat_fx, subframe, hCombinedOrientationData && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] > 0, st_ivas->hMasaIsmData, q_inp );

    IF( EQ_32( config_data.ivas_format, ISM_FORMAT ) )
    {
@@ -921,8 +948,7 @@ static void ivas_dirac_dec_binaural_internal_fx(
        move16();
    }

    ivas_dirac_dec_binaural_determine_processing_matrices_fx( hDiracDecBin, hSpatParamRendCom, &config_data, max_band_decorr, Rmat_fx, subframe,
                                                              hCombinedOrientationData && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] > 0, nchanSeparateChannels, st_ivas->hMasaIsmData );
    ivas_dirac_dec_binaural_determine_processing_matrices_fx( hDiracDecBin, hSpatParamRendCom, &config_data, max_band_decorr, Rmat_fx, subframe, hCombinedOrientationData && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] > 0, nchanSeparateChannels, st_ivas->hMasaIsmData );

    q_inp = Q6;
    move16();