Commit 5bf77d20 authored by Mohammadreza Naghibzadeh's avatar Mohammadreza Naghibzadeh
Browse files

improve decSlot[] precision.

parent fa37f6ff
Loading
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -2819,6 +2819,17 @@ static void ivas_dirac_dec_binaural_process_output_fx(
            FOR( slot = 0; slot < nSlots; slot++ )
            {
                ivas_dirac_dec_decorrelate_slot_fx( hDiracDecBin, nBins, slot, inRe_fx, inIm_fx, q_input, decSlotRe_fx[slot], decSlotIm_fx[slot], &q_decSlot[slot] );

                Word16 scf = s_min( getScaleFactor32( decSlotRe_fx[slot][0], nBins ), getScaleFactor32( decSlotRe_fx[slot][1], nBins ) );
                scf = s_min( scf, getScaleFactor32( decSlotIm_fx[slot][0], nBins ) );
                scf = s_min( scf, getScaleFactor32( decSlotIm_fx[slot][1], nBins ) );

                scale_sig32( decSlotRe_fx[slot][0], nBins, scf );
                scale_sig32( decSlotRe_fx[slot][1], nBins, scf );
                scale_sig32( decSlotIm_fx[slot][0], nBins, scf );
                scale_sig32( decSlotIm_fx[slot][1], nBins, scf );
                q_decSlot[slot] += scf;

                q_decSlotMin = s_min( q_decSlotMin, q_decSlot[slot] );
            }

@@ -2848,11 +2859,9 @@ static void ivas_dirac_dec_binaural_process_output_fx(
        eff_q = sub( add( q_inp_mix, q_mat ), 15 );

        FOR( Word16 i = 0; i < ch_len; i++ )

        {
            FOR( Word16 j = 0; j < nSlots; j++ )
            {

                scale_sig32( inRe_fx[i][j], nBins, q_inp_mix ); /*q_input + q_inp_mix*/
                scale_sig32( inIm_fx[i][j], nBins, q_inp_mix ); /*q_input + q_inp_mix*/
                test();
@@ -2977,6 +2986,7 @@ 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] ) ); // Q11

                    outSlotRe_fx[bin] = Madd_32_16( outSlotRe_fx[bin], inRe_fx[chB][slot][bin], gain ); // q_inp_mix-4//q_result
                    outSlotIm_fx[bin] = Madd_32_16( outSlotIm_fx[bin], inIm_fx[chB][slot][bin], gain ); // q_inp_mix-4//q_result
                    move32();
@@ -2995,12 +3005,14 @@ 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] ) ); // Q11
                        // interpVal * hDiracDecBin->processMtxDecRe[chA][chB][bin];

                        outSlotRe_fx[bin] = Madd_32_16( outSlotRe_fx[bin], decSlotRePointer_fx[bin], gain ); // q_inp_mix-4//q_result
                        outSlotIm_fx[bin] = Madd_32_16( outSlotIm_fx[bin], decSlotImPointer_fx[bin], gain ); // q_inp_mix-4//q_result
                        move32();
                        move32();

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

                        outSlotRe_fx[bin] = Msub_32_16( outSlotRe_fx[bin], decSlotImPointer_fx[bin], gain ); // q_inp_mix-4//q_result
                        outSlotIm_fx[bin] = Madd_32_16( outSlotIm_fx[bin], decSlotRePointer_fx[bin], gain ); // q_inp_mix-4//q_result
                        move32();
@@ -3024,7 +3036,6 @@ static void ivas_dirac_dec_binaural_process_output_fx(
                /* provide the data outside in CLDFB domain => mainly for split rendering */
                Copy32( outSlotRePr_fx, outRe_fx[chA][slot], CLDFB_NO_CHANNELS_MAX );
                Copy32( outSlotImPr_fx, outIm_fx[chA][slot], CLDFB_NO_CHANNELS_MAX );

                Scale_sig32( outRe_fx[chA][slot], CLDFB_NO_CHANNELS_MAX, sub( Q6, q_result ) ); // Q6
                Scale_sig32( outIm_fx[chA][slot], CLDFB_NO_CHANNELS_MAX, sub( Q6, q_result ) ); // Q6
            }