Loading lib_com/ivas_cnst.h +3 −0 Original line number Diff line number Diff line Loading @@ -885,6 +885,9 @@ enum fea_names #define MDCT_ST_PLC_FADEOUT_MIN_NOISE_NRG 0.001f #define MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME 2 * FRAMES_PER_SEC #define MDCT_ST_PLC_FADEOUT_TO_ZERO_LEN 20 #ifdef FIX_MDCT_ST_PLC_FADEOUT_DELAY #define MDCT_ST_PLC_FADEOUT_DELAY_4_LSP_FADE 3 #endif typedef enum { EQUAL_CORES, Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,7 @@ #define FIX_DTX_428 /* FhG: fix for issue 428, crash with DTX and bitrate switching */ #define FIX_STEREO_474 /* FhG fix for issue 574, crash with SBA to stereo output at 512 kbps */ #define FIX_MDCT_ST_PLC_FADEOUT_DELAY #define FIX_DIRAC_LS_SYNTHESIS_CONFIG_479 /* FhG: fix for issue 479, broken LS output with DirAC at high BRs */ Loading lib_dec/er_dec_tcx.c +20 −1 Original line number Diff line number Diff line Loading @@ -551,20 +551,39 @@ void con_tcx( mvr2r( synth - M, buf, M ); mvr2r( buf, mem_syn, M ); if ( A_cng != NULL ) { #ifdef FIX_MDCT_ST_PLC_FADEOUT_DELAY float alpha_delayed; alpha_delayed = 1.0f; if ( st->nbLostCmpt > MDCT_ST_PLC_FADEOUT_DELAY_4_LSP_FADE ) { alpha_delayed = Damping_fact( st->core_ext_mode, st->nbLostCmpt - MDCT_ST_PLC_FADEOUT_DELAY_4_LSP_FADE, st->last_good, st->stab_fac, &( st->lp_gainp ), ACELP_CORE ); } if ( st->plcBackgroundNoiseUpdated && alpha_delayed != 1.0f ) #else if ( st->plcBackgroundNoiseUpdated && alpha != 1.0f ) #endif { float lsp_local[M], lsp_fade[M], alpha_inv; #ifdef FIX_MDCT_ST_PLC_FADEOUT_DELAY alpha_inv = 1.0f - alpha_delayed; #else alpha_inv = 1.0f - alpha; #endif a2lsp_stab( A_local, lsp_local, lsp_local ); for ( i = 0; i < M; i++ ) { #ifdef FIX_MDCT_ST_PLC_FADEOUT_DELAY lsp_fade[i] = alpha_delayed * lsp_local[i] + alpha_inv * st->lspold_cng[i]; #else lsp_fade[i] = alpha * lsp_local[i] + alpha_inv * st->lspold_cng[i]; #endif } lsp2a_stab( lsp_fade, A_local, M ); Loading Loading
lib_com/ivas_cnst.h +3 −0 Original line number Diff line number Diff line Loading @@ -885,6 +885,9 @@ enum fea_names #define MDCT_ST_PLC_FADEOUT_MIN_NOISE_NRG 0.001f #define MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME 2 * FRAMES_PER_SEC #define MDCT_ST_PLC_FADEOUT_TO_ZERO_LEN 20 #ifdef FIX_MDCT_ST_PLC_FADEOUT_DELAY #define MDCT_ST_PLC_FADEOUT_DELAY_4_LSP_FADE 3 #endif typedef enum { EQUAL_CORES, Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,7 @@ #define FIX_DTX_428 /* FhG: fix for issue 428, crash with DTX and bitrate switching */ #define FIX_STEREO_474 /* FhG fix for issue 574, crash with SBA to stereo output at 512 kbps */ #define FIX_MDCT_ST_PLC_FADEOUT_DELAY #define FIX_DIRAC_LS_SYNTHESIS_CONFIG_479 /* FhG: fix for issue 479, broken LS output with DirAC at high BRs */ Loading
lib_dec/er_dec_tcx.c +20 −1 Original line number Diff line number Diff line Loading @@ -551,20 +551,39 @@ void con_tcx( mvr2r( synth - M, buf, M ); mvr2r( buf, mem_syn, M ); if ( A_cng != NULL ) { #ifdef FIX_MDCT_ST_PLC_FADEOUT_DELAY float alpha_delayed; alpha_delayed = 1.0f; if ( st->nbLostCmpt > MDCT_ST_PLC_FADEOUT_DELAY_4_LSP_FADE ) { alpha_delayed = Damping_fact( st->core_ext_mode, st->nbLostCmpt - MDCT_ST_PLC_FADEOUT_DELAY_4_LSP_FADE, st->last_good, st->stab_fac, &( st->lp_gainp ), ACELP_CORE ); } if ( st->plcBackgroundNoiseUpdated && alpha_delayed != 1.0f ) #else if ( st->plcBackgroundNoiseUpdated && alpha != 1.0f ) #endif { float lsp_local[M], lsp_fade[M], alpha_inv; #ifdef FIX_MDCT_ST_PLC_FADEOUT_DELAY alpha_inv = 1.0f - alpha_delayed; #else alpha_inv = 1.0f - alpha; #endif a2lsp_stab( A_local, lsp_local, lsp_local ); for ( i = 0; i < M; i++ ) { #ifdef FIX_MDCT_ST_PLC_FADEOUT_DELAY lsp_fade[i] = alpha_delayed * lsp_local[i] + alpha_inv * st->lspold_cng[i]; #else lsp_fade[i] = alpha * lsp_local[i] + alpha_inv * st->lspold_cng[i]; #endif } lsp2a_stab( lsp_fade, A_local, M ); Loading