Commit 5b180788 authored by Fabian Bauer's avatar Fabian Bauer
Browse files

harmonize cng_energy_fx

parent 28f05615
Loading
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -95,10 +95,6 @@
#define HARMONIZE_2499_CONFIGUREFDCNGDEC                /* FhG: basop issue 2499: harmonoize configureFdCngDec */
#define FIX_BASOP_2530_IVAS_DECISION_MAT                /* VA: Fix ambiguous usage of extract_l() */
#define HARMONIZE_2539_cng_energy                       /* FhG: basop issue 2499: harmonoize cng_energy */
#ifdef HARMONIZE_2539_cng_energy
#define HARMONIZE_2539_cng_energy_msu0
//#define HARMONIZE_2539_cng_energy_mac
#endif

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

+4 −0
Original line number Diff line number Diff line
@@ -434,7 +434,11 @@ 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 */
+54 −23
Original line number Diff line number Diff line
@@ -1169,7 +1169,7 @@ void generate_comfort_noise_enc_fx(
 *
 *
 *-------------------------------------------------------------------*/

#ifndef HARMONIZE_2539_cng_energy
/*! r: CNG energy */
Word16 cng_energy_fx(
    const Word16 element_mode, /* i  : element mode                 Q0*/
@@ -1279,14 +1279,19 @@ Word16 cng_energy_fx(
    return enr;
}


/*-------------------------------------------------------------------*
 * cng_energy_ivas_fx()
 *
 *
 *-------------------------------------------------------------------*/

#endif
/*! 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*/
@@ -1301,8 +1306,13 @@ Word16 cng_energy_ivas_fx(
    const Word16 *pt_res;
    Word32 L_ener, L_tmp;
#ifdef HARMONIZE_2539_cng_energy
    Word16 scale_tmp;
    Word32 scale_tmp32;
    Word64 W_ener = W_shr( W_deposit32_h( 1 ), 1 );
    move64();
    if ( EQ_16( element_mode, EVS_MONO ) )
    {
        W_ener = W_neg( W_ener );
    }
#endif

    maxv = 0;
@@ -1314,54 +1324,74 @@ Word16 cng_energy_ivas_fx(
    scale = norm_s( maxv );
    pt_res = exc;
    L_ener = L_deposit_l( 1 );
#ifdef HARMONIZE_2539_cng_energy
    scale_tmp = scale;
    scale_tmp32 = L_shr( 0x40000000, 7 - 1 );
    move16();
    IF( GT_16( element_mode, EVS_MONO ) )
    {
        scale_tmp = sub( scale, 4 );
        scale_tmp32 = 0x80000000;
    }
#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++;

            tmp16 = shl( *pt_res, scale_tmp );
            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++;
#ifdef HARMONIZE_2539_cng_energy
            W_ener = W_msu0_32_32( W_ener, L_tmp, 0x80000000 ); /* 2*(Q_new+scale)+1, divide by L_frame done here */
#else
            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++ )
        {
            tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4
#ifdef HARMONIZE_2539_cng_energy
        {
            tmp16 = shl( *pt_res, scale_tmp );
            L_tmp = L_mult0( tmp16, tmp16 );
            pt_res++;
            tmp16 = shl( *pt_res, scale_tmp );
            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 */
        }
        if ( NE_16( element_mode, EVS_MONO ) )
        {
            W_ener = W_shl( W_ener, 1 );
        }
#else
        {
            tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4
            L_tmp = L_mult( tmp16, tmp16 );
#endif
            pt_res++;
            tmp16 = shl( *pt_res, sub( scale, 4 ) ); // Q_new + scale - 4
#ifdef HARMONIZE_2539_cng_energy
            L_tmp = L_mac0_sat( L_tmp, tmp16, tmp16 ); /* 2*(Q_new+scale) - 7 */
#else
            L_tmp = L_mac( L_tmp, tmp16, tmp16 );    /* 2*(Q_new+scale) - 7 */
#endif
            pt_res++;
#ifdef HARMONIZE_2539_cng_energy
            W_ener = W_msu0_32_32( W_ener, Mult_32_16( L_tmp, 26214 /* 256/320, Q15 */ ), 0x80000000 ); /* 2*(Q_new+scale)+15+1-16+1, divide by L_frame done here */
#else
            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
        }
#endif
    }
#ifdef HARMONIZE_2539_cng_energy
    L_ener = L_shl( W_extract_h( W_ener ), 1 );
    if ( NE_16( len, L_FRAME ) )
    {
        L_ener = L_shl( L_ener, 1 );
    }
    L_ener = L_shl( W_extract_h( W_neg( W_ener ) ), 1 );
    test();
#endif
    hi = norm_l( L_ener );
    lo = Log2_norm_lc( L_shl( L_ener, hi ) );
@@ -1404,6 +1434,7 @@ Word16 cng_energy_ivas_fx(
}



void perform_noise_estimation_enc_fx(
    Word32 *band_energies, /* i  : energy in critical bands without minimum noise floor MODE2_E_MIN    band_energies_exp*/
    Word16 band_energies_exp,
+2 −1
Original line number Diff line number Diff line
@@ -3861,6 +3861,7 @@ void writeLPCparam_fx(
    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                 */
@@ -3870,7 +3871,7 @@ Word16 cng_energy_ivas_fx(
    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 */