Commit afb0f721 authored by eichenseer's avatar eichenseer
Browse files

Merge branch '552-cna-too-high-in-ism-dtx' into 'main'

[non-BE] Resolve "CNA too high in ISM DTX" JBM addon

See merge request !1040
parents ad6cde4c b826cc1e
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -178,6 +178,7 @@
#define NONBE_FIX_760_COHERENCE_MASA                          /* Nokia: Issue 760: fixes decoder crash for some cases when all energy ratios are 1 */
#define NONBE_FIX_752_OSBA_MISCONFIG_MCT                      /* FhG: issue 752: misconfiguration of MCT causes crashes for coding with sampling rate under 48kHz at 256kbps*/
#define NONBE_FIX_780_ISM_STARTS_WITH_SID                     /* VA: issue 780: fix Crash in ISM decoding when bitstream starts with an SID and output_config is not EXT */
#define NONBE_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE    /* FhG: fix for cng in ISM DTX on sudden silence periods - JBM addon (issue 552) */

/* ##################### End NON-BE switches ############################# */

+21 −0
Original line number Diff line number Diff line
@@ -149,6 +149,16 @@ ivas_error ivas_jbm_dec_tc(
            {
                return error;
            }
#ifdef NONBE_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE

            /* decode dominant object first so the noise energy of the other objects can be limited */
            if ( ( error = ivas_sce_dec( st_ivas, st_ivas->hISMDTX.sce_id_dtx, &output[st_ivas->hISMDTX.sce_id_dtx], output_frame, nb_bits_metadata[st_ivas->hISMDTX.sce_id_dtx] ) ) != IVAS_ERR_OK )
            {
                return error;
            }

            ivas_ism_dtx_limit_noise_energy_for_near_silence( st_ivas->hSCE, st_ivas->hISMDTX.sce_id_dtx, st_ivas->nchan_transport );
#endif
        }
        else if ( st_ivas->ism_mode == ISM_MODE_PARAM )
        {
@@ -169,10 +179,21 @@ ivas_error ivas_jbm_dec_tc(

        for ( n = 0; n < st_ivas->nchan_transport; n++ )
        {
#ifdef NONBE_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE
            /* for DTX frames, dominant object has already been decoded before */
            if ( !( ( ivas_total_brate == IVAS_SID_5k2 || ivas_total_brate == FRAME_NO_DATA ) && n == st_ivas->hISMDTX.sce_id_dtx ) )
            {
                if ( ( error = ivas_sce_dec( st_ivas, n, &output[n], output_frame, nb_bits_metadata[n] ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
            }
#else
            if ( ( error = ivas_sce_dec( st_ivas, n, &output[n], output_frame, nb_bits_metadata[n] ) ) != IVAS_ERR_OK )
            {
                return error;
            }
#endif

            /* HP filtering */
            hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs );