Commit 2183f309 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Fix for crash observed in dirac_decoder_binaural

[x] Fix for crash obsered with function in ivas_dirac_dec_binaural_functions.c
[x] Build issue dependency for EVS_FLOAT macro fix
parent b0ff6f31
Loading
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -717,7 +717,7 @@ ivas_error ivas_cpe_dec_fx(
                //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->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);

                Copy_Scale_sig_32_16(hCPE->hCoreCoder[0]->old_pitch_buf_fx, hCPE->hCoreCoder[0]->old_pitch_buf_16_fx, 2 * NB_SUBFR16k + 2, -10);
@@ -727,7 +727,7 @@ ivas_error ivas_cpe_dec_fx(
                Copy_Scale_sig_16_32(hCPE->hCoreCoder[0]->old_pitch_buf_16_fx, hCPE->hCoreCoder[0]->old_pitch_buf_fx, 2 * NB_SUBFR16k + 2, 10);

                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);
                //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]));
@@ -787,15 +787,15 @@ ivas_error ivas_cpe_dec_fx(
                              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);
            //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, 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);
            //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);
            fixedToFloat_arrL(&hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel[0],
                              &hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel_flt[0],
+31 −31
Original line number Diff line number Diff line
@@ -1229,20 +1229,20 @@ static void ivas_dirac_dec_binaural_internal(
    {
        FOR( slot = 0; slot < BINAURAL_CHANNELS; slot++ )
        {
            floatToFixed_arr16( hDiracDecBin->processMtxDecRe[ch][slot], hDiracDecBin->processMtxDecRe_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecIm[ch][slot], hDiracDecBin->processMtxDecIm_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecRePrev[ch][slot], hDiracDecBin->processMtxDecRePrev_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecImPrev[ch][slot], hDiracDecBin->processMtxDecImPrev_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecRe[ch][slot], hDiracDecBin->processMtxDecRe_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecIm[ch][slot], hDiracDecBin->processMtxDecIm_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecRePrev[ch][slot], hDiracDecBin->processMtxDecRePrev_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecImPrev[ch][slot], hDiracDecBin->processMtxDecImPrev_fx[ch][slot], Q11, nBins );
        }
    }
    FOR( ch = 0; ch < BINAURAL_CHANNELS; ch++ )
    {
        FOR( slot = 0; slot < 4; slot++ )
        {
            floatToFixed_arr16( hDiracDecBin->processMtxRe[ch][slot], hDiracDecBin->processMtxRe_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxIm[ch][slot], hDiracDecBin->processMtxIm_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxRePrev[ch][slot], hDiracDecBin->processMtxRePrev_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxImPrev[ch][slot], hDiracDecBin->processMtxImPrev_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxRe[ch][slot], hDiracDecBin->processMtxRe_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxIm[ch][slot], hDiracDecBin->processMtxIm_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxRePrev[ch][slot], hDiracDecBin->processMtxRePrev_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxImPrev[ch][slot], hDiracDecBin->processMtxImPrev_fx[ch][slot], Q11, nBins );
        }
        floatToFixed_arrL( st_ivas->cldfbSynDec[ch]->cldfb_state, st_ivas->cldfbSynDec[ch]->cldfb_state_fx, Q11, st_ivas->cldfbSynDec[ch]->p_filter_length );
        st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q11;
@@ -2143,7 +2143,7 @@ static void ivas_dirac_dec_binaural_process_output_fx(
        }
    }

    Word16 cldfb_state_shift = sub(add(q_inp_mix, Q2), cldfbSynDec[0]->Q_cldfb_state);
    Word16 cldfb_state_shift = sub(add(q_inp_mix, Q1), cldfbSynDec[0]->Q_cldfb_state);
    IF(GT_16(cldfb_state_shift, shift))
    {
      q_inp_mix = q_inp_mix + shift - cldfb_state_shift;
@@ -2159,8 +2159,8 @@ static void ivas_dirac_dec_binaural_process_output_fx(
            scale_sig32(inIm_fx[i][j], nBins, q_inp_mix);
            IF( processReverb && ( i < 2 ) )
            {
              scale_sig32(reverbRe_fx[i][j], CLDFB_NO_CHANNELS_MAX, sub(q_inp_mix, 3));
              scale_sig32(reverbIm_fx[i][j], CLDFB_NO_CHANNELS_MAX, sub(q_inp_mix, 3));
              scale_sig32(reverbRe_fx[i][j], CLDFB_NO_CHANNELS_MAX, sub(q_inp_mix, 4));
              scale_sig32(reverbIm_fx[i][j], CLDFB_NO_CHANNELS_MAX, sub(q_inp_mix, 4));
            }
        }
    }
@@ -2172,7 +2172,7 @@ static void ivas_dirac_dec_binaural_process_output_fx(
    q_inp_mix = add(q_inp_mix, Q6);

    interpVal_fx = 0;
    Word16 q_result = sub( q_inp_mix, 3 ); // setting it prior//
    Word16 q_result = sub( q_inp_mix, 4 ); // setting it prior//
    cldfbSynDec[0]->Q_cldfb_state = sub( q_result, 1 );
    cldfbSynDec[1]->Q_cldfb_state = sub( q_result, 1 );

@@ -2230,16 +2230,16 @@ static void ivas_dirac_dec_binaural_process_output_fx(
                    Word16 gain;

                    /* Mixing using the formulated processing matrix M */
                    gain = add( mult( sub( 32767, interpVal_fx ), hDiracDecBin->processMtxRePrev_fx[chA][chB][bin] ), mult( interpVal_fx, hDiracDecBin->processMtxRe_fx[chA][chB][bin] ) ); // Q12
                    gain = add( mult( sub( 32767, interpVal_fx ), hDiracDecBin->processMtxRePrev_fx[chA][chB][bin] ), mult( interpVal_fx, hDiracDecBin->processMtxRe_fx[chA][chB][bin] ) ); // Q11

                    outSlotRe_fx[bin] = L_add( outSlotRe_fx[bin], Mpy_32_16_1( inRe_fx[chB][slot][bin], gain ) ); // q_inp_mix-3//q_result
                    outSlotIm_fx[bin] = L_add( outSlotIm_fx[bin], Mpy_32_16_1( inIm_fx[chB][slot][bin], gain ) ); // q_inp_mix-3//q_result
                    outSlotRe_fx[bin] = L_add( outSlotRe_fx[bin], Mpy_32_16_1( inRe_fx[chB][slot][bin], gain ) ); // q_inp_mix-4//q_result
                    outSlotIm_fx[bin] = L_add( outSlotIm_fx[bin], Mpy_32_16_1( inIm_fx[chB][slot][bin], gain ) ); // q_inp_mix-4//q_result

                    gain = add( mult( sub( 32767, interpVal_fx ), hDiracDecBin->processMtxImPrev_fx[chA][chB][bin] ), mult( interpVal_fx, hDiracDecBin->processMtxIm_fx[chA][chB][bin] ) ); // Q12
                    gain = add( mult( sub( 32767, interpVal_fx ), hDiracDecBin->processMtxImPrev_fx[chA][chB][bin] ), mult( interpVal_fx, hDiracDecBin->processMtxIm_fx[chA][chB][bin] ) ); // Q11

                    // interpVal * hDiracDecBin->processMtxIm[chA][chB][bin];
                    outSlotRe_fx[bin] = L_sub( outSlotRe_fx[bin], Mpy_32_16_1( inIm_fx[chB][slot][bin], gain ) ); // q_inp_mix-3//q_result
                    outSlotIm_fx[bin] = L_add( outSlotIm_fx[bin], Mpy_32_16_1( inRe_fx[chB][slot][bin], gain ) ); // q_inp_mix-3//q_result
                    outSlotRe_fx[bin] = L_sub( outSlotRe_fx[bin], Mpy_32_16_1( inIm_fx[chB][slot][bin], gain ) ); // q_inp_mix-4//q_result
                    outSlotIm_fx[bin] = L_add( outSlotIm_fx[bin], Mpy_32_16_1( inRe_fx[chB][slot][bin], gain ) ); // q_inp_mix-4//q_result


                    /* Mixing decorrelated signals using the formulated residual processing matrix Mdec */
@@ -2247,13 +2247,13 @@ static void ivas_dirac_dec_binaural_process_output_fx(
                    {
                        gain = add( mult( sub( 32767, interpVal_fx ), hDiracDecBin->processMtxDecRePrev_fx[chA][chB][bin] ), mult( interpVal_fx, hDiracDecBin->processMtxDecRe_fx[chA][chB][bin] ) );
                        // interpVal * hDiracDecBin->processMtxDecRe[chA][chB][bin];
                        outSlotRe_fx[bin] = L_add( outSlotRe_fx[bin], Mpy_32_16_1( decSlotRePointer_fx[bin], gain ) ); // q_inp_mix-3//q_result
                        outSlotIm_fx[bin] = L_add( outSlotIm_fx[bin], Mpy_32_16_1( decSlotImPointer_fx[bin], gain ) ); // q_inp_mix-3//q_result
                        outSlotRe_fx[bin] = L_add( outSlotRe_fx[bin], Mpy_32_16_1( decSlotRePointer_fx[bin], gain ) ); // q_inp_mix-4//q_result
                        outSlotIm_fx[bin] = L_add( outSlotIm_fx[bin], Mpy_32_16_1( decSlotImPointer_fx[bin], gain ) ); // q_inp_mix-4//q_result


                        gain = add( mult( sub( 32767, interpVal_fx ), hDiracDecBin->processMtxDecImPrev_fx[chA][chB][bin] ), mult( interpVal_fx, hDiracDecBin->processMtxDecIm_fx[chA][chB][bin] ) );
                        outSlotRe_fx[bin] = L_sub( outSlotRe_fx[bin], Mpy_32_16_1( decSlotImPointer_fx[bin], gain ) ); // q_inp_mix-3//q_result
                        outSlotIm_fx[bin] = L_add( outSlotIm_fx[bin], Mpy_32_16_1( decSlotRePointer_fx[bin], gain ) ); // q_inp_mix-3//q_result
                        outSlotRe_fx[bin] = L_sub( outSlotRe_fx[bin], Mpy_32_16_1( decSlotImPointer_fx[bin], gain ) ); // q_inp_mix-4//q_result
                        outSlotIm_fx[bin] = L_add( outSlotIm_fx[bin], Mpy_32_16_1( decSlotRePointer_fx[bin], gain ) ); // q_inp_mix-4//q_result
                    }
                }
            }
@@ -3946,20 +3946,20 @@ static void ivas_masa_ext_rend_parambin_internal(
    {
        FOR( slot = 0; slot < BINAURAL_CHANNELS; slot++ )
        {
            floatToFixed_arr16( hDiracDecBin->processMtxDecRe[ch][slot], hDiracDecBin->processMtxDecRe_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecIm[ch][slot], hDiracDecBin->processMtxDecIm_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecRePrev[ch][slot], hDiracDecBin->processMtxDecRePrev_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecImPrev[ch][slot], hDiracDecBin->processMtxDecImPrev_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecRe[ch][slot], hDiracDecBin->processMtxDecRe_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecIm[ch][slot], hDiracDecBin->processMtxDecIm_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecRePrev[ch][slot], hDiracDecBin->processMtxDecRePrev_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxDecImPrev[ch][slot], hDiracDecBin->processMtxDecImPrev_fx[ch][slot], Q11, nBins );
        }
    }
    FOR( ch = 0; ch < BINAURAL_CHANNELS; ch++ )
    {
        FOR( slot = 0; slot < 4; slot++ )
        {
            floatToFixed_arr16( hDiracDecBin->processMtxRe[ch][slot], hDiracDecBin->processMtxRe_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxIm[ch][slot], hDiracDecBin->processMtxIm_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxRePrev[ch][slot], hDiracDecBin->processMtxRePrev_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxImPrev[ch][slot], hDiracDecBin->processMtxImPrev_fx[ch][slot], Q12, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxRe[ch][slot], hDiracDecBin->processMtxRe_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxIm[ch][slot], hDiracDecBin->processMtxIm_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxRePrev[ch][slot], hDiracDecBin->processMtxRePrev_fx[ch][slot], Q11, nBins );
            floatToFixed_arr16( hDiracDecBin->processMtxImPrev[ch][slot], hDiracDecBin->processMtxImPrev_fx[ch][slot], Q11, nBins );
        }
        floatToFixed_arrL( hMasaExtRend->cldfbSynRend[ch]->cldfb_state, hMasaExtRend->cldfbSynRend[ch]->cldfb_state_fx, Q11, hMasaExtRend->cldfbSynRend[ch]->p_filter_length );
        hMasaExtRend->cldfbSynRend[ch]->Q_cldfb_state = Q11;
@@ -3979,7 +3979,7 @@ static void ivas_masa_ext_rend_parambin_internal(
        fixedToFloat_arrL32( hMasaExtRend->cldfbSynRend[ch]->cldfb_state_fx, hMasaExtRend->cldfbSynRend[ch]->cldfb_state, hMasaExtRend->cldfbSynRend[ch]->Q_cldfb_state, hMasaExtRend->cldfbSynRend[ch]->p_filter_length );
    }
#else
    ivas_dirac_dec_binaural_process_output( hDiracDecBin, hSpatParamRendCom, st_ivas->cldfbSynDec, output_f, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, max_band_decorr, numInChannels, config_data.processReverb, subframe );
    ivas_dirac_dec_binaural_process_output( hDiracDecBin, hSpatParamRendCom, hMasaExtRend->cldfbSynRend, output_f, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, max_band_decorr, numInChannels, config_data.processReverb, subframe );
#endif
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////