diff --git a/lib_com/options.h b/lib_com/options.h index 2440c09406deb975f87d1bb6b00f8debdd8c202d..c7c5ff8104b79994c51bab138426d31d7db203f1 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -181,7 +181,7 @@ #define NONBE_FIX_MC_LFE_LPF /* Dlb: Adding the LFE LPF filter back for MC content. */ #define NONBE_FIX_1052_SBA_EXT /* Dlb: SBA external output support */ #define NONBE_FIX_1087_OOB_SBA_DTX_RS /* VA: issue 1087: Extend the length of the buffer for MCT decoding to avoid out-of-bound writing in SBA SID bitrate switching decoding */ - +#define NONBE_FIX_1091_PMC_LOW_SIGNAL_BURSTS /* FhG: fix for #1091, fix limit calculation for the regularized inverse of Kx to avoid bursts in very low signals */ #define NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR /* Nok: issue 1074 fixing number of objects signaling in OMASA low rate */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_dirac_output_synthesis_cov.c b/lib_dec/ivas_dirac_output_synthesis_cov.c index 7afa191edbd15d72c047461ba1e2709e3a9b818a..00d7b2b7760194cef062e42b2e7b4ed1b0345019 100644 --- a/lib_dec/ivas_dirac_output_synthesis_cov.c +++ b/lib_dec/ivas_dirac_output_synthesis_cov.c @@ -51,6 +51,13 @@ #include "wmc_auto.h" #include "rom_dec.h" +#ifdef NONBE_FIX_1091_PMC_LOW_SIGNAL_BURSTS +/*-----------------------------------------------------------------------* + * Local constants + *-----------------------------------------------------------------------*/ + +#define SQRT_EPSILON 3.16227755e-08 /* square root of EPSILON */ +#endif /*-------------------------------------------------------------------* * ivas_dirac_dec_output_synthesis_cov_open() @@ -577,8 +584,11 @@ int16_t computeMixingMatrices( *-----------------------------------------------------------------*/ maximum( svd_s_buffer, lengthCx, &limit ); +#ifdef NONBE_FIX_1091_PMC_LOW_SIGNAL_BURSTS + limit = (float) max( limit * reg_Sx, SQRT_EPSILON ); +#else limit = limit * reg_Sx + EPSILON; - +#endif for ( i = 0; i < lengthCx; ++i ) { svd_s_buffer[i] = ( ( svd_s_buffer[i] > limit ) ? svd_s_buffer[i] : limit );