Commit 1b79fe99 authored by Jan Kiene's avatar Jan Kiene
Browse files

Accept HARMONIZE_2539_cng_energy

parent 5c5db539
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -92,7 +92,6 @@
#define NONBE_FIX_ISSUE_2206_AVOID_OVERFLOW_MSVQ_Interpol_Tran_fx /* FhG: Fix saturation crash in MSVQ_Interpol_Tran_fx() */
#define NONBE_FIX_ISSUE_2206_SWB_EXPERIMENT_FIX_2527    /* Fix crash from issue #2527 */
#define FIX_FLOAT_1539_G192_FORMAT_SWITCH               /* VA/Nokia: reintroduce format switching for g192 bitstreams */
#define HARMONIZE_2539_cng_energy                       /* FhG: basop issue 2539: harmonize cng_energy with its ivas derivate */
#define FIX_1585_ASAN_FORMAT_SW_ALT                     /* VA,FhG: float issues 1585,1593: alternative fix memory leaks with format switching */
#define FIX_BASOP_2573_RF_MODE_UPDATE                   /* FhG: BASOP issue 2573: remove duplicated update of rf_mode parameters from evs_enc_fx(); was already done in updt_enc_common_fx() */
#define FIX_2570_BUF_OVFL                               /* Orange: basop issue 2570: global-buffer-overflow in lib_rend/ivas_objectRenderer_sources_fx.c */
+0 −4
Original line number Diff line number Diff line
@@ -437,11 +437,7 @@ ivas_error acelp_core_enc_fx(
                {
                    IF( st->hTdCngEnc != NULL )
                    {
#ifdef HARMONIZE_2539_cng_energy
                        enr = cng_energy_fx( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att_fx, exc_fx, st->L_frame, Q_new ); /* Q8 */
#else
                        enr = cng_energy_ivas_fx( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att_fx, exc_fx, st->L_frame, Q_new ); /* Q8 */
#endif

                        /* calculate the energy quantization index */
                        enr_index = add( enr, 512 /* Q8(2.0) */ );                                   /* enr + 2.0 */
+0 −127
Original line number Diff line number Diff line
@@ -1163,103 +1163,6 @@ void generate_comfort_noise_enc_fx(
    return;
}

#ifndef HARMONIZE_2539_cng_energy
/*-------------------------------------------------------------------*
 * cng_energy_fx()
 *
 *
 *-------------------------------------------------------------------*/

/*! r: CNG energy */
Word16 cng_energy_fx(
    const Word16 element_mode, /* i  : element mode                 Q0*/
    const Word16 bwidth,       /* i  : audio bandwidh               Q0*/
    const Word16 CNG_mode,     /* i  : mode for DTX configuration   Q0*/
    const Word16 CNG_att,      /* i  : attenuation factor for CNG   Q7*/
    const Word16 *exc,         /* i  : input signal                 Q_new*/
    const Word16 len,          /* i  : vector length                Q0*/
    const Word16 Q_new         /* i  : Input scaling                */
)
{
    Word16 i, maxv, scale;
    Word16 hi, lo, enr, tmp16, att;
    const Word16 *pt_res;
    Word32 L_ener, L_tmp;

    maxv = 0;
    move16();
    FOR( i = 0; i < len; i++ )
    {
        maxv = s_max( maxv, abs_s( exc[i] ) );
    }
    scale = norm_s( maxv );
    pt_res = exc;
    L_ener = L_deposit_l( 1 );
    IF( EQ_16( len, L_FRAME ) )
    {
        FOR( i = 0; i < 128; i++ )
        {
            tmp16 = shl( *pt_res, scale );
            L_tmp = L_mult0( tmp16, tmp16 );
            pt_res++;
            tmp16 = shl( *pt_res, scale );
            L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */
            pt_res++;
            L_ener = L_add( L_ener, L_shr( L_tmp, 7 ) ); /* 2*(Q_new+scale)+1, divide by L_frame done here */
        }
    }
    ELSE /* L_FRAME16k */
    {
        FOR( i = 0; i < 160; i++ )
        {
            tmp16 = shl( *pt_res, scale );
            L_tmp = L_mult0( tmp16, tmp16 );
            pt_res++;
            tmp16 = shl( *pt_res, scale );
            L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) */
            pt_res++;
            L_ener = L_add( L_ener, L_shr( Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 7 ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */
        }
    }

    hi = norm_l( L_ener );
    lo = Log2_norm_lc( L_shl( L_ener, hi ) );
    hi = sub( 30, add( hi, shl( add( Q_new, scale ), 1 ) ) ); /* log2 exp in Q2*(Q_new+scale) */
    L_tmp = L_Comp( hi, lo );                                 /* Q16 */
    enr = round_fx( L_shl( L_tmp, 8 ) );                      /* Q8 (16+8-16) */

    /* decrease the energy in case of WB input */
    test();
    IF( EQ_16( element_mode, IVAS_CPE_DFT ) || EQ_16( element_mode, IVAS_CPE_TD ) )
    {
        (void) CNG_att;
    }
    ELSE IF( NE_16( bwidth, NB ) )
    {
        IF( EQ_16( bwidth, WB ) )
        {
            IF( CNG_mode >= 0 )
            {
                /* Bitrate adapted attenuation */
                att = ENR_ATT_fx[CNG_mode];
            }
            ELSE
            {
                /* Use least attenuation for higher bitrates */
                att = ENR_ATT_fx[4];
            }
        }
        ELSE
        {
            att = 384;
            move16(); /*Q8*/
        }
        enr = sub( enr, att );
    }

    return enr;
}
#endif

/*-------------------------------------------------------------------*
 * cng_energy_ivas_fx()
@@ -1268,11 +1171,7 @@ Word16 cng_energy_fx(
 *-------------------------------------------------------------------*/

/*! r: CNG energy */
#ifdef HARMONIZE_2539_cng_energy
Word16 cng_energy_fx(
#else
Word16 cng_energy_ivas_fx(
#endif
    const Word16 element_mode, /* i  : element mode                   Q0*/
    const Word16 bwidth,       /* i  : audio bandwidh                 Q0*/
    const Word16 CNG_mode,     /* i  : mode for DTX configuration     Q0*/
@@ -1286,13 +1185,11 @@ Word16 cng_energy_ivas_fx(
    Word16 hi, lo, enr, tmp16, att;
    const Word16 *pt_res;
    Word32 L_ener, L_tmp;
#ifdef HARMONIZE_2539_cng_energy
    Word64 W_ener = W_shr( W_deposit32_h( 1 ), 1 );
    if ( EQ_16( element_mode, EVS_MONO ) )
    {
        W_ener = W_neg( W_ener );
    }
#endif

    maxv = 0;
    move16();
@@ -1304,7 +1201,6 @@ Word16 cng_energy_ivas_fx(
    pt_res = exc;
    L_ener = L_deposit_l( 1 );

#ifdef HARMONIZE_2539_cng_energy
    Word16 scale_tmp;
    Word32 scale_tmp32;

@@ -1317,13 +1213,11 @@ Word16 cng_energy_ivas_fx(
        move16();
        scale_tmp32 = L_shr( 0x40000000, 7 - 1 );
    }
#endif

    IF( EQ_16( len, L_FRAME ) )
    {
        FOR( i = 0; i < 128; i++ )
        {
#ifdef HARMONIZE_2539_cng_energy
            tmp16 = shl( *pt_res, scale_tmp );
            L_tmp = L_mult0( tmp16, tmp16 );
            pt_res++;
@@ -1331,22 +1225,12 @@ Word16 cng_energy_ivas_fx(
            L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 );
            pt_res++;
            W_ener = W_msu0_32_32( W_ener, L_tmp, scale_tmp32 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */
#else
            tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4
            L_tmp = L_mult0( tmp16, tmp16 );
            pt_res++;
            tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4
            L_tmp = L_mac0( L_tmp, tmp16, tmp16 );   /* 2*(Q_new+scale) + 7 */
            pt_res++;
            L_ener = L_add( L_ener, L_tmp ); /* 2*(Q_new+scale)+1, divide by L_frame done here */
#endif
        }
    }
    ELSE /* L_FRAME16k */
    {
        FOR( i = 0; i < 160; i++ )
        {
#ifdef HARMONIZE_2539_cng_energy
            tmp16 = shl( *pt_res, scale_tmp );
            L_tmp = L_mult0( tmp16, tmp16 );
            pt_res++;
@@ -1354,18 +1238,8 @@ Word16 cng_energy_ivas_fx(
            L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 );
            pt_res++;
            W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), scale_tmp32 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */
#else
            tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4
            L_tmp = L_mult( tmp16, tmp16 );
            pt_res++;
            tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4
            L_tmp = L_mac( L_tmp, tmp16, tmp16 );    /* 2*(Q_new+scale) - 7 */
            pt_res++;
            L_ener = L_add( L_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ) ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */
#endif
        }
    }
#ifdef HARMONIZE_2539_cng_energy
    L_ener = L_shl( W_extract_h( W_ener ), 1 );
    if ( EQ_16( element_mode, EVS_MONO ) )
    {
@@ -1376,7 +1250,6 @@ Word16 cng_energy_ivas_fx(
    {
        L_ener = L_shl( L_ener, 1 );
    }
#endif

    hi = norm_l( L_ener );
    lo = Log2_norm_lc( L_shl( L_ener, hi ) );
+0 −11
Original line number Diff line number Diff line
@@ -3794,17 +3794,6 @@ void writeLPCparam_fx(
    const Word16 no_param_lpc,     /* i  : number of LPC parameters    */
    Word16 *nbits_lpc              /* o  : LPC bits written            */
);
#ifndef HARMONIZE_2539_cng_energy
Word16 cng_energy_ivas_fx(
    const Word16 element_mode, /* i  : element mode                   */
    const Word16 bwidth,       /* i  : audio bandwidh                 */
    const Word16 CNG_mode,     /* i  : mode for DTX configuration     */
    const Word16 CNG_att,      /* i  : attenuation factor for CNG  Q7 */
    const Word16 *exc,         /* i  : input signal                   */
    const Word16 len,          /* i  : vector length                  */
    const Word16 Q_new         /* i  : Input scaling                  */
);
#endif

void SynthesisSTFT_enc_ivas_fx(
    Word32 *fftBuffer,        /* i    : pointer to FFT bins */