Commit f6fb2f2c authored by Jan Kiene's avatar Jan Kiene
Browse files

add fix for MDCT-Stereo PLC fadeout with TD concealment

parent b6635fa9
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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,
+1 −0
Original line number Diff line number Diff line
@@ -213,6 +213,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

/* ################## End DEVELOPMENT switches ######################### */
/* clang-format on */
+20 −1
Original line number Diff line number Diff line
@@ -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 );