Commit ed0d8d4f authored by Manuel Jander's avatar Manuel Jander
Browse files

Change the overflow fix NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx for...

Change the overflow fix NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx for NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx_SAT, using saturation and correct scale of bwe_exc buffer in cae of NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx.
parent 7f1eb0c4
Loading
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -119,7 +119,8 @@
#define NONBE_FIX_2493_EXTRACT_L_res_bpf_adapt_ivas_fx  /* FhG: Fix extract_l overflow inside res_bpf_adapt_ivas_fx() */
#define NONBE_FIX_2493_EXTRACT_L_ivas_core_dec_fx       /* FhG: Fix extract_l overflow inside ivas_core_dec_fx(). Saturation, not a optimal fix. */
#define NONBE_FIX_2493_EXTRACT_L_d_syn_filt_fx          /* FhG: Fix extract_l overflow inside d_syn_filt_fx(). W_shr( x, s ) with s out of range problem. */
#define NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx      /* FhG: Fix extract_l overflow inside acelp_core_dec_fx() */
// #define NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx      /* FhG: Fix extract_l overflow inside acelp_core_dec_fx() */
#define NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx_SAT  /* FhG: Fix extract_l overflow inside acelp_core_dec_fx(). Do saturation. */
#define NONBE_FIX_2493_EXTRACT_L_acelp_fast_fx          /* FhG: Fix extract_l overflow inside acelp_fast_fx(). Saturation, not a optimal fix. */
#define NONBE_FIX_2493_EXTRACT_L_swb_tbe_enc_fx         /* FhG: Fix extract_l overflow inside swb_tbe_enc_fx() */
#define NONBE_FIX_2493_EXTRACT_L_bw_detect_fx           /* FhG: Fix extract_l overflow inside bw_detect_fx(). Saturation, not a optimal fix. */
+16 −4
Original line number Diff line number Diff line
@@ -2257,16 +2257,28 @@ ivas_error acelp_core_dec_fx(
            {
#ifdef NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx
                Word16 exc_q;
                Word16 old_bwe_exc_fx2[( ( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 )];

                // ( 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
                assert( ( st->hBWE_TD->q_old_bwe_exc_extended_fx & 1 ) == 0 || st->hBWE_TD->q_old_bwe_exc_extended_fx == Q15 );
                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 );
                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 * exc_q) */
                Copy_Scale_sig_nosat( old_bwe_exc_fx, old_bwe_exc_fx2, ( ( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 ), sub( exc_q, st->Q_exc ) );
                non_linearity_fx( st->element_mode, old_bwe_exc_fx2 + PIT16k_MAX * 2, 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 );
                if ( s_and( exp, 1 ) != 0 )
                {
                    exp = sub( exp, 1 );
                }
                Copy_Scale_sig_32_16_nosat( 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();
#elif defined( NONBE_FIX_2493_EXTRACT_L_acelp_core_dec_fx_SAT )
                Copy_Scale_sig_16_32_DEPREC( 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();
#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 );