Commit 00790c6b authored by Manuel Jander's avatar Manuel Jander
Browse files

Merge branch 'basop-2569-assert-overflow-in-ivas_compute_core_buffers_fx' into 'main'

[non-BE][split-non-BE][allow regression] Resolve "Assert (Overflow) in ivas_compute_core_buffers_fx()"

Closes #2569

See merge request !3010
parents 35bac7e7 ec12b3f7
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@
#define FIX_BASOP_2517_CLICK_IN_OMASA_LTV               /* FhG: BASOP #2517: preserve precision by removing one-bit headroom from Q_min and allowing saturation during buffer scaling */
#define NONBE_FIX_ISSUE_2518                            /* FhG: Fix issue 2518, noise during ACELP switching from 16KHz to 12k8Hz by improving Q_new calculation. */
#define NONBE_FIX_ISSUE_2518_TRANSENC_SAT_FIX           /* FhG: Fix issue 2518, fix wrong amplitude because of saturation of x_tran in transf_cdbk_enc_fx() for transient signals. */
#define NONBE_FIX_ISSUE_2569                            /* FhG: Fix issue 2569, overflow of mem_preemph16k_fx in LTV test. */
#define FIX_BASOP_2559_Q_SYNTH_HISTORY_RESET            /* FhG: BASOP issue 2559: reset hTcxDec->q_synth_history_fx in allocate_CoreCoder_TCX_fx() */
#define FIX_FLOAT_1578_OMASA_REND_SPIKES                /* Nokia: Float issue 1578: Fix spikes and collapsed perception in OMASA/MASA rendering to FOA/HOA */
#define FIX_1521_SBA_LOUDNESS_STEREO                    /* FhG: issue 1521: Fix loudness for SBA to stereo rendering */
+3 −0
Original line number Diff line number Diff line
@@ -755,6 +755,9 @@ void pre_proc_front_ivas_fx(

    /* Avoid saturation of resampling/delay decimation buffer. */
    shift = s_min( shift, st->q_mem_decim16k_fx );
#ifdef NONBE_FIX_ISSUE_2569
    shift = s_min( shift, add( -1, norm_arr( &st->mem_preemph16k_fx, 1 ) ) );
#endif

    /* Limit Q_new here to st->q_inp because inside ivas_compute_core_buffers_fx() st->input is rescaled to Q_new */
    shift = s_min( shift, st->q_inp );
+18 −0
Original line number Diff line number Diff line
@@ -706,7 +706,11 @@ void pre_proc_ivas_fx(
#ifdef NONBE_FIX_ISSUE_2206
            // L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 );
            tmp = add( norm_arr( wsp_fx, L_FRAME + L_LOOK_12k8 ), sub( Q15, e_old_wsp ) );
#ifdef NONBE_FIX_ISSUE_2569
            tmp = s_min( tmp, add( norm_arr( &st->mem_wsp_enc, 1 ), sub( Q15, st->exp_buf_wspeech_enc ) ) );
#else
            tmp = s_min( tmp, add( norm_s( st->mem_wsp_enc ), sub( Q15, st->exp_buf_wspeech_enc ) ) );
#endif
            tmp = s_min( tmp, add( norm_arr( st->buf_wspeech_enc, (Word16) ( st->wspeech_enc - st->buf_wspeech_enc ) ), sub( Q15, st->exp_buf_wspeech_enc ) ) );
            tmp = s_min( tmp, add( norm_arr( st->wspeech_enc + L_FRAME + L_LOOK_12k8, /* L_NEXT_MAX_16k + */ 320 ), sub( Q15, st->exp_buf_wspeech_enc ) ) );
            tmp = s_min( Q15, tmp );
@@ -1271,7 +1275,19 @@ void ivas_compute_core_buffers_fx(
            IF( EQ_16( st->L_frame, L_FRAME16k ) )
            {
#ifdef NONBE_FIX_ISSUE_2206
#ifdef NONBE_FIX_ISSUE_2569
                Word16 buf_speech_enc_q;

                buf_speech_enc_q = s_min( sub( Q15, st->exp_buf_speech_enc ), Q_old_inp_16k );
                Copy_Scale_sig_nosat( new_inp_16k_fx - lMemRecalc_16k, st->buf_speech_enc + sub( L_FRAME16k - L_FILT16k, lMemRecalc_16k ), add( lMemRecalc_16k, L_FRAME16k + L_FILT16k ), sub( buf_speech_enc_q, Q_old_inp_16k ) );
                // L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k
                scale_sig( st->buf_speech_enc, sub( L_FRAME16k - L_FILT16k, lMemRecalc_16k ), sub( buf_speech_enc_q, sub( Q15, st->exp_buf_speech_enc ) ) );
                scale_sig( st->buf_speech_enc + L_FRAME16k + L_FRAME16k, L_PAST_MAX_32k + L_NEXT_MAX_32k, sub( buf_speech_enc_q, sub( Q15, st->exp_buf_speech_enc ) ) );
                st->exp_buf_speech_enc = sub( Q15, buf_speech_enc_q );
                move16();
#else
                Copy_Scale_sig_nosat( new_inp_16k_fx - lMemRecalc_16k, st->buf_speech_enc + sub( L_FRAME16k - L_FILT16k, lMemRecalc_16k ), add( lMemRecalc_16k, L_FRAME16k + L_FILT16k ), sub( sub( Q15, st->exp_buf_speech_enc ), Q_old_inp_16k ) ); /* Q_new - 1 */
#endif
#else
                Copy( new_inp_16k_fx - lMemRecalc_16k, st->buf_speech_enc + sub( L_FRAME16k - L_FILT16k, lMemRecalc_16k ), add( lMemRecalc_16k, L_FRAME16k + L_FILT16k ) ); /* Q_new - 1 */
#endif
@@ -1320,8 +1336,10 @@ void ivas_compute_core_buffers_fx(
        shift = s_min( shift, norm_arr( old_inp_16k_fx, (Word16) ( preemp_start_idx - old_inp_16k_fx ) ) );
        shift = add( shift, Q_old_inp_16k );

#ifndef NONBE_FIX_ISSUE_2569
        /* Avoid saturation of resampling/delay decimation buffer. */
        shift = s_min( shift, add( st->q_mem_decim16k_fx, 1 ) );
#endif

        IF( st->hLPDmem != NULL )
        {
+4 −1
Original line number Diff line number Diff line
@@ -55,9 +55,12 @@ void updt_enc_fx(
        tmp = s_min( tmp, norm_arr( hLPDmem->mem_syn2, M ) );
        tmp = s_min( tmp, norm_arr( hLPDmem->mem_syn3, M ) );
        tmp = s_min( tmp, norm_arr( hLPDmem->mem_syn_r, L_SYN_MEM ) );
#ifdef NONBE_FIX_ISSUE_2569
        tmp = s_min( tmp, norm_arr( &hLPDmem->mem_w0, 1 ) );
#else
        tmp = s_min( tmp, norm_s( hLPDmem->mem_w0 ) );
#endif
        tmp = s_min( tmp, sub( 15, hLPDmem->q_mem_syn ) );
        // tmp = sub( tmp, 1 );
        scale_sig( hLPDmem->mem_syn, M, tmp );
        scale_sig( hLPDmem->mem_syn1_fx, M, tmp );
        scale_sig( hLPDmem->mem_syn2, M, tmp );