Commit 05377868 authored by Vladimir Malenovsky's avatar Vladimir Malenovsky
Browse files

Merge branch 'main' into basop-2642-possible-bug-in-function-ivas_calculate_abs_fr

parents 975fe583 f51f2c58
Loading
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -896,7 +896,6 @@ Word16 shr_o( Word16 var1, Word16 var2, Flag *Overflow )

Word16 shr( Word16 var1, Word16 var2 )
{
#ifdef FIX_BASOP_2563_CRASH_HQ_GENERIC_DEC
    Flag Overflow;
    Word16 result;

@@ -908,9 +907,6 @@ Word16 shr( Word16 var1, Word16 var2 )
        assert( 0 );
    }
    return result;
#else
    return shr_o( var1, var2, NULL );
#endif
}
Word16 shr_sat( Word16 var1, Word16 var2 )
{
+28 −2
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@
#include <stdlib.h>
#include "stl.h"

#ifdef FIX_2493_CHECK_64BIT
#include <assert.h>
#endif

#define WMC_TOOL_SKIP

/*****************************************************************************
@@ -74,7 +78,9 @@
Word64 W_add_nosat( Word64 L64_var1, Word64 L64_var2 )
{
    Word64 L64_var_out;

#ifdef FIX_2493_CHECK_64BIT
    assert( !( ( L64_var2 > 0 && L64_var1 > MAX_64 - L64_var2 ) || ( L64_var2 < 0 && L64_var1 < MIN_64 - L64_var2 ) ) );
#endif
    L64_var_out = L64_var1 + L64_var2;

#ifdef WMOPS
@@ -117,7 +123,9 @@ Word64 W_add_nosat( Word64 L64_var1, Word64 L64_var2 )
Word64 W_sub_nosat( Word64 L64_var1, Word64 L64_var2 )
{
    Word64 L64_var_out;

#ifdef FIX_2493_CHECK_64BIT
    assert( !( ( L64_var2 < 0 && L64_var1 > MAX_64 + L64_var2 ) || ( L64_var2 > 0 && L64_var1 < MIN_64 + L64_var2 ) ) );
#endif
    L64_var_out = L64_var1 - L64_var2;

#ifdef WMOPS
@@ -316,6 +324,9 @@ Word64 W_shl_nosat( Word64 L64_var1, Word16 var2 )
    }
    else
    {
#ifdef FIX_2493_CHECK_64BIT
        assert( ( ( L64_var1 << var2 ) >> var2 ) == L64_var1 );
#endif
        L64_var_out = L64_var1 << var2;
    }
#ifdef WMOPS
@@ -369,6 +380,9 @@ Word64 W_shr_nosat( Word64 L64_var1, Word16 var2 )
    if ( var2 < 0 )
    {
        var2 = -var2;
#ifdef FIX_2493_CHECK_64BIT
        assert( ( ( L64_var1 << var2 ) >> var2 ) == L64_var1 );
#endif
        L64_var_out = L64_var1 << var2;
    }
    else
@@ -423,6 +437,9 @@ Word64 W_shr_nosat( Word64 L64_var1, Word16 var2 )
Word64 W_mac_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 )
{
    Word64 L64_var_out = ( (Word64) L_var2 * var3 ) << 1;
#ifdef FIX_2493_CHECK_64BIT
    assert( !( ( L64_var_out > 0 && L64_var1 > MAX_64 - L64_var_out ) || ( L64_var_out < 0 && L64_var1 < MIN_64 - L64_var_out ) ) );
#endif
    L64_var_out += L64_var1;
#ifdef WMOPS
    multiCounter[currCounter].W_mac_32_16++;
@@ -470,6 +487,9 @@ Word64 W_mac_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 )
Word64 W_msu_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 )
{
    Word64 L64_var_out = ( (Word64) L_var2 * var3 ) << 1;
#ifdef FIX_2493_CHECK_64BIT
    assert( !( ( L64_var_out < 0 && L64_var1 > MAX_64 + L64_var_out ) || ( L64_var_out > 0 && L64_var1 < MIN_64 + L64_var_out ) ) );
#endif
    L64_var_out = L64_var1 - L64_var_out;
#ifdef WMOPS
    multiCounter[currCounter].W_msu_32_16++;
@@ -596,6 +616,9 @@ Word64 W_mult0_16_16( Word16 var1, Word16 var2 )
Word64 W_mac0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 )
{
    Word64 L64_var_out = (Word64) var2 * var3;
#ifdef FIX_2493_CHECK_64BIT
    assert( !( ( L64_var_out > 0 && L64_var1 > MAX_64 - L64_var_out ) || ( L64_var_out < 0 && L64_var1 < MIN_64 - L64_var_out ) ) );
#endif
    L64_var_out += L64_var1;
#ifdef WMOPS
    multiCounter[currCounter].W_mac0_16_16++;
@@ -642,6 +665,9 @@ Word64 W_mac0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 )
Word64 W_msu0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 )
{
    Word64 L64_var_out = (Word64) var2 * var3;
#ifdef FIX_2493_CHECK_64BIT
    assert( !( ( L64_var_out < 0 && L64_var1 > MAX_64 + L64_var_out ) || ( L64_var_out > 0 && L64_var1 < MIN_64 + L64_var_out ) ) );
#endif
    L64_var_out = L64_var1 - L64_var_out;
#ifdef WMOPS
    multiCounter[currCounter].W_msu0_16_16++;
+4 −0
Original line number Diff line number Diff line
@@ -349,7 +349,11 @@ Word32 ivas_interformat_brate_fx(

    limit_high = IVAS_512k / FRAMES_PER_SEC;
    move16();
#ifdef FIX_2636_OMASA_INTERFORMAT_BRATE
    IF( LT_32( element_brate, SCE_CORE_16k_LOW_LIMIT ) )
#else
    IF( LE_32( element_brate, SCE_CORE_16k_LOW_LIMIT ) )
#endif
    {
        limit_high = ACELP_12k8_HIGH_LIMIT / FRAMES_PER_SEC;
        move16();
+15 −0
Original line number Diff line number Diff line
@@ -356,23 +356,38 @@ void ivas_map_prior_coeffs_quant(
        {
            FOR( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ )
            {
#ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION
                Word16 trial1_16 = imult1616( sub( qs.PR.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] );      /*q0*/
                pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_PR_fx, trial1_16 ) ); /*q0*/
#else
                Word32 trial1 = L_mult0( sub( qs.PR.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] ); /*q0*/
                trial1 = L_shl( trial1, 16 );                                                                                /*q16*/
                trial1 = round_fx( Mpy_32_32( trial1, one_by_q_lvl_PR_fx ) );                                                /*q16+q31-31-16->0*/
                pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = extract_l( trial1 );                            /*q0*/
#endif
                move16();
#ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION
                Word16 trial2_16 = imult1616( sub( qs.P_r.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] );      /*q0*/
                pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_P_r_fx, trial2_16 ) ); /*q0*/
#else
                Word32 trial2 = L_mult0( sub( qs.P_r.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] ); /*q0*/
                trial2 = L_shl( trial2, 16 );                                                                                 /*q16*/
                trial2 = round_fx( Mpy_32_32( trial2, one_by_q_lvl_P_r_fx ) );                                                /*q16+q31-31-16->0*/
                pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = extract_l( trial2 );                             /*q0*/
#endif
                move16();
            }
            FOR( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ )
            {
#ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION
                Word16 trial1_16 = imult1616( sub( qs.C.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] );      /*q0*/
                pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_C_fx, trial1_16 ) ); /*q0*/
#else
                Word32 trial1 = L_mult0( sub( qs.C.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] ); /*q0*/
                trial1 = L_shl( trial1, 16 );                                                                               /*q16*/
                trial1 = round_fx( Mpy_32_32( trial1, one_by_q_lvl_C_fx ) );                                                /*q16+q31-31-16->0*/
                pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = extract_l( trial1 );                           /*q0*/
#endif
                move16();
            }
        }
+20 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@
#define FIX_1990_SANITIZER_IN_REVERB_LOAD               /* Nokia: Fix issue part of issue 1990 by introducing missing free of structure - keep until #2059 is addressed */
#define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR      /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */
#define NONBE_1122_KEEP_EVS_MODE_UNCHANGED              /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR.  */
#define HARMONIZE_2502_GENERATE_COMFORT_NOISE_DEC       /* FhG: harmonize generate_comfort_noise_dec_fx() and generate_comfort_noise_dec_ivas_fx() */

/* #################### End BE switches ################################## */

@@ -97,6 +98,25 @@
#define FIX_BASOP_2627_PARAM_MC_ILD_REMAP_EXP           /* FhG: BASOP #2627: accumulate 10^(ILD/10) using a dynamic exponent */
#define FIX_BASOP_2635_EFAP_ADD_VERTEX_ELE_ROUND        /* FhG: BASOP #2635: round |elevation| with anint_fx before the 90deg subtraction in add_vertex_fx */
#define FIX_BASOP_2642_INCORRECT_IF_THRESHOLD           /* Dolby: BASOP #2642: incorrect threshold 0.0 used instead of 0.1 in if condition */
#define FIX_BASOP_2639_INCORRECT_ARRAY_INDEX            /* Dolby: BASOP #2639: incorrect array index in ivas_spar_unquant_dtx_indicies */
#define FIX_BASOP_2640_MASA_STEREO_TYPE_ASSERT          /* Nokia: BASOP issue 2640: Fix assert by saturating shift when exponent difference is very large. */
#define FIX_2636_OMASA_INTERFORMAT_BRATE                /* VA: basop issue 2636: Correct condition in function ivas_interformat_brate_fx() */
#define FIX_BASOP_2630_LFE_TDPLC_DECIM_IDX              /* FhG: BASOP #2630: ivas_lfe_tdplc_fx decimation index uses 48000 (was 44100) and drops the extra >>1, matching float ( i * 48000 ) / output_Fs */

#define FIX_2493_CHECK_64BIT                            /* FhG: Verify that 64 bit ops do not encounter an overflow. */
#define NONBE_FIX_2493_EXTRACT_L_estDownmixGain_fx      /* FhG: Fix extract_l overflow inside estDownmixGain_fx() */
#define NONBE_FIX_2493_EXTRACT_L_swb_pre_proc_fx        /* FhG: Fix extract_l overflow inside swb_pre_proc_fx(). Saturation, not a optimal fix. */
#define NONBE_FIX_2493_EXTRACT_L_spectral_balancer_fx16 /* FhG: Fix extract_l overflow inside spectral_balancer_fx16(). Saturation, not a optimal fix. */
#define NONBE_FIX_2493_EXTRACT_L_IGF_CalculateStereoEnvelope_fx /* FhG: Fix extract_l overflow inside IGF_CalculateStereoEnvelope_fx(). Was completely wrong. */
#define NONBE_FIX_2493_EXTRACT_L_GetTCXMaxenergyChange_fx /* FhG: Fix extract_l overflow inside GetTCXMaxenergyChange_fx(). Saturation, not a optimal fix. */
#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_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. */
#define FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION    /* FhG: Fix instrumentation related to extract_l. */

/* ##################### End NON-BE switches ########################### */

Loading