Commit 451db6bc authored by Manuel Jander's avatar Manuel Jander
Browse files

Add saturations of DFT stereo related signales to avoid crashes from issue #2205 and #2206.

parent ec0777ee
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -111,6 +111,9 @@
#define FIX_2217_ASSERT_IN_IVAS_CORE_DECODER_WITH_MC         /* FhG: Adjust Q_real to prevent overflow in st->cldfbSyn->cldfb_state_fx scaling */
#define FIX_2211_ASSERT_IN_REND_CREND_CONVOLER               /* FhG: Add headroom to p_output_fx to prevent overflow in ivas_rend_crendProcessSubframe_fx() */

#define NONBE_FIX_2205_SATURATE_ALTERNATIVE
#define NONBE_FIX_2206_SATURATE_ALTERNATIVE

/* ################### End FIXES switches ########################### */

/* #################### Start BASOP porting switches ############################ */
+6 −0
Original line number Diff line number Diff line
@@ -472,6 +472,7 @@ ivas_error ivas_cpe_enc_fx(
        move16();
        move16();
#endif

        IF( hCPE->hStereoICBWE != NULL )
        {
            hCPE->hStereoICBWE->dataChan_fx[n] = &orig_input_fx[n][0]; // Q_orig_inp
@@ -865,9 +866,14 @@ ivas_error ivas_cpe_enc_fx(
        move16();
        sts[0]->q_old_inp = sub( sts[0]->q_old_inp32, Q16 );
        move16();
#else
#ifdef NONBE_FIX_2205_SATURATE_ALTERNATIVE
        Scale_sig32( sts[0]->input32_fx - input_frame, add( out_start_ind, input_frame ), sub( Q15, sts[0]->q_old_inp32 ) ); // scaling initial part of the input buffer
        Scale_sig32( sts[0]->input32_fx + out_end_ind, sub( input_frame, out_end_ind ), sub( Q15, sts[0]->q_inp32 ) );       // scaling initial part of the input buffer
#else
        scale_sig32( sts[0]->input32_fx - input_frame, add( out_start_ind, input_frame ), sub( Q15, sts[0]->q_old_inp32 ) ); // scaling initial part of the input buffer
        scale_sig32( sts[0]->input32_fx + out_end_ind, sub( input_frame, out_end_ind ), sub( Q15, sts[0]->q_inp32 ) );       // scaling initial part of the input buffer
#endif
        sts[0]->q_inp32 = Q15;
        sts[0]->q_old_inp32 = Q15;
        move16();
+4 −0
Original line number Diff line number Diff line
@@ -684,8 +684,12 @@ void stereo_switching_enc_fx(
        {
#ifdef NONBE_FIX_ISSUE_2206
            hCPE->hStereoDft->output_mem_dmx_fx[i] = Mpy_32_32_r( hCPE->hStereoDft->win_fx[dft_ovl - 1 - i], old_input_signal_pri[input_frame - dft_ovl + i] ); // q_inp
#else
#ifdef NONBE_FIX_2206_SATURATE_ALTERNATIVE
            hCPE->hStereoDft->output_mem_dmx_fx[i] = L_shl_sat( Mpy_32_32_r( hCPE->hStereoDft->win_fx[dft_ovl - 1 - i], old_input_signal_pri[input_frame - dft_ovl + i] ), sub( 15, q_inp ) ); // Q15
#else
            hCPE->hStereoDft->output_mem_dmx_fx[i] = L_shl( Mpy_32_32_r( hCPE->hStereoDft->win_fx[dft_ovl - 1 - i], old_input_signal_pri[input_frame - dft_ovl + i] ), sub( 15, q_inp ) ); // Q15
#endif
#endif
            move32();
        }