Commit 23411dc8 authored by Manuel Jander's avatar Manuel Jander
Browse files

Add NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx (fix overflow in acelp_core_dec_fx()

parent 4c2b13a3
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@
// #define NONBE_FIX_2493_CHECK_EXTRACT_L_decoder_tcx_post_fx /* FhG: Fix extract_l overflow inside decoder_tcx_post_fx() (EVS) */
#define NONBE_FIX_2493_CHECK_EXTRACT_L_WB_BWE_gain_pred_fx /* FhG: Fix extract_l overflow inside WB_BWE_gain_pred_fx() (EVS) */
#define NONBE_FIX_2493_CHECK_EXTRACT_L_cftmdl_16fx      /* FhG: Fix extract_l overflow inside cftmdl_16fx() (EVS) */
#define NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx      /* FhG: Fix extract_l overflow inside acelp_core_dec_fx() */
#define FIX_2493_FIX_ISSUE_1966_F0_32BIT                /* Fhg: Fix saturation that popped up from FIX_ISSUE_1966_F0_32BIT  */
#define FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION    /* FhG: BE instrumentation fix */
#define FIX_2584_TD_SM_ISSUE                            /* VA: Fix inconsistencies in the SM part of the TD stereo */
+14 −0
Original line number Diff line number Diff line
@@ -2270,12 +2270,26 @@ ivas_error acelp_core_dec_fx(
            }
            ELSE
            {
#ifdef NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx
                Word16 exc_q;

                // ( exc_q * 2) -  st->hBWE_TD->q_old_bwe_exc_extended_fx ) < L_norm_arr( st->hBWE_TD->old_bwe_exc_extended_fx, NL_BUFF_OFFSET )
                // exc_q  < ( norm_arr( st->hBWE_TD->old_bwe_exc_extended_fx, NL_BUFF_OFFSET ) +  st->hBWE_TD->q_old_bwe_exc_extended_fx)/2
                exc_q = s_min( st->Q_exc, add( norm_arr( st->hBWE_TD->old_bwe_exc_extended_fx, NL_BUFF_OFFSET ), shr( st->hBWE_TD->q_old_bwe_exc_extended_fx, 1 ) ) );
                Copy_Scale_sig_16_32_no_sat( st->hBWE_TD->old_bwe_exc_extended_fx, bwe_exc_extended_fx, NL_BUFF_OFFSET, sub( shl( exc_q, 1 ), st->hBWE_TD->q_old_bwe_exc_extended_fx ) ); /* Q(q_old_bwe_exc_extended_fx) -> Q(2 * Q_exc) */
                non_linearity_fx( st->element_mode, bwe_exc_fx, bwe_exc_extended_fx + NL_BUFF_OFFSET, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale_fx, exc_q, st->coder_type, voice_factors_fx, st->L_frame );
                exp = sub( L_norm_arr( bwe_exc_extended_fx + L_FRAME32k, NL_BUFF_OFFSET ), 16 );
                Copy_Scale_sig_32_16( bwe_exc_extended_fx + L_FRAME32k, st->hBWE_TD->old_bwe_exc_extended_fx, NL_BUFF_OFFSET, exp ); /* Q(2 * Q_exc) -> Q(q_old_bwe_exc_extended_fx) */
                st->hBWE_TD->q_old_bwe_exc_extended_fx = add( shl( exc_q, 1 ), exp );
                move16();
#else
                Copy_Scale_sig_16_32_no_sat( st->hBWE_TD->old_bwe_exc_extended_fx, bwe_exc_extended_fx, NL_BUFF_OFFSET, ( sub( shl( st->Q_exc, 1 ), st->hBWE_TD->q_old_bwe_exc_extended_fx ) ) ); /* Q(q_old_bwe_exc_extended_fx) -> Q(2 * Q_exc) */
                non_linearity_fx( st->element_mode, bwe_exc_fx, bwe_exc_extended_fx + NL_BUFF_OFFSET, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale_fx, st->Q_exc, st->coder_type, voice_factors_fx, st->L_frame );
                exp = sub( L_norm_arr( bwe_exc_extended_fx + L_FRAME32k, NL_BUFF_OFFSET ), 16 );
                Copy_Scale_sig_32_16( bwe_exc_extended_fx + L_FRAME32k, st->hBWE_TD->old_bwe_exc_extended_fx, NL_BUFF_OFFSET, exp ); /* Q(2 * Q_exc) -> Q(q_old_bwe_exc_extended_fx) */
                st->hBWE_TD->q_old_bwe_exc_extended_fx = add( shl( st->Q_exc, 1 ), exp );
                move16();
#endif
            }
        }