Commit 9aa816c4 authored by lefort's avatar lefort
Browse files

Fix 1511 - POC renorm cleaned and tuned.

parent f073b350
Loading
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -95,8 +95,7 @@
#define FIX_1481_HARDCODE_DIV                          /* FhG: hardcode division results in stereo_dmx_evs_init_encoder_fx() */
#define VEC_ARITH_OPT_v1
#define FIX_1486_IND_SHB_RES                   /* VA: Fix for issue 1486: align the usage of IND_SHB_RES_GS indices with float code */
#define FIX_1511_RENORM
#define FIX_1511_WMOPS
#define FIX_1511_POC_RENORM                    /* NTT: Fix for issue 1511: Renorm for POC. */

#define TEST_HR
#define REMOVE_EVS_DUPLICATES                   /* remove core-coder duplicated functions, ACELP low-band decoder */
+57 −132
Original line number Diff line number Diff line
@@ -98,6 +98,11 @@

#define STEREO_DMX_EVS_TRNS_EGY_FORGETTING_Q15 24576

#ifdef FIX_1511_POC_RENORM
#define STEREO_DMX_EVS_POC_RENORM_TH    33554432 // 65536 << 9
#define STEREO_DMX_EVS_POC_RENORM_SHIFT 3
#endif

const Word32 ipd_ff_Q31[STEREO_DMX_EVS_NB_SUBBAND_MAX] = {
    2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264,
    2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264, 2027355264,
@@ -223,10 +228,6 @@ void estimate_itd_wnd_fft_fx(
    Word16 step, bias;
    Word16 rshift;

#ifdef FIX_1511_WMOPS
	push_wmops("estimate_itd_wnd_fft_fx");
#endif

    n0 = shr( input_frame, 1 );
    IF( EQ_16( input_frame, L_FRAME16k ) )
    {
@@ -273,10 +274,6 @@ void estimate_itd_wnd_fft_fx(
    speci[n0] = 0;
    move32();

#ifdef FIX_1511_WMOPS
	pop_wmops();
#endif

    return;
}

@@ -330,10 +327,6 @@ static void calc_poc_fx(
    Word64 W_tmp;
    Word16 W_tmp_q;

#ifdef FIX_1511_WMOPS
	push_wmops("calc_poc_fx");
#endif

    /* Initialization */
    // iN = 1.0f / (float) input_frame;
    s = hPOC->sin_fx;
@@ -424,20 +417,16 @@ static void calc_poc_fx(
            Rr = L_add( L_add( specRr[i], Mpy_32_32_r( specLr[i], eps_cos ) ), Mpy_32_32_r( specLi[i], eps_sin ) );
            Ri = L_add( L_sub( specRi[i], Mpy_32_32_r( specLr[i], eps_sin ) ), Mpy_32_32_r( specLi[i], eps_cos ) );

#ifdef FIX_1511_RENORM
			{
				Word32 TH1 = 65536 * 512;
				Word16 SHIFT1 = 4;
				IF((LT_32(L_abs(Lr), TH1)) &&
					(LT_32(L_abs(Li), TH1)) &&
					(LT_32(L_abs(Rr), TH1)) &&
					(LT_32(L_abs(Ri), TH1)))
#ifdef FIX_1511_POC_RENORM
            IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Rr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Ri ), STEREO_DMX_EVS_POC_RENORM_TH ) ) )
            {
					Lr = L_shl(Lr, SHIFT1);
					Li = L_shl(Li, SHIFT1);
					Rr = L_shl(Rr, SHIFT1);
					Ri = L_shl(Ri, SHIFT1);
				}
                Lr = L_shl( Lr, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Li = L_shl( Li, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Rr = L_shl( Rr, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Ri = L_shl( Ri, STEREO_DMX_EVS_POC_RENORM_SHIFT );
            }
#endif

@@ -453,20 +442,16 @@ static void calc_poc_fx(
                Rr = L_add( L_sub( specRr[j], Mpy_32_32_r( specLr[j], eps_cos ) ), Mpy_32_32_r( specLi[j], eps_sin ) );
                Ri = L_sub( L_sub( specRi[j], Mpy_32_32_r( specLr[j], eps_sin ) ), Mpy_32_32_r( specLi[j], eps_cos ) );

#ifdef FIX_1511_RENORM
				{
					Word32 TH1 = 65536 * 512;
					Word16 SHIFT1 = 4;
					IF((LT_32(L_abs(Lr), TH1)) &&
						(LT_32(L_abs(Li), TH1)) &&
						(LT_32(L_abs(Rr), TH1)) &&
						(LT_32(L_abs(Ri), TH1)))
#ifdef FIX_1511_POC_RENORM
                IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                    ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                    ( LT_32( L_abs( Rr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                    ( LT_32( L_abs( Ri ), STEREO_DMX_EVS_POC_RENORM_TH ) ) )
                {
						Lr = L_shl(Lr, SHIFT1);
						Li = L_shl(Li, SHIFT1);
						Rr = L_shl(Rr, SHIFT1);
						Ri = L_shl(Ri, SHIFT1);
					}
                    Lr = L_shl( Lr, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                    Li = L_shl( Li, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                    Rr = L_shl( Rr, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                    Ri = L_shl( Ri, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                }
#endif

@@ -491,20 +476,16 @@ static void calc_poc_fx(
            Rr = L_add( L_add( specRr[i], Mpy_32_32_r( specLr[i], eps_cos ) ), Mpy_32_32_r( specLi[i], eps_sin ) );
            Ri = L_add( L_sub( specRi[i], Mpy_32_32_r( specLr[i], eps_sin ) ), Mpy_32_32_r( specLi[i], eps_cos ) );

#ifdef FIX_1511_RENORM
#ifdef FIX_1511_POC_RENORM
            IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Rr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Ri ), STEREO_DMX_EVS_POC_RENORM_TH ) ) )
            {
				Word32 TH1 = 65536 * 512;
				Word16 SHIFT1 = 4;
				IF((LT_32(L_abs(Lr), TH1)) &&
					(LT_32(L_abs(Li), TH1)) &&
					(LT_32(L_abs(Rr), TH1)) &&
					(LT_32(L_abs(Ri), TH1)))
				{
					Lr = L_shl(Lr, SHIFT1);
					Li = L_shl(Li, SHIFT1);
					Rr = L_shl(Rr, SHIFT1);
					Ri = L_shl(Ri, SHIFT1);
				}
                Lr = L_shl( Lr, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Li = L_shl( Li, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Rr = L_shl( Rr, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Ri = L_shl( Ri, STEREO_DMX_EVS_POC_RENORM_SHIFT );
            }
#endif

@@ -519,20 +500,16 @@ static void calc_poc_fx(
            Rr = L_add( L_sub( specRr[j], Mpy_32_32_r( specLr[j], eps_cos ) ), Mpy_32_32_r( specLi[j], eps_sin ) );
            Ri = L_sub( L_sub( specRi[j], Mpy_32_32_r( specLr[j], eps_sin ) ), Mpy_32_32_r( specLi[j], eps_cos ) );

#ifdef FIX_1511_RENORM
			{
				Word32 TH1 = 65536 * 512;
				Word16 SHIFT1 = 4;
				IF((LT_32(L_abs(Lr), TH1)) &&
					(LT_32(L_abs(Li), TH1)) &&
					(LT_32(L_abs(Rr), TH1)) &&
					(LT_32(L_abs(Ri), TH1)))
#ifdef FIX_1511_POC_RENORM
            IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Rr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) &&
                ( LT_32( L_abs( Ri ), STEREO_DMX_EVS_POC_RENORM_TH ) ) )
            {
					Lr = L_shl(Lr, SHIFT1);
					Li = L_shl(Li, SHIFT1);
					Rr = L_shl(Rr, SHIFT1);
					Ri = L_shl(Ri, SHIFT1);
				}
                Lr = L_shl( Lr, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Li = L_shl( Li, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Rr = L_shl( Rr, STEREO_DMX_EVS_POC_RENORM_SHIFT );
                Ri = L_shl( Ri, STEREO_DMX_EVS_POC_RENORM_SHIFT );
            }
#endif

@@ -1207,10 +1184,6 @@ static void calc_poc_fx(
        }
    }

#ifdef FIX_1511_WMOPS
	pop_wmops();
#endif

    return;
}

@@ -1231,10 +1204,6 @@ static Word32 find_poc_peak_fx(
    Word32 Q_fx[CPE_CHANNELS], aQ_fx[CPE_CHANNELS], cQ_fx[CPE_CHANNELS], width_fx, *peak_width_fx, *peakQ_fx, cconfidence_fx, *P_fx, tmpf_fx, eps2_fx;
    Word16 tmpf_e = 0, eps2_e = 0, Q_e[CPE_CHANNELS], eps_e = 15, peakQ_e[CPE_CHANNELS];

#ifdef FIX_1511_WMOPS
	push_wmops("find_poc_peak_fx");
#endif

    move16();
    move16();
    move16();
@@ -1525,10 +1494,6 @@ static Word32 find_poc_peak_fx(
    hPOC->confidence_fx = L_add( cconfidence_var1, L_shl( cconfidence_var2, 1 ) );                                                                                      // Q31
    move32();

#ifdef FIX_1511_WMOPS
	pop_wmops();
#endif

    return hPOC->confidence_fx;
}

@@ -1554,10 +1519,6 @@ static ivas_error estimate_itd_fx(
    Word16 rfft_coef_step;
    ivas_error error;

#ifdef FIX_1511_WMOPS
	push_wmops("estimate_itd_fx");
#endif

    error = IVAS_ERR_OK;
    move32();

@@ -1614,10 +1575,6 @@ static ivas_error estimate_itd_fx(
    *corr = round_fx( find_poc_peak_fx( hPOC, itd, input_frame, STEREO_DMX_EVS_POC_W_FORGETTING_FX ) );
    move16();

#ifdef FIX_1511_WMOPS
	pop_wmops();
#endif

    return error;
}

@@ -1639,10 +1596,6 @@ static void weighted_ave_fx(
    Word16 i, len;
    Word32 gain_tmp_fx = 0, gain_sub_fx;

#ifdef FIX_1511_WMOPS
	push_wmops("weighted_ave_fx");
#endif

    move32();
    len = shr( input_frame, 4 );
    gain_sub_fx = L_sub( gain_fx, old_gain_fx );
@@ -1658,10 +1611,6 @@ static void weighted_ave_fx(
        move32();
    }

#ifdef FIX_1511_WMOPS
	pop_wmops();
#endif

    return;
}
/*-------------------------------------------------------------------*
@@ -1682,10 +1631,6 @@ static void calc_energy_fx(
    Word16 i, adaptlen;
    Word64 E_fx;

#ifdef FIX_1511_WMOPS
	push_wmops("calc_energy_fx");
#endif

    /* Initialization */
    E_fx = 0;
    move32();
@@ -1748,10 +1693,6 @@ static void calc_energy_fx(
    *energy_fx = BASOP_Util_Add_Mant32Exp( Mpy_32_32( *energy_fx, ratio_float_fx ), *energy_fx_e, Mpy_32_32( temp32, L_sub( MAX_32, ratio_float_fx ) ), sub( 31, q_temp32 ), energy_fx_e );
    move32();

#ifdef FIX_1511_WMOPS
	pop_wmops();
#endif

    return;
}

@@ -1772,10 +1713,6 @@ static void adapt_gain_fx(
    Word16 i, len;
    Word32 gain_tmp_fx, gain_sub_fx;

#ifdef FIX_1511_WMOPS
	push_wmops("adapt_gain_fx");
#endif

    len = shr( input_frame, 4 );
    //  gain_sub = gain - old_gain;
    gain_sub_fx = L_sub( gain_fx, old_gain_fx ); // Q31
@@ -1794,10 +1731,6 @@ static void adapt_gain_fx(
        move32();
    }

#ifdef FIX_1511_WMOPS
	pop_wmops();
#endif

    return;
}

@@ -1827,10 +1760,6 @@ static void create_M_signal_fx(
    Word16 temp_e;
    Word16 temp_e_1, temp_e_2;

#ifdef FIX_1511_WMOPS
	push_wmops("create_M_signal_fx");
#endif

    /* Initialization */
    eps_fx = 1024; // 1024.0f in Q0
    move32();
@@ -1896,10 +1825,6 @@ static void create_M_signal_fx(
    w_prev_fx[2] = amp_mod_fx[1];
    move32();

#ifdef FIX_1511_WMOPS
	pop_wmops();
#endif

    return;
}

@@ -1938,7 +1863,7 @@ void stereo_dmx_evs_enc_fx(
    Word64 W_tmp;
    Word16 W_tmp_q;

#ifdef FIX_1511_WMOPS
#ifdef FIX_1511_POC_RENORM
    push_wmops( "stereo_dmx_evs_enc_fx" );
#endif

@@ -2293,7 +2218,7 @@ void stereo_dmx_evs_enc_fx(

    Copy_Scale_sig32_16( p_dmx_data, data, n_samples, 5 ); // Q26->Q15

#ifdef FIX_1511_WMOPS
#ifdef FIX_1511_POC_RENORM
    pop_wmops();
#endif