Commit 24ee18a5 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Fix for crash in stereo_dtf_cng

parent 0a46a2b5
Loading
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1988,7 +1988,8 @@ void stereo_dtf_cng_fx(
    CPE_DEC_HANDLE hCPE,                         /* i/o: CPE decoder structure    */
    const Word32 ivas_total_brate,              /* i  : IVAS total bitrate       */
    Word32 DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers              */
    const Word16 output_frame                   /* i  : output frame size        */
    const Word16 output_frame,                  /* i  : output frame size        */
    Word16 q_dft                   /* i  : Q factor of the DFT data         */
);

#endif // IVAS_FLOAT_FIXED
+28 −25
Original line number Diff line number Diff line
@@ -713,9 +713,9 @@ ivas_error ivas_cpe_dec_fx(
                Word32 output_fix[L_FRAME8k];
                hCPE->hStereoDft->q_res_cod_mem_fx = 0; // keeping same as shift needed inside.
                floatToFixed_arrL(hCPE->hStereoDft->res_cod_mem, hCPE->hStereoDft->res_cod_mem_fx, Q16, sizeof(hCPE->hStereoDft->res_cod_mem_fx) / sizeof(hCPE->hStereoDft->res_cod_mem_fx[0]));
                floatToFixed_arr(hCPE->hStereoDft->hBpf->pst_old_syn, hCPE->hStereoDft->hBpf->pst_old_syn_fx, 0, sizeof(hCPE->hStereoDft->hBpf->pst_old_syn_fx) / sizeof(hCPE->hStereoDft->hBpf->pst_old_syn_fx[0]));
                floatToFixed_arr(hCPE->hStereoDft->hBpf->mem_mean_pit, hCPE->hStereoDft->hBpf->mem_mean_pit_fx, Q4, sizeof(hCPE->hStereoDft->hBpf->mem_mean_pit) / sizeof(hCPE->hStereoDft->hBpf->mem_mean_pit[0]));
                floatToFixed_arr(hCPE->hCoreCoder[0]->old_pitch_buf, hCPE->hCoreCoder[0]->old_pitch_buf_16_fx, Q6, sizeof(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx) / sizeof(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx[0]));
                //floatToFixed_arr(hCPE->hStereoDft->hBpf->pst_old_syn, hCPE->hStereoDft->hBpf->pst_old_syn_fx, 0, sizeof(hCPE->hStereoDft->hBpf->pst_old_syn_fx) / sizeof(hCPE->hStereoDft->hBpf->pst_old_syn_fx[0]));
                //floatToFixed_arr(hCPE->hStereoDft->hBpf->mem_mean_pit, hCPE->hStereoDft->hBpf->mem_mean_pit_fx, Q4, sizeof(hCPE->hStereoDft->hBpf->mem_mean_pit) / sizeof(hCPE->hStereoDft->hBpf->mem_mean_pit[0]));
                //floatToFixed_arr(hCPE->hCoreCoder[0]->old_pitch_buf, hCPE->hCoreCoder[0]->old_pitch_buf_16_fx, Q6, sizeof(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx) / sizeof(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx[0]));
                hCPE->hStereoDft->hBpf->psf_att_fx = (Word16)floatToFixed(hCPE->hStereoDft->hBpf->psf_att, Q15);
                hCPE->hStereoDft->stab_fac_smooth_res_fx = (Word16)floatToFixed(hCPE->hStereoDft->stab_fac_smooth_res, Q15);

@@ -723,9 +723,9 @@ ivas_error ivas_cpe_dec_fx(

                hCPE->hStereoDft->stab_fac_smooth_res = fixedToFloat(hCPE->hStereoDft->stab_fac_smooth_res_fx, Q15);
                hCPE->hStereoDft->hBpf->psf_att = fixedToFloat(hCPE->hStereoDft->hBpf->psf_att_fx, Q15);
                fixedToFloat_arr(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx, hCPE->hCoreCoder[0]->old_pitch_buf, Q6, sizeof(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx) / sizeof(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx[0]));
                fixedToFloat_arr(hCPE->hStereoDft->hBpf->mem_mean_pit_fx, hCPE->hStereoDft->hBpf->mem_mean_pit, Q4, sizeof(hCPE->hStereoDft->hBpf->mem_mean_pit) / sizeof(hCPE->hStereoDft->hBpf->mem_mean_pit[0]));
                fixedToFloat_arr(hCPE->hStereoDft->hBpf->pst_old_syn_fx, hCPE->hStereoDft->hBpf->pst_old_syn, 0, sizeof(hCPE->hStereoDft->hBpf->pst_old_syn_fx) / sizeof(hCPE->hStereoDft->hBpf->pst_old_syn_fx[0]));
                //fixedToFloat_arr(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx, hCPE->hCoreCoder[0]->old_pitch_buf, Q6, sizeof(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx) / sizeof(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx[0]));
                //fixedToFloat_arr(hCPE->hStereoDft->hBpf->mem_mean_pit_fx, hCPE->hStereoDft->hBpf->mem_mean_pit, Q4, sizeof(hCPE->hStereoDft->hBpf->mem_mean_pit) / sizeof(hCPE->hStereoDft->hBpf->mem_mean_pit[0]));
                //fixedToFloat_arr(hCPE->hStereoDft->hBpf->pst_old_syn_fx, hCPE->hStereoDft->hBpf->pst_old_syn, 0, sizeof(hCPE->hStereoDft->hBpf->pst_old_syn_fx) / sizeof(hCPE->hStereoDft->hBpf->pst_old_syn_fx[0]));
                fixedToFloat_arrL(hCPE->hStereoDft->res_cod_mem_fx, hCPE->hStereoDft->res_cod_mem, Q16, sizeof(hCPE->hStereoDft->res_cod_mem_fx) / sizeof(hCPE->hStereoDft->res_cod_mem_fx[0]));
                fixedToFloat_arrL(&output_fix[0], output_flt[1], Q15, L_FRAME8k);
            }
@@ -739,6 +739,7 @@ ivas_error ivas_cpe_dec_fx(
        stereo_dtf_cng( hCPE, ivas_total_brate, DFT, output_frame );
#else
        {
            Word16 q_dft, q_smoothed_psd;
            float max_val = 0.0;
            int i_max_val =0, i_max_val_psd = 0;
            for (int ii = 0; ii < sizeof(DFT) / sizeof(DFT[0]); ii++)
@@ -762,34 +763,35 @@ ivas_error ivas_cpe_dec_fx(
            i_max_val_psd =  (int)max_val;
            sts[0]->hFdCngDec->q_smoothed_psd = norm_l(i_max_val_psd) - Q4;
            i_max_val =  (int)max_val;
            hCPE->hStereoDft->q_dft = norm_l(i_max_val);
            IF (hCPE->hStereoDft->q_dft > Q8)
            {
                hCPE->hStereoDft->q_dft = Q8;
            }
            q_dft = s_min(Q8, norm_l(i_max_val));
            //hCPE->hStereoDft->q_dft = norm_l(i_max_val);
            //IF (hCPE->hStereoDft->q_dft > Q8)
            //{
            //    hCPE->hStereoDft->q_dft = Q8;
            //}
            floatToFixed_arrL(sts[0]->hFdCngDec->bandNoiseShape_float, sts[0]->hFdCngDec->bandNoiseShape, Q31 - sts[0]->hFdCngDec->bandNoiseShape_exp, FFTLEN2);
            floatToFixed_arrL(&DFT[0][0], &DFT_fx[0][0], hCPE->hStereoDft->q_dft, sizeof(DFT) / sizeof(DFT[0][0]));
            floatToFixed_arr(&hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG[0], &hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG_fx[0], Q15, sizeof(hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG_fx) / sizeof(hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG_fx[0]));
            floatToFixed_arrL(&DFT[0][0], &DFT_fx[0][0], q_dft, sizeof(DFT) / sizeof(DFT[0][0]));
            //floatToFixed_arr(&hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG[0], &hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG_fx[0], Q15, sizeof(hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG_fx) / sizeof(hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG_fx[0]));
            floatToFixed_arr(&hCPE->hStereoCng->cm[0], &hCPE->hStereoCng->cm_fx[0], Q15, sizeof( hCPE->hStereoCng->cm_fx ) / sizeof( hCPE->hStereoCng->cm_fx[0] ) );
            floatToFixed_arr(&hCPE->hStereoCng->coh[0], &hCPE->hStereoCng->coh_fx[0], Q15, sizeof(hCPE->hStereoCng->coh_fx) / sizeof(hCPE->hStereoCng->coh_fx[0]) );
            floatToFixed_arr(&hCPE->hStereoDft->g_state[0], &hCPE->hStereoDft->g_state_fx[0], Q15, sizeof(hCPE->hStereoDft->g_state_fx) / sizeof(hCPE->hStereoDft->g_state_fx[0]));
            floatToFixed_arrL(&sts[0]->hFdCngDec->smoothed_psd[0], &sts[0]->hFdCngDec->smoothed_psd_fx[0], sts[0]->hFdCngDec->q_smoothed_psd, sizeof(sts[0]->hFdCngDec->smoothed_psd_fx) / sizeof(sts[0]->hFdCngDec->smoothed_psd_fx[0]));
            //floatToFixed_arrL(&hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel_flt[0],
            //                  &hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel[0],
            //                  0,
            //                  FFTCLDFBLEN);
            hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->q_cngNoiseLevel = Q31 - hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp;
            sts[0]->lp_noise = floatToFixed(sts[0]->lp_noise_float, Q23);
            hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->q_cngNoiseLevel = s_max(0, Q31 - hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp);
            floatToFixed_arrL(&hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel_flt[0],
                              &hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel[0],
                              hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->q_cngNoiseLevel,
                              FFTCLDFBLEN);
            //sts[0]->lp_noise = floatToFixed(sts[0]->lp_noise_float, Q23);
            hCPE->hCoreCoder[0]->hFdCngDec->lp_noise = floatToFixed(hCPE->hCoreCoder[0]->hFdCngDec->lp_noise_float, Q23);
            hCPE->hCoreCoder[0]->hFdCngDec->lp_speech = floatToFixed(hCPE->hCoreCoder[0]->hFdCngDec->lp_speech_float, Q23);
        }
            floatToFixed_arrL(&hCPE->hStereoDft->side_gain[0], &hCPE->hStereoDft->side_gain_fx[0], 31, STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX);

        stereo_dtf_cng_fx( hCPE, ivas_total_brate, DFT_fx, output_frame );
        stereo_dtf_cng_fx( hCPE, ivas_total_brate, DFT_fx, output_frame, q_dft);

        {
            fixedToFloat_arrL(&hCPE->hStereoDft->side_gain_fx[0], &hCPE->hStereoDft->side_gain[0], 31, STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX);
            hCPE->hCoreCoder[0]->hFdCngDec->lp_speech_float = fixedToFloat(hCPE->hCoreCoder[0]->hFdCngDec->lp_speech, Q23);
            hCPE->hCoreCoder[0]->hFdCngDec->lp_noise_float = fixedToFloat(hCPE->hCoreCoder[0]->hFdCngDec->lp_noise, Q23);
            sts[0]->lp_noise_float = fixedToFloat(sts[0]->lp_noise, Q23);
            //sts[0]->lp_noise_float = fixedToFloat(sts[0]->lp_noise, Q23);
            fixedToFloat_arrL(&hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel[0],
                              &hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel_flt[0],
                              hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->q_cngNoiseLevel,
@@ -798,8 +800,9 @@ ivas_error ivas_cpe_dec_fx(
            fixedToFloat_arr(&hCPE->hStereoDft->g_state_fx[0], &hCPE->hStereoDft->g_state[0], Q15, sizeof(hCPE->hStereoDft->g_state_fx) / sizeof(hCPE->hStereoDft->g_state_fx[0]));
            fixedToFloat_arr(&hCPE->hStereoCng->coh_fx[0], &hCPE->hStereoCng->coh[0], Q15, sizeof(hCPE->hStereoCng->coh_fx) / sizeof(hCPE->hStereoCng->coh_fx[0]) );
            fixedToFloat_arr( &hCPE->hStereoCng->cm_fx[0], &hCPE->hStereoCng->cm[0], Q15, sizeof( hCPE->hStereoCng->cm_fx ) / sizeof( hCPE->hStereoCng->cm_fx[0] ) );
            fixedToFloat_arr(&hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG_fx[0], &hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG[0], Q15, sizeof(hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG) / sizeof(hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG[0]));
            fixedToFloat_arrL(&DFT_fx[0][0], &DFT[0][0], hCPE->hStereoDft->q_dft, sizeof(DFT) / sizeof(DFT[0][0]));
            //fixedToFloat_arr(&hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG_fx[0], &hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG[0], Q15, sizeof(hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG) / sizeof(hCPE->hCoreCoder[0]->hTdCngDec->shb_lpcCNG[0]));
            fixedToFloat_arrL(sts[0]->hFdCngDec->bandNoiseShape, sts[0]->hFdCngDec->bandNoiseShape_float, Q31 - sts[0]->hFdCngDec->bandNoiseShape_exp, FFTLEN2);
            fixedToFloat_arrL(&DFT_fx[0][0], &DFT[0][0], q_dft, sizeof(DFT) / sizeof(DFT[0][0]));
        }
#endif

+110 −34

File changed.

Preview size limit exceeded, changes collapsed.