Commit 5a088988 authored by emerit's avatar emerit
Browse files

Merge branch 'main' into 1963_basop_portFltMR-1568-1471-1690

parents 48825a3c e95243e9
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@
#define FIX_2009_HIGH_NOISE_FLOOR_FOR_FX_DEC                 /* FhG: Corrected the q_input in the input of generate_masking_noise_dirac_ivas_fx() */
#define FIX_ISSUE_2013_MDCT_STEREO_DTX_DISCONTINUITIES       /* Eri/FhG: Issue 2013 fix for dtx discontinuities */
#define FIX_ISSUE_2013_MDCT_STEREO_FER_DISCONTINUITIES       /* Eri/FhG: Issue 2013 fix for FER discontinuities */
#define FIX_2000_NON_LINEARITY_OVERSHOOT                     /* Eri: Issue 2000: SWB TBE energy overshoot in non-linearity. Aligns with float */

/* #################### Start BASOP porting switches ############################ */

@@ -123,6 +124,7 @@
#endif
#define NONBE_1377_REND_DIRATT_CONF                     /* Eri: Issue 1377: Error in directivity attenuation configuration for both IVAS_dec and IVAS_rend */


/* #################### End BASOP porting switches ############################ */

#endif
+19 −1
Original line number Diff line number Diff line
@@ -6125,13 +6125,21 @@ void non_linearity_ivas_fx(
    }

#ifdef NONBE_1328_FIX_NON_LINEARITY
#ifdef FIX_2000_NON_LINEARITY_OVERSHOOT
    sc_factor = s_max( sub( 13, norm_s( add( j, 1 ) ) ), 0 ); /* Adapt the scaling factor allowed depending of max position  */
    sc_factor = s_max( sc_factor, 1 );                        /* Note: The sc_factor is the log2 of the sc_factor in the float code to simplify condition below */
#else
    /* sc_factor = 32; */                                                      /* Here we divide prev_scale, so 32 == 2 << (15-10)  1024.0 corresponds to 10 bits and 32 to 5 bits  */
    /* if ( element_mode > EVS_MONO ) */                                       /* element mode is not needed because the function is duplicated for IVAS */
    sc_factor = shl_sat( 1, sub( 16, max( 13 - norm_s( add( j, 1 ) ), 0 ) ) ); /* Adapt the scaling factor allowed depending of max position  */
    sc_factor = s_max( s_min( sc_factor, 16384 ), 2 * 32 );                    /* note: The thresholding is purposely different between float and BASOP implementations. */

#endif
    test();
#ifdef FIX_2000_NON_LINEARITY_OVERSHOOT
    IF( prev_scale <= 0 || GT_32( L_shr( prev_scale, sub( sc_factor, 1 ) /*Q30 -> Q31*/ ), scale /*Q31*/ ) ) /* Since the sc_factor is the log2 of sc_factor in float, we apply it using L_shr */
#else
    IF( prev_scale <= 0 || GT_32( Mult_32_16( prev_scale, sc_factor ) /*Q30 -> Q31*/, scale /*Q31*/ ) )
#endif
#else
    test();
    IF( prev_scale <= 0 || GT_32( Mult_32_16( prev_scale, 64 ) /*Q30 -> Q31*/, scale /*Q31*/ ) )
@@ -6221,13 +6229,23 @@ void non_linearity_ivas_fx(
    }

#ifdef NONBE_1328_FIX_NON_LINEARITY
#ifdef FIX_2000_NON_LINEARITY_OVERSHOOT
    /* if ( element_mode > EVS_MONO ) */                                          /* element mode is not needed because the function is duplicated for IVAS */
    sc_factor = s_max( sub( 12, norm_s( add( sub( j, length_half ), 1 ) ) ), 0 ); /* allowed intra frame jump is smaller */
    sc_factor = s_max( sc_factor, 1 );                                            /* Note: The sc_factor is the log2 of the sc_factor in the float code to simplify condition below */
#else
    /* sc_factor = 32; */                                                      /* Here we divide prev_scale, so 32 == 2 << (15-10)  1024.0 corresponds to 10 bits and 32 to 5 bits  */
    /* if ( element_mode > EVS_MONO ) */                                       /* element mode is not needed because the function is duplicated for IVAS */
    sc_factor = shl_sat( 1, sub( 16, max( 12 - norm_s( add( j, 1 ) ), 0 ) ) ); /* Adapt the scaling factor allowed depending of max position  */
    sc_factor = s_max( s_min( sc_factor, 16384 ), 2 * 32 );                    /* note: The thresholding is purposely different between float and BASOP implementations. */
#endif

    test();
#ifdef FIX_2000_NON_LINEARITY_OVERSHOOT
    IF( prev_scale <= 0 || GT_32( L_shr( prev_scale, sub( sc_factor, 1 ) /*Q30 -> Q31*/ ), scale /*Q31*/ ) ) /* Since the sc_factor is the log2 of sc_factor in float, we apply it using L_shr */
#else
    IF( prev_scale <= 0 || GT_32( Mult_32_16( prev_scale, sc_factor ) /*Q30 -> Q31*/, scale /*Q31*/ ) )
#endif
#else
    IF( prev_scale <= 0 || GT_32( Mult_32_16( prev_scale, 64 ), scale ) )
#endif