Loading lib_rend/ivas_dirac_dec_binaural_functions_fx.c +18 −7 Original line number Diff line number Diff line Loading @@ -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] ); } Loading Loading @@ -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(); Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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 } Loading Loading
lib_rend/ivas_dirac_dec_binaural_functions_fx.c +18 −7 Original line number Diff line number Diff line Loading @@ -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] ); } Loading Loading @@ -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(); Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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 } Loading