Loading lib_dec/ivas_cpe_dec_fx.c +4 −4 Original line number Diff line number Diff line Loading @@ -729,8 +729,8 @@ ivas_error ivas_cpe_dec_fx( hCPE->hStereoDft->q_res_cod_mem_fx = hCPE->hStereoDft->q_dft; move16(); stereo_dft_unify_dmx_fx( hCPE->hStereoDft, sts[0], DFT_fx, hCPE->input_mem_fx[1], hCPE->hStereoCng->prev_sid_nodata ); scale_sig32( hCPE->hStereoDft->res_cod_mem_fx, STEREO_DFT_OVL_8k, sub( Q16, hCPE->hStereoDft->q_res_cod_mem_fx ) ); // Q16 hCPE->hStereoDft->q_res_cod_mem_fx = Q16; scale_sig32( hCPE->hStereoDft->res_cod_mem_fx, STEREO_DFT_OVL_8k, sub( Q15, hCPE->hStereoDft->q_res_cod_mem_fx ) ); // Q15 hCPE->hStereoDft->q_res_cod_mem_fx = Q15; move16(); } ELSE Loading @@ -754,8 +754,8 @@ ivas_error ivas_cpe_dec_fx( move16(); } stereo_dft_dec_fx( hCPE->hStereoDft, sts[0], DFT_fx, hCPE->input_mem_fx[1], hCPE->hStereoCng, 0, 0, 0, 0, 0, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); scale_sig32( hCPE->hStereoDft->res_cod_mem_fx, STEREO_DFT_OVL_8k, sub( Q16, hCPE->hStereoDft->q_res_cod_mem_fx ) ); // Q16 hCPE->hStereoDft->q_res_cod_mem_fx = Q16; scale_sig32( hCPE->hStereoDft->res_cod_mem_fx, STEREO_DFT_OVL_8k, sub( Q15, hCPE->hStereoDft->q_res_cod_mem_fx ) ); // Q15 hCPE->hStereoDft->q_res_cod_mem_fx = Q15; move16(); } Loading lib_dec/ivas_stereo_dft_dec_fx.c +8 −8 Original line number Diff line number Diff line Loading @@ -146,7 +146,7 @@ void stereo_dft_dec_reset_fx( set16_fx( hStereoDft->res_cod_mode, hStereoDft->hConfig->res_cod_mode, STEREO_DFT_DEC_DFT_NB ); hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->hConfig->res_cod_mode]; set32_fx( hStereoDft->res_cod_mem_fx, 0, STEREO_DFT_OVL_8k ); hStereoDft->q_res_cod_mem_fx = Q16; hStereoDft->q_res_cod_mem_fx = Q15; move16(); hStereoDft->res_pred_band_min = s_max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); Loading Loading @@ -1357,7 +1357,7 @@ void stereo_dft_dec_res_fx( IF( EQ_16( hCPE->hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1], STEREO_DFT_RES_COD_OFF ) ) { set32_fx( hCPE->hStereoDft->res_cod_mem_fx, 0, STEREO_DFT_OVL_8k ); hCPE->hStereoDft->q_res_cod_mem_fx = Q16; hCPE->hStereoDft->q_res_cod_mem_fx = Q15; move16(); set32_fx( hCPE->input_mem_fx[1], 0, NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) ); set16_fx( hCPE->hStereoDft->hBpf->pst_old_syn_fx, 0, STEREO_DFT_NBPSF_PIT_MAX_8k ); Loading @@ -1370,7 +1370,7 @@ void stereo_dft_dec_res_fx( scale_sig( win, L_FRAME8k + STEREO_DFT_OVL_8k, -1 ); Word16 q_shift = sub( hCPE->hStereoDft->q_res_cod_mem_fx, Q16 ); Word16 q_shift = sub( hCPE->hStereoDft->q_res_cod_mem_fx, Q15 ); IF( !prev_bfi ) { /*OLA*/ Loading @@ -1378,9 +1378,9 @@ void stereo_dft_dec_res_fx( FOR( i = 0; i < STEREO_DFT_OVL_8k; i++ ) { win[i] = extract_h( L_add( L_shr( hCPE->hStereoDft->res_cod_mem_fx[i], 1 ), L_shl( L_mult( win[i], hCPE->hStereoDft->win_8k_fx[i] ), q_shift ) ) ); /* q_res_cod_mem_fx -17 (q_shift -1)*/ win[i] = extract_h( L_add( hCPE->hStereoDft->res_cod_mem_fx[i], L_shl( L_mult( win[i], hCPE->hStereoDft->win_8k_fx[i] ), q_shift ) ) ); /* q_res_cod_mem_fx -17 (q_shift -1)*/ move16(); hCPE->hStereoDft->res_cod_mem_fx[i] = L_shl( L_mult( win[L_FRAME8k + i], hCPE->hStereoDft->win_8k_fx[STEREO_DFT_OVL_8k - 1 - i] ), 1 ); /* -1 +15 +1 +1 */ hCPE->hStereoDft->res_cod_mem_fx[i] = L_mult( win[L_FRAME8k + i], hCPE->hStereoDft->win_8k_fx[STEREO_DFT_OVL_8k - 1 - i] ); /* -1 +15 +1 */ move32(); } Loading @@ -1396,11 +1396,11 @@ void stereo_dft_dec_res_fx( move16(); FOR( i = 0; i < STEREO_DFT_OVL_8k; i++ ) { win[i] = extract_h( Madd_32_16( Mpy_32_16_1( L_shr( hCPE->hStereoDft->res_cod_mem_fx[i], 1 ), sub( MAX_16, mult( fac, fac ) ) ), win[i] = extract_h( Madd_32_16( Mpy_32_16_1( hCPE->hStereoDft->res_cod_mem_fx[i], sub( MAX_16, mult( fac, fac ) ) ), L_shl( L_mult( hCPE->hStereoDft->win_8k_fx[i], win[i] ), q_shift ), sub( MAX_16, mult( sub( MAX_16, fac ), sub( MAX_16, fac ) ) ) ) ); /* Q(q_shift -1) */ move16(); hCPE->hStereoDft->res_cod_mem_fx[i] = L_shl( L_mult( win[L_FRAME8k + i], hCPE->hStereoDft->win_8k_fx[STEREO_DFT_OVL_8k - 1 - i] ), 1 ); /* Q16 */ hCPE->hStereoDft->res_cod_mem_fx[i] = L_mult( win[L_FRAME8k + i], hCPE->hStereoDft->win_8k_fx[STEREO_DFT_OVL_8k - 1 - i] ); /* Q15 */ move32(); fac = add( fac, step ); } Loading @@ -1411,7 +1411,7 @@ void stereo_dft_dec_res_fx( v_shr_16( &win[STEREO_DFT_OVL_8k], negate( q_shift ), &win[STEREO_DFT_OVL_8k], L_FRAME8k ); } hCPE->hStereoDft->q_res_cod_mem_fx = Q16; hCPE->hStereoDft->q_res_cod_mem_fx = Q15; Copy( win, out_16, L_FRAME8k ); /* Q(q_shift -1 ) */ Loading lib_dec/ivas_stereo_switching_dec_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -1841,7 +1841,7 @@ void stereo_switching_dec( /* reset residual coding / ESF (secondary channel) */ set32_fx( hCPE->hStereoDft->res_cod_mem_fx, 0, STEREO_DFT_OVL_8k ); hCPE->hStereoDft->q_res_cod_mem_fx = Q16; hCPE->hStereoDft->q_res_cod_mem_fx = Q15; move16(); set32_fx( hCPE->input_mem_fx[1], 0, NS2SA_FX2( sts[0]->output_Fs, STEREO_DFT32MS_OVL_NS ) ); Loading lib_enc/gs_enc_fx.c +102 −49 File changed.Preview size limit exceeded, changes collapsed. Show changes lib_enc/guided_plc_enc_fx.c +66 −58 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ #include <stdint.h> #include "options.h" #include "cnst.h" //#include "prot_fx.h" #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ #include "stat_enc.h" Loading @@ -19,8 +18,8 @@ * *-------------------------------------------------------------------*/ static void coderLookAheadInnovation( Word16 A_3Q12[], /* input: coefficients NxAz[M+1] */ Word16 *pT, /* out: pitch */ Word16 A_3Q12[], /* input: coefficients NxAz[M+1] Q12*/ Word16 *pT, /* out: pitch Q0*/ PLC_ENC_EVS_HANDLE st, /* i/o: coder memory state */ Word16 *speechLookAhead_Qx, /* i: input speech in Q(st->Qold) */ Word16 *old_exc, /* i: input excitation in Q(st->Qold) */ Loading @@ -41,13 +40,18 @@ static void coderLookAheadInnovation( Word32 max_ps, max_ps_tmp; Word16 max_ps_e; Word16 tmp_loop; move32(); move16(); move16(); #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; move32(); #endif /* Debug init (not instrumented) */ T0_fx = -3000; move16(); subfr_len = shl( L_SUBFR, 1 ); /* 2*L_SUBFR */ if ( GT_16( L_FRAME16k, L_frame ) ) { Loading @@ -59,10 +63,10 @@ static void coderLookAheadInnovation( * - BASOP specific initialization. * *------------------------------------------------------------------------*/ /* initialization */ exc_Qx = exc_buf_Qx + L_EXC_MEM + 8; exc_Qx = exc_buf_Qx + L_EXC_MEM + 8; /* Q(st->Qold) */ FOR( i = 0; i < L_EXC_MEM + 8; i++ ) { exc_buf_Qx[i] = old_exc[i]; exc_buf_Qx[i] = old_exc[i]; /* Q(st->Qold) */ move16(); } Loading @@ -72,17 +76,17 @@ static void coderLookAheadInnovation( *------------------------------------------------------------------------*/ /* find LP residual signal for look-ahead part */ getLookAheadResSig( speechLookAhead_Qx, A_3Q12, exc_Qx, L_frame, 2 ); Scale_sig( exc_Qx, subfr_len, 1 ); Scale_sig( exc_Qx, subfr_len, 1 ); /* Q(st->Qold) + 1 */ /* find target signals */ prev_pitch = st->T0_4th; prev_pitch = st->T0_4th; /* Q0 */ move16(); /* find best candidate of pitch lag */ T0_fx = st->T0_4th; T0_fx = st->T0_4th; /* Q0 */ move16(); mantissa_max = -0x7fffffffL; mantissa_max = -0x7fffffffL; /* Q15 */ move32(); max_ps = -0x7fffffffL; max_ps = -0x7fffffffL; /* Q15 */ move32(); max_ps_e = 16; move16(); Loading @@ -90,14 +94,14 @@ static void coderLookAheadInnovation( /*find maximum*/ exc_max = 0; move16(); tmp_loop = s_min( -prev_pitch + search_range + subfr_len, 0 ); tmp_loop = s_min( -prev_pitch + search_range + subfr_len, 0 ); /* Q0 */ FOR( i = -prev_pitch - search_range; i < tmp_loop; i++ ) { exc_max = s_max( exc_Qx[i], exc_max ); exc_max = s_max( exc_Qx[i], exc_max ); /* Q(st->Qold) + 1 */ } FOR( i = 0; i < subfr_len; i++ ) { exc_max = s_max( exc_max, exc_Qx[i] ); exc_max = s_max( exc_max, exc_Qx[i] ); /* Q(st->Qold) + 1 */ } /*calculate scaling factor for optimal precision and assure no overflow in dotproduct*/ exc_sh = sub( 15, norm_s( sub( subfr_len, 1 ) ) ); /*ceil(ld(subfr_len))*/ Loading @@ -105,15 +109,15 @@ static void coderLookAheadInnovation( exc_sh = shr( add( exc_sh, 1 ), 1 ); /*scale buffer only where its needed*/ tmp_loop = s_min( -prev_pitch + search_range + subfr_len, 0 ); tmp_loop = s_min( -prev_pitch + search_range + subfr_len, 0 ); /* Q0 */ FOR( i = -prev_pitch - search_range; i < tmp_loop; i++ ) { exc_Qx[i] = shr( exc_Qx[i], exc_sh ); exc_Qx[i] = shr( exc_Qx[i], exc_sh ); /* Q(st->Qold) + 1 */ move16(); } FOR( i = 0; i < subfr_len; i++ ) { exc_Qx[i] = shr( exc_Qx[i], exc_sh ); exc_Qx[i] = shr( exc_Qx[i], exc_sh ); /* Q(st->Qold) + 1 */ move16(); } Loading @@ -122,7 +126,7 @@ static void coderLookAheadInnovation( move16(); FOR( i = -prev_pitch - search_range; i < -prev_pitch + search_range + subfr_len; i++ ) { alp_ini = L_mac( alp_ini, exc_Qx[i], exc_Qx[i] ); alp_ini = L_mac( alp_ini, exc_Qx[i], exc_Qx[i] ); /* 2*(Q(st->Qold) + 1) + 1 */ } FOR( i = -search_range; i < search_range; i++ ) Loading @@ -138,24 +142,24 @@ static void coderLookAheadInnovation( FOR( k = 0; k < subfr_len; k++ ) { ps = L_mac( ps, exc_Qx[k], exc_Qx[k - prev_pitch - i] ); ps = L_mac( ps, exc_Qx[k], exc_Qx[k - prev_pitch - i] ); /* 2*(Q(st->Qold) + 1) + 1 */ } /*calculate "small" dotproducts in order to subtract them from the "bigger" one*/ FOR( k = negate( add( prev_pitch, search_range ) ); k < -prev_pitch - i; k++ ) FOR( k = -( ( prev_pitch + search_range ) ); k < -prev_pitch - i; k++ ) { alp_s1 = L_mac( alp_s1, exc_Qx[k], exc_Qx[k] ); alp_s1 = L_mac( alp_s1, exc_Qx[k], exc_Qx[k] ); /* 2*(Q(st->Qold) + 1) + 1 */ } tmp_loop = sub( add( search_range, subfr_len ), prev_pitch ); FOR( k = +subfr_len - i - prev_pitch; k < tmp_loop; k++ ) { alp_s2 = L_mac( alp_s2, exc_Qx[k], exc_Qx[k] ); alp_s2 = L_mac( alp_s2, exc_Qx[k], exc_Qx[k] ); /* 2*(Q(st->Qold) + 1) + 1 */ } alp = L_sub( alp_ini, L_add( alp_s1, alp_s2 ) ); alp = L_max( alp, 1 ); /* alp must not be 0 */ alp_e = shl( exc_sh, 1 ); ps_e = shl( exc_sh, 1 ); alp = ISqrt32( alp, &alp_e ); alp = ISqrt32( alp, &alp_e ); /* Q31-alp_e */ ps = Mpy_32_16_1( ps, round_fx( alp ) ); /*alp_e+ps_e*/ ps_e = add( alp_e, ps_e ); Loading @@ -173,7 +177,7 @@ static void coderLookAheadInnovation( T0_fx = add( prev_pitch, i ); } } mantissa_max = max_ps; mantissa_max = max_ps; /* Q31-ps_e */ move32(); if ( mantissa_max < 0 ) { Loading Loading @@ -239,9 +243,9 @@ void enc_prm_side_Info_fx( void encoderSideLossSimulation_fx( Encoder_State *st, PLC_ENC_EVS_HANDLE hPlc_Ext, Word16 *lsf_q, /* Q1*1.28 */ Word16 *lsf_q, /* Qx2.56 */ const Word16 stab_fac, /* Q15 */ const Word16 calcOnlyISF, const Word16 calcOnlyISF, /* Q0 */ const Word16 L_frame ) { Word16 lspLocal_Q15[M]; Loading @@ -251,11 +255,11 @@ void encoderSideLossSimulation_fx( /* Decoder State Update */ IF( EQ_16( L_frame, L_FRAME_16k ) ) { lsf2lsp_fx( lsf_q, lspLocal_Q15, M, INT_FS_16k_FX ); lsf2lsp_fx( lsf_q, lspLocal_Q15, M, INT_FS_16k_FX ); /* Q15 */ } ELSE { lsf2lsp_fx( lsf_q, lspLocal_Q15, M, INT_FS_FX ); lsf2lsp_fx( lsf_q, lspLocal_Q15, M, INT_FS_FX ); /* Q15 */ } Loading @@ -263,8 +267,8 @@ void encoderSideLossSimulation_fx( st->narrowBand, st->sr_core ); Copy( st->mem_MA_fx, hPlc_Ext->mem_MA_14Q1, M ); Copy( st->mem_AR_fx, hPlc_Ext->mem_AR, M ); Copy( st->mem_MA_fx, hPlc_Ext->mem_MA_14Q1, M ); /* Qx2.56 */ Copy( st->mem_AR_fx, hPlc_Ext->mem_AR, M ); /* Qx2.56 */ /* ISF parameter processing for concealment */ Loading @@ -272,15 +276,15 @@ void encoderSideLossSimulation_fx( hPlc_Ext->stab_fac_Q15 = stab_fac; move16(); Copy( lsf_q, hPlc_Ext->lsfold_14Q1, M ); Copy( lspLocal_Q15, hPlc_Ext->lspold_Q15, M ); Copy( lsf_q, hPlc_Ext->lsfold_14Q1, M ); /* Qx2.56 */ Copy( lspLocal_Q15, hPlc_Ext->lspold_Q15, M ); /* Q15 */ IF( calcOnlyISF != 0 ) { /* ISF concealment simulation */ getConcealedLSF( hPlc_Ext, xsfBase, st->clas, L_frame ); hPlc_Ext->T0 = hPlc_Ext->T0_4th; hPlc_Ext->T0 = hPlc_Ext->T0_4th; /* Q0 */ move16(); } ELSE Loading @@ -300,9 +304,9 @@ void encoderSideLossSimulation_fx( getConcealedLP( hPlc_Ext, A_3Q12, xsfBase, st->clas, L_frame ); /* apply encoder side PLC simulation */ hPlc_Ext->pit_min = st->pit_min; hPlc_Ext->pit_min = st->pit_min; /* Q0 */ move16(); hPlc_Ext->pit_max = st->pit_max; hPlc_Ext->pit_max = st->pit_max; /* Q0 */ move16(); coderLookAheadInnovation( A_3Q12, &( hPlc_Ext->T0 ), hPlc_Ext, speechLookAhead_Qx, old_exc_Qx, L_frame ); } Loading Loading @@ -336,11 +340,11 @@ void GplcTcxEncSetup_fx( * *-------------------------------------------------------------------*/ Word16 encSideSpecPowDiffuseDetector_fx( Word16 *lsf_ref, Word16 *lsf_con, const Word32 sr_core, Word16 *prev_lsf4_mean, const Word8 sw, Word16 *lsf_ref, /* Qx2.56 */ Word16 *lsf_con, /* Qx2.56 */ const Word32 sr_core, /* Q0 */ Word16 *prev_lsf4_mean, /* Qx2.56 */ const Word8 sw, /* Q0 */ const Word16 coder_type ) { Word16 tmp; Loading @@ -355,14 +359,14 @@ Word16 encSideSpecPowDiffuseDetector_fx( /* calculate the mean of the lowest 4 LSFs */ L_tmp = L_mult( lsf_ref[0], 8192 /*1.0/4.0 Q15*/ ); L_tmp = L_mac( L_tmp, lsf_ref[1], 8192 /*1.0/4.0 Q15*/ ); L_tmp = L_mac( L_tmp, lsf_ref[2], 8192 /*1.0/4.0 Q15*/ ); lsf4_mean = mac_r( L_tmp, lsf_ref[3], 8192 /*1.0/4.0 Q15*/ ); L_tmp = L_mult( lsf_ref[0], 8192 /*1.0/4.0 Q15*/ ); /* Qx2.56 */ L_tmp = L_mac( L_tmp, lsf_ref[1], 8192 /*1.0/4.0 Q15*/ ); /* Qx2.56 */ L_tmp = L_mac( L_tmp, lsf_ref[2], 8192 /*1.0/4.0 Q15*/ ); /* Qx2.56 */ lsf4_mean = mac_r( L_tmp, lsf_ref[3], 8192 /*1.0/4.0 Q15*/ ); /* Qx2.56 */ IF( sw ) { Copy( lsf_con, lsf_mod, M ); Copy( lsf_con, lsf_mod, M ); /* Qx2.56 */ modify_lsf( lsf_mod, M, sr_core, 1 ); Loading @@ -372,28 +376,29 @@ Word16 encSideSpecPowDiffuseDetector_fx( cum_dist2 = 0; cnt_imprv = 0; move16(); IF( EQ_32( sr_core, INT_FS_16k ) ) { th = 2560; th = 2560; /* Qx2.56 */ move16(); /* LSF */ th_dif = 288; th_dif = 288; /* Qx2.56 */ move16(); /* LSF */ } ELSE { th = 2048; th = 2048; /* Qx2.56 */ move16(); /* LSF */ th_dif = 230; th_dif = 230; /* Qx2.56 */ move16(); /* LSF */ } FOR( i = 0; i < M; i++ ) { tmp = sub( lsf_con[i], lsf_ref[i] ); dist1 = L_mult( tmp, tmp ); dist1 = L_mult( tmp, tmp ); /* 2*(Qx2.56)+1 */ tmp = sub( lsf_mod[i], lsf_ref[i] ); dist2 = L_mult( tmp, tmp ); dist2 = L_mult( tmp, tmp ); /* 2*(Qx2.56)+1 */ if ( GT_32( dist1, dist2 ) ) { Loading @@ -409,6 +414,7 @@ Word16 encSideSpecPowDiffuseDetector_fx( test(); test(); test(); test(); if ( GT_32( cum_dist1, L_add( cum_dist2, Mpy_32_16_1( cum_dist2, 4915 ) ) ) && GT_16( sub( lsf4_mean, *prev_lsf4_mean ), th_dif ) && LT_16( *prev_lsf4_mean, th ) && GT_16( cnt_imprv, 2 ) && EQ_16( coder_type, GENERIC ) ) { idx = 1; Loading Loading @@ -438,17 +444,19 @@ void updateSpecPowDiffuseIdx_fx( Word16 k; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; move32(); #endif move32(); move16(); st->mean_gc[1] = st->gain_code[0]; min_gp = st->bpf_gainT[0]; st->mean_gc[1] = st->gain_code[0]; /* Q15 */ min_gp = st->bpf_gainT[0]; /* Q15 */ FOR( k = 1; k < 4; k++ ) { st->mean_gc[1] = L_add_o( st->mean_gc[1], st->gain_code[k], &Overflow ); move32(); min_gp = s_min( min_gp, st->bpf_gainT[k] ); } Loading @@ -460,5 +468,5 @@ void updateSpecPowDiffuseIdx_fx( st->glr_idx[0] = 0; } move16(); st->mean_gc[0] = st->mean_gc[1]; st->mean_gc[0] = st->mean_gc[1]; /* Q15 */ } Loading
lib_dec/ivas_cpe_dec_fx.c +4 −4 Original line number Diff line number Diff line Loading @@ -729,8 +729,8 @@ ivas_error ivas_cpe_dec_fx( hCPE->hStereoDft->q_res_cod_mem_fx = hCPE->hStereoDft->q_dft; move16(); stereo_dft_unify_dmx_fx( hCPE->hStereoDft, sts[0], DFT_fx, hCPE->input_mem_fx[1], hCPE->hStereoCng->prev_sid_nodata ); scale_sig32( hCPE->hStereoDft->res_cod_mem_fx, STEREO_DFT_OVL_8k, sub( Q16, hCPE->hStereoDft->q_res_cod_mem_fx ) ); // Q16 hCPE->hStereoDft->q_res_cod_mem_fx = Q16; scale_sig32( hCPE->hStereoDft->res_cod_mem_fx, STEREO_DFT_OVL_8k, sub( Q15, hCPE->hStereoDft->q_res_cod_mem_fx ) ); // Q15 hCPE->hStereoDft->q_res_cod_mem_fx = Q15; move16(); } ELSE Loading @@ -754,8 +754,8 @@ ivas_error ivas_cpe_dec_fx( move16(); } stereo_dft_dec_fx( hCPE->hStereoDft, sts[0], DFT_fx, hCPE->input_mem_fx[1], hCPE->hStereoCng, 0, 0, 0, 0, 0, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); scale_sig32( hCPE->hStereoDft->res_cod_mem_fx, STEREO_DFT_OVL_8k, sub( Q16, hCPE->hStereoDft->q_res_cod_mem_fx ) ); // Q16 hCPE->hStereoDft->q_res_cod_mem_fx = Q16; scale_sig32( hCPE->hStereoDft->res_cod_mem_fx, STEREO_DFT_OVL_8k, sub( Q15, hCPE->hStereoDft->q_res_cod_mem_fx ) ); // Q15 hCPE->hStereoDft->q_res_cod_mem_fx = Q15; move16(); } Loading
lib_dec/ivas_stereo_dft_dec_fx.c +8 −8 Original line number Diff line number Diff line Loading @@ -146,7 +146,7 @@ void stereo_dft_dec_reset_fx( set16_fx( hStereoDft->res_cod_mode, hStereoDft->hConfig->res_cod_mode, STEREO_DFT_DEC_DFT_NB ); hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->hConfig->res_cod_mode]; set32_fx( hStereoDft->res_cod_mem_fx, 0, STEREO_DFT_OVL_8k ); hStereoDft->q_res_cod_mem_fx = Q16; hStereoDft->q_res_cod_mem_fx = Q15; move16(); hStereoDft->res_pred_band_min = s_max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); Loading Loading @@ -1357,7 +1357,7 @@ void stereo_dft_dec_res_fx( IF( EQ_16( hCPE->hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1], STEREO_DFT_RES_COD_OFF ) ) { set32_fx( hCPE->hStereoDft->res_cod_mem_fx, 0, STEREO_DFT_OVL_8k ); hCPE->hStereoDft->q_res_cod_mem_fx = Q16; hCPE->hStereoDft->q_res_cod_mem_fx = Q15; move16(); set32_fx( hCPE->input_mem_fx[1], 0, NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) ); set16_fx( hCPE->hStereoDft->hBpf->pst_old_syn_fx, 0, STEREO_DFT_NBPSF_PIT_MAX_8k ); Loading @@ -1370,7 +1370,7 @@ void stereo_dft_dec_res_fx( scale_sig( win, L_FRAME8k + STEREO_DFT_OVL_8k, -1 ); Word16 q_shift = sub( hCPE->hStereoDft->q_res_cod_mem_fx, Q16 ); Word16 q_shift = sub( hCPE->hStereoDft->q_res_cod_mem_fx, Q15 ); IF( !prev_bfi ) { /*OLA*/ Loading @@ -1378,9 +1378,9 @@ void stereo_dft_dec_res_fx( FOR( i = 0; i < STEREO_DFT_OVL_8k; i++ ) { win[i] = extract_h( L_add( L_shr( hCPE->hStereoDft->res_cod_mem_fx[i], 1 ), L_shl( L_mult( win[i], hCPE->hStereoDft->win_8k_fx[i] ), q_shift ) ) ); /* q_res_cod_mem_fx -17 (q_shift -1)*/ win[i] = extract_h( L_add( hCPE->hStereoDft->res_cod_mem_fx[i], L_shl( L_mult( win[i], hCPE->hStereoDft->win_8k_fx[i] ), q_shift ) ) ); /* q_res_cod_mem_fx -17 (q_shift -1)*/ move16(); hCPE->hStereoDft->res_cod_mem_fx[i] = L_shl( L_mult( win[L_FRAME8k + i], hCPE->hStereoDft->win_8k_fx[STEREO_DFT_OVL_8k - 1 - i] ), 1 ); /* -1 +15 +1 +1 */ hCPE->hStereoDft->res_cod_mem_fx[i] = L_mult( win[L_FRAME8k + i], hCPE->hStereoDft->win_8k_fx[STEREO_DFT_OVL_8k - 1 - i] ); /* -1 +15 +1 */ move32(); } Loading @@ -1396,11 +1396,11 @@ void stereo_dft_dec_res_fx( move16(); FOR( i = 0; i < STEREO_DFT_OVL_8k; i++ ) { win[i] = extract_h( Madd_32_16( Mpy_32_16_1( L_shr( hCPE->hStereoDft->res_cod_mem_fx[i], 1 ), sub( MAX_16, mult( fac, fac ) ) ), win[i] = extract_h( Madd_32_16( Mpy_32_16_1( hCPE->hStereoDft->res_cod_mem_fx[i], sub( MAX_16, mult( fac, fac ) ) ), L_shl( L_mult( hCPE->hStereoDft->win_8k_fx[i], win[i] ), q_shift ), sub( MAX_16, mult( sub( MAX_16, fac ), sub( MAX_16, fac ) ) ) ) ); /* Q(q_shift -1) */ move16(); hCPE->hStereoDft->res_cod_mem_fx[i] = L_shl( L_mult( win[L_FRAME8k + i], hCPE->hStereoDft->win_8k_fx[STEREO_DFT_OVL_8k - 1 - i] ), 1 ); /* Q16 */ hCPE->hStereoDft->res_cod_mem_fx[i] = L_mult( win[L_FRAME8k + i], hCPE->hStereoDft->win_8k_fx[STEREO_DFT_OVL_8k - 1 - i] ); /* Q15 */ move32(); fac = add( fac, step ); } Loading @@ -1411,7 +1411,7 @@ void stereo_dft_dec_res_fx( v_shr_16( &win[STEREO_DFT_OVL_8k], negate( q_shift ), &win[STEREO_DFT_OVL_8k], L_FRAME8k ); } hCPE->hStereoDft->q_res_cod_mem_fx = Q16; hCPE->hStereoDft->q_res_cod_mem_fx = Q15; Copy( win, out_16, L_FRAME8k ); /* Q(q_shift -1 ) */ Loading
lib_dec/ivas_stereo_switching_dec_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -1841,7 +1841,7 @@ void stereo_switching_dec( /* reset residual coding / ESF (secondary channel) */ set32_fx( hCPE->hStereoDft->res_cod_mem_fx, 0, STEREO_DFT_OVL_8k ); hCPE->hStereoDft->q_res_cod_mem_fx = Q16; hCPE->hStereoDft->q_res_cod_mem_fx = Q15; move16(); set32_fx( hCPE->input_mem_fx[1], 0, NS2SA_FX2( sts[0]->output_Fs, STEREO_DFT32MS_OVL_NS ) ); Loading
lib_enc/gs_enc_fx.c +102 −49 File changed.Preview size limit exceeded, changes collapsed. Show changes
lib_enc/guided_plc_enc_fx.c +66 −58 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ #include <stdint.h> #include "options.h" #include "cnst.h" //#include "prot_fx.h" #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ #include "stat_enc.h" Loading @@ -19,8 +18,8 @@ * *-------------------------------------------------------------------*/ static void coderLookAheadInnovation( Word16 A_3Q12[], /* input: coefficients NxAz[M+1] */ Word16 *pT, /* out: pitch */ Word16 A_3Q12[], /* input: coefficients NxAz[M+1] Q12*/ Word16 *pT, /* out: pitch Q0*/ PLC_ENC_EVS_HANDLE st, /* i/o: coder memory state */ Word16 *speechLookAhead_Qx, /* i: input speech in Q(st->Qold) */ Word16 *old_exc, /* i: input excitation in Q(st->Qold) */ Loading @@ -41,13 +40,18 @@ static void coderLookAheadInnovation( Word32 max_ps, max_ps_tmp; Word16 max_ps_e; Word16 tmp_loop; move32(); move16(); move16(); #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; move32(); #endif /* Debug init (not instrumented) */ T0_fx = -3000; move16(); subfr_len = shl( L_SUBFR, 1 ); /* 2*L_SUBFR */ if ( GT_16( L_FRAME16k, L_frame ) ) { Loading @@ -59,10 +63,10 @@ static void coderLookAheadInnovation( * - BASOP specific initialization. * *------------------------------------------------------------------------*/ /* initialization */ exc_Qx = exc_buf_Qx + L_EXC_MEM + 8; exc_Qx = exc_buf_Qx + L_EXC_MEM + 8; /* Q(st->Qold) */ FOR( i = 0; i < L_EXC_MEM + 8; i++ ) { exc_buf_Qx[i] = old_exc[i]; exc_buf_Qx[i] = old_exc[i]; /* Q(st->Qold) */ move16(); } Loading @@ -72,17 +76,17 @@ static void coderLookAheadInnovation( *------------------------------------------------------------------------*/ /* find LP residual signal for look-ahead part */ getLookAheadResSig( speechLookAhead_Qx, A_3Q12, exc_Qx, L_frame, 2 ); Scale_sig( exc_Qx, subfr_len, 1 ); Scale_sig( exc_Qx, subfr_len, 1 ); /* Q(st->Qold) + 1 */ /* find target signals */ prev_pitch = st->T0_4th; prev_pitch = st->T0_4th; /* Q0 */ move16(); /* find best candidate of pitch lag */ T0_fx = st->T0_4th; T0_fx = st->T0_4th; /* Q0 */ move16(); mantissa_max = -0x7fffffffL; mantissa_max = -0x7fffffffL; /* Q15 */ move32(); max_ps = -0x7fffffffL; max_ps = -0x7fffffffL; /* Q15 */ move32(); max_ps_e = 16; move16(); Loading @@ -90,14 +94,14 @@ static void coderLookAheadInnovation( /*find maximum*/ exc_max = 0; move16(); tmp_loop = s_min( -prev_pitch + search_range + subfr_len, 0 ); tmp_loop = s_min( -prev_pitch + search_range + subfr_len, 0 ); /* Q0 */ FOR( i = -prev_pitch - search_range; i < tmp_loop; i++ ) { exc_max = s_max( exc_Qx[i], exc_max ); exc_max = s_max( exc_Qx[i], exc_max ); /* Q(st->Qold) + 1 */ } FOR( i = 0; i < subfr_len; i++ ) { exc_max = s_max( exc_max, exc_Qx[i] ); exc_max = s_max( exc_max, exc_Qx[i] ); /* Q(st->Qold) + 1 */ } /*calculate scaling factor for optimal precision and assure no overflow in dotproduct*/ exc_sh = sub( 15, norm_s( sub( subfr_len, 1 ) ) ); /*ceil(ld(subfr_len))*/ Loading @@ -105,15 +109,15 @@ static void coderLookAheadInnovation( exc_sh = shr( add( exc_sh, 1 ), 1 ); /*scale buffer only where its needed*/ tmp_loop = s_min( -prev_pitch + search_range + subfr_len, 0 ); tmp_loop = s_min( -prev_pitch + search_range + subfr_len, 0 ); /* Q0 */ FOR( i = -prev_pitch - search_range; i < tmp_loop; i++ ) { exc_Qx[i] = shr( exc_Qx[i], exc_sh ); exc_Qx[i] = shr( exc_Qx[i], exc_sh ); /* Q(st->Qold) + 1 */ move16(); } FOR( i = 0; i < subfr_len; i++ ) { exc_Qx[i] = shr( exc_Qx[i], exc_sh ); exc_Qx[i] = shr( exc_Qx[i], exc_sh ); /* Q(st->Qold) + 1 */ move16(); } Loading @@ -122,7 +126,7 @@ static void coderLookAheadInnovation( move16(); FOR( i = -prev_pitch - search_range; i < -prev_pitch + search_range + subfr_len; i++ ) { alp_ini = L_mac( alp_ini, exc_Qx[i], exc_Qx[i] ); alp_ini = L_mac( alp_ini, exc_Qx[i], exc_Qx[i] ); /* 2*(Q(st->Qold) + 1) + 1 */ } FOR( i = -search_range; i < search_range; i++ ) Loading @@ -138,24 +142,24 @@ static void coderLookAheadInnovation( FOR( k = 0; k < subfr_len; k++ ) { ps = L_mac( ps, exc_Qx[k], exc_Qx[k - prev_pitch - i] ); ps = L_mac( ps, exc_Qx[k], exc_Qx[k - prev_pitch - i] ); /* 2*(Q(st->Qold) + 1) + 1 */ } /*calculate "small" dotproducts in order to subtract them from the "bigger" one*/ FOR( k = negate( add( prev_pitch, search_range ) ); k < -prev_pitch - i; k++ ) FOR( k = -( ( prev_pitch + search_range ) ); k < -prev_pitch - i; k++ ) { alp_s1 = L_mac( alp_s1, exc_Qx[k], exc_Qx[k] ); alp_s1 = L_mac( alp_s1, exc_Qx[k], exc_Qx[k] ); /* 2*(Q(st->Qold) + 1) + 1 */ } tmp_loop = sub( add( search_range, subfr_len ), prev_pitch ); FOR( k = +subfr_len - i - prev_pitch; k < tmp_loop; k++ ) { alp_s2 = L_mac( alp_s2, exc_Qx[k], exc_Qx[k] ); alp_s2 = L_mac( alp_s2, exc_Qx[k], exc_Qx[k] ); /* 2*(Q(st->Qold) + 1) + 1 */ } alp = L_sub( alp_ini, L_add( alp_s1, alp_s2 ) ); alp = L_max( alp, 1 ); /* alp must not be 0 */ alp_e = shl( exc_sh, 1 ); ps_e = shl( exc_sh, 1 ); alp = ISqrt32( alp, &alp_e ); alp = ISqrt32( alp, &alp_e ); /* Q31-alp_e */ ps = Mpy_32_16_1( ps, round_fx( alp ) ); /*alp_e+ps_e*/ ps_e = add( alp_e, ps_e ); Loading @@ -173,7 +177,7 @@ static void coderLookAheadInnovation( T0_fx = add( prev_pitch, i ); } } mantissa_max = max_ps; mantissa_max = max_ps; /* Q31-ps_e */ move32(); if ( mantissa_max < 0 ) { Loading Loading @@ -239,9 +243,9 @@ void enc_prm_side_Info_fx( void encoderSideLossSimulation_fx( Encoder_State *st, PLC_ENC_EVS_HANDLE hPlc_Ext, Word16 *lsf_q, /* Q1*1.28 */ Word16 *lsf_q, /* Qx2.56 */ const Word16 stab_fac, /* Q15 */ const Word16 calcOnlyISF, const Word16 calcOnlyISF, /* Q0 */ const Word16 L_frame ) { Word16 lspLocal_Q15[M]; Loading @@ -251,11 +255,11 @@ void encoderSideLossSimulation_fx( /* Decoder State Update */ IF( EQ_16( L_frame, L_FRAME_16k ) ) { lsf2lsp_fx( lsf_q, lspLocal_Q15, M, INT_FS_16k_FX ); lsf2lsp_fx( lsf_q, lspLocal_Q15, M, INT_FS_16k_FX ); /* Q15 */ } ELSE { lsf2lsp_fx( lsf_q, lspLocal_Q15, M, INT_FS_FX ); lsf2lsp_fx( lsf_q, lspLocal_Q15, M, INT_FS_FX ); /* Q15 */ } Loading @@ -263,8 +267,8 @@ void encoderSideLossSimulation_fx( st->narrowBand, st->sr_core ); Copy( st->mem_MA_fx, hPlc_Ext->mem_MA_14Q1, M ); Copy( st->mem_AR_fx, hPlc_Ext->mem_AR, M ); Copy( st->mem_MA_fx, hPlc_Ext->mem_MA_14Q1, M ); /* Qx2.56 */ Copy( st->mem_AR_fx, hPlc_Ext->mem_AR, M ); /* Qx2.56 */ /* ISF parameter processing for concealment */ Loading @@ -272,15 +276,15 @@ void encoderSideLossSimulation_fx( hPlc_Ext->stab_fac_Q15 = stab_fac; move16(); Copy( lsf_q, hPlc_Ext->lsfold_14Q1, M ); Copy( lspLocal_Q15, hPlc_Ext->lspold_Q15, M ); Copy( lsf_q, hPlc_Ext->lsfold_14Q1, M ); /* Qx2.56 */ Copy( lspLocal_Q15, hPlc_Ext->lspold_Q15, M ); /* Q15 */ IF( calcOnlyISF != 0 ) { /* ISF concealment simulation */ getConcealedLSF( hPlc_Ext, xsfBase, st->clas, L_frame ); hPlc_Ext->T0 = hPlc_Ext->T0_4th; hPlc_Ext->T0 = hPlc_Ext->T0_4th; /* Q0 */ move16(); } ELSE Loading @@ -300,9 +304,9 @@ void encoderSideLossSimulation_fx( getConcealedLP( hPlc_Ext, A_3Q12, xsfBase, st->clas, L_frame ); /* apply encoder side PLC simulation */ hPlc_Ext->pit_min = st->pit_min; hPlc_Ext->pit_min = st->pit_min; /* Q0 */ move16(); hPlc_Ext->pit_max = st->pit_max; hPlc_Ext->pit_max = st->pit_max; /* Q0 */ move16(); coderLookAheadInnovation( A_3Q12, &( hPlc_Ext->T0 ), hPlc_Ext, speechLookAhead_Qx, old_exc_Qx, L_frame ); } Loading Loading @@ -336,11 +340,11 @@ void GplcTcxEncSetup_fx( * *-------------------------------------------------------------------*/ Word16 encSideSpecPowDiffuseDetector_fx( Word16 *lsf_ref, Word16 *lsf_con, const Word32 sr_core, Word16 *prev_lsf4_mean, const Word8 sw, Word16 *lsf_ref, /* Qx2.56 */ Word16 *lsf_con, /* Qx2.56 */ const Word32 sr_core, /* Q0 */ Word16 *prev_lsf4_mean, /* Qx2.56 */ const Word8 sw, /* Q0 */ const Word16 coder_type ) { Word16 tmp; Loading @@ -355,14 +359,14 @@ Word16 encSideSpecPowDiffuseDetector_fx( /* calculate the mean of the lowest 4 LSFs */ L_tmp = L_mult( lsf_ref[0], 8192 /*1.0/4.0 Q15*/ ); L_tmp = L_mac( L_tmp, lsf_ref[1], 8192 /*1.0/4.0 Q15*/ ); L_tmp = L_mac( L_tmp, lsf_ref[2], 8192 /*1.0/4.0 Q15*/ ); lsf4_mean = mac_r( L_tmp, lsf_ref[3], 8192 /*1.0/4.0 Q15*/ ); L_tmp = L_mult( lsf_ref[0], 8192 /*1.0/4.0 Q15*/ ); /* Qx2.56 */ L_tmp = L_mac( L_tmp, lsf_ref[1], 8192 /*1.0/4.0 Q15*/ ); /* Qx2.56 */ L_tmp = L_mac( L_tmp, lsf_ref[2], 8192 /*1.0/4.0 Q15*/ ); /* Qx2.56 */ lsf4_mean = mac_r( L_tmp, lsf_ref[3], 8192 /*1.0/4.0 Q15*/ ); /* Qx2.56 */ IF( sw ) { Copy( lsf_con, lsf_mod, M ); Copy( lsf_con, lsf_mod, M ); /* Qx2.56 */ modify_lsf( lsf_mod, M, sr_core, 1 ); Loading @@ -372,28 +376,29 @@ Word16 encSideSpecPowDiffuseDetector_fx( cum_dist2 = 0; cnt_imprv = 0; move16(); IF( EQ_32( sr_core, INT_FS_16k ) ) { th = 2560; th = 2560; /* Qx2.56 */ move16(); /* LSF */ th_dif = 288; th_dif = 288; /* Qx2.56 */ move16(); /* LSF */ } ELSE { th = 2048; th = 2048; /* Qx2.56 */ move16(); /* LSF */ th_dif = 230; th_dif = 230; /* Qx2.56 */ move16(); /* LSF */ } FOR( i = 0; i < M; i++ ) { tmp = sub( lsf_con[i], lsf_ref[i] ); dist1 = L_mult( tmp, tmp ); dist1 = L_mult( tmp, tmp ); /* 2*(Qx2.56)+1 */ tmp = sub( lsf_mod[i], lsf_ref[i] ); dist2 = L_mult( tmp, tmp ); dist2 = L_mult( tmp, tmp ); /* 2*(Qx2.56)+1 */ if ( GT_32( dist1, dist2 ) ) { Loading @@ -409,6 +414,7 @@ Word16 encSideSpecPowDiffuseDetector_fx( test(); test(); test(); test(); if ( GT_32( cum_dist1, L_add( cum_dist2, Mpy_32_16_1( cum_dist2, 4915 ) ) ) && GT_16( sub( lsf4_mean, *prev_lsf4_mean ), th_dif ) && LT_16( *prev_lsf4_mean, th ) && GT_16( cnt_imprv, 2 ) && EQ_16( coder_type, GENERIC ) ) { idx = 1; Loading Loading @@ -438,17 +444,19 @@ void updateSpecPowDiffuseIdx_fx( Word16 k; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; move32(); #endif move32(); move16(); st->mean_gc[1] = st->gain_code[0]; min_gp = st->bpf_gainT[0]; st->mean_gc[1] = st->gain_code[0]; /* Q15 */ min_gp = st->bpf_gainT[0]; /* Q15 */ FOR( k = 1; k < 4; k++ ) { st->mean_gc[1] = L_add_o( st->mean_gc[1], st->gain_code[k], &Overflow ); move32(); min_gp = s_min( min_gp, st->bpf_gainT[k] ); } Loading @@ -460,5 +468,5 @@ void updateSpecPowDiffuseIdx_fx( st->glr_idx[0] = 0; } move16(); st->mean_gc[0] = st->mean_gc[1]; st->mean_gc[0] = st->mean_gc[1]; /* Q15 */ }