From 9d5f442f8d1c716ac6ca43f7269348a895282483 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 25 Mar 2026 15:44:53 +0100 Subject: [PATCH 1/3] FIX_1547_ISMDTX_HANDLE --- Workspace_msvc/lib_rend.vcxproj.filters | 3 +++ lib_com/ivas_prot.h | 4 ++++ lib_com/options.h | 2 +- lib_dec/ivas_dec.c | 8 ++++++++ lib_dec/ivas_ism_metadata_dec.c | 12 ++++++++++++ lib_dec/ivas_ism_param_dec.c | 20 ++++++++++++++++++++ lib_dec/ivas_omasa_dec.c | 5 +++++ lib_dec/ivas_osba_dec.c | 5 +++++ 8 files changed, 58 insertions(+), 1 deletion(-) diff --git a/Workspace_msvc/lib_rend.vcxproj.filters b/Workspace_msvc/lib_rend.vcxproj.filters index f29095897..d4f023f7c 100644 --- a/Workspace_msvc/lib_rend.vcxproj.filters +++ b/Workspace_msvc/lib_rend.vcxproj.filters @@ -122,6 +122,9 @@ rend_c + + rend_c + diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 3201fd15b..7095a48cb 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -1049,7 +1049,11 @@ ivas_error ivas_ism_metadata_dec( const int16_t bfi, /* i : bfi flag */ int16_t nb_bits_metadata[], /* o : number of metadata bits */ ISM_MODE ism_mode, /* i : ISM mode */ +#ifdef FIX_1547_ISMDTX_HANDLE + ISM_DTX_DATA_DEC *hISMDTX, /* i/o: ISM DTX handle */ +#else ISM_DTX_DATA_DEC hISMDTX, /* i/o: ISM DTX structure */ +#endif const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Config Handle */ int16_t *ism_extended_metadata_flag, /* i/o: Extended metadata active in renderer */ int16_t *ism_extmeta_cnt, /* i/o: Number of change frames observed */ diff --git a/lib_com/options.h b/lib_com/options.h index bbea3aa15..d2e960c07 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -161,7 +161,7 @@ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ #define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */ #define NONBE_1122_KEEP_EVS_MODE_UNCHANGED /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR. */ - +#define FIX_1547_ISMDTX_HANDLE /* VA: float issue 1547: fix use of 'hISMDTX' handle */ /* #################### End BE switches ################################## */ diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index b99c5f70d..0735c9929 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -126,7 +126,11 @@ ivas_error ivas_dec( } else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) { +#ifdef FIX_1547_ISMDTX_HANDLE + if ( ( error = ivas_ism_metadata_dec( ivas_total_brate, st_ivas->nchan_ism, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, &( st_ivas->hISMDTX ), st_ivas->hParamIsmDec->hParamIsm, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_ism_metadata_dec( ivas_total_brate, st_ivas->nchan_ism, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, st_ivas->hParamIsmDec->hParamIsm, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -135,7 +139,11 @@ ivas_error ivas_dec( } else /* ISM_MODE_DISC */ { +#ifdef FIX_1547_ISMDTX_HANDLE + if ( ( error = ivas_ism_metadata_dec( ivas_total_brate, st_ivas->nchan_ism, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, &( st_ivas->hISMDTX ), NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_ism_metadata_dec( ivas_total_brate, st_ivas->nchan_ism, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) +#endif { return error; } diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index a5eb1fc18..7cc8d139b 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -148,7 +148,11 @@ ivas_error ivas_ism_metadata_dec( const int16_t bfi, /* i : bfi flag */ int16_t nb_bits_metadata[], /* o : number of metadata bits */ ISM_MODE ism_mode, /* i : ISM mode */ +#ifdef FIX_1547_ISMDTX_HANDLE + ISM_DTX_DATA_DEC *hISMDTX, /* i/o: ISM DTX handle */ +#else ISM_DTX_DATA_DEC hISMDTX, /* i/o: ISM DTX structure */ +#endif const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Config Handle */ int16_t *ism_extmeta_active, /* i/o: Extended metadata active in renderer */ int16_t *ism_extmeta_cnt, /* i/o: Number of change frames observed */ @@ -529,11 +533,19 @@ ivas_error ivas_ism_metadata_dec( } } +#ifdef FIX_1547_ISMDTX_HANDLE + if ( hISMDTX->ism_dtx_hangover_cnt < IVAS_ISM_DTX_HO_MAX ) + { + ism_metadata_smooth( hIsmMeta, ism_total_brate, nchan_ism ); + hISMDTX->ism_dtx_hangover_cnt += 1; + } +#else if ( hISMDTX.ism_dtx_hangover_cnt < IVAS_ISM_DTX_HO_MAX ) { ism_metadata_smooth( hIsmMeta, ism_total_brate, nchan_ism ); hISMDTX.ism_dtx_hangover_cnt += 1; } +#endif if ( ism_mode == ISM_SBA_MODE_DISC ) { diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index abc05ccb5..b1df8dff6 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -199,7 +199,11 @@ static void ivas_param_ism_collect_slot( static void ivas_param_ism_compute_mixing_matrix( const int16_t nchan_ism, /* i : number of ISM channels */ PARAM_ISM_DEC_HANDLE hParamIsmDec, /* i/o: decoder ParamISM handle */ +#ifdef FIX_1547_ISMDTX_HANDLE + const ISM_DTX_DATA_DEC *hISMDTX, /* i : ISM DTX handle */ +#else ISM_DTX_DATA_DEC hISMDTX, /* i : ISM DTX handle */ +#endif float direct_response[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN], const int16_t nchan_transport, const int16_t nchan_out_woLFE, @@ -223,7 +227,11 @@ static void ivas_param_ism_compute_mixing_matrix( assert( ( nchan_ism == 3 ) || ( nchan_ism == 4 ) ); assert( nchan_transport == 2 ); +#ifdef FIX_1547_ISMDTX_HANDLE + if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX->dtx_flag ) +#else if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX.dtx_flag ) +#endif { num_wave = nchan_ism; } @@ -244,7 +252,11 @@ static void ivas_param_ism_compute_mixing_matrix( { set_zero( cy_diag_tmp[w], nchan_out_woLFE ); +#ifdef FIX_1547_ISMDTX_HANDLE + if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX->dtx_flag ) +#else if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX.dtx_flag ) +#endif { dir_res_ptr = direct_response[w]; } @@ -264,7 +276,11 @@ static void ivas_param_ism_compute_mixing_matrix( set_zero( cy_diag, nchan_out_woLFE ); for ( w = 0; w < num_wave; w++ ) { +#ifdef FIX_1547_ISMDTX_HANDLE + if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX->dtx_flag ) +#else if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX.dtx_flag ) +#endif { direct_power[w] = ( 1.0f / nchan_ism ) * ref_power[bin_idx]; } @@ -990,7 +1006,11 @@ void ivas_param_ism_dec_prepare_renderer( } /* Compute mixing matrix */ +#ifdef FIX_1547_ISMDTX_HANDLE + ivas_param_ism_compute_mixing_matrix( st_ivas->nchan_ism, hParamIsmDec, &( st_ivas->hISMDTX ), direct_response, nchan_transport, nchan_out_woLFE, cx_diag, ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin ); +#else ivas_param_ism_compute_mixing_matrix( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response, nchan_transport, nchan_out_woLFE, cx_diag, ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin ); +#endif return; } diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index 7226f379e..55e9addd5 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -597,8 +597,13 @@ ivas_error ivas_omasa_ism_metadata_dec( if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) { /* decode ISM metadata */ +#ifdef FIX_1547_ISMDTX_HANDLE + if ( ( error = ivas_ism_metadata_dec( ism_total_brate, *nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, + nb_bits_metadata, st_ivas->ism_mode, &( st_ivas->hISMDTX ), NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_ism_metadata_dec( ism_total_brate, *nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) +#endif { return error; } diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 6eac059ed..7ab3c7d84 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -228,8 +228,13 @@ ivas_error ivas_osba_ism_metadata_dec( *nchan_ism = st_ivas->nchan_ism; /* decode ISM metadata */ +#ifdef FIX_1547_ISMDTX_HANDLE + if ( ( error = ivas_ism_metadata_dec( ism_total_brate, *nchan_ism, &nchan_transport_ism, st_ivas->hIsmMetaData, NULL, st_ivas->bfi, + nb_bits_metadata, st_ivas->ism_mode, &( st_ivas->hISMDTX ), NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hCPE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) +#else if ( ( error = ivas_ism_metadata_dec( ism_total_brate, *nchan_ism, &nchan_transport_ism, st_ivas->hIsmMetaData, NULL, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hCPE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) +#endif { return error; } -- GitLab From 7e0ac6ccf11f361e53197db4e19bc5612b144468 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 25 Mar 2026 15:53:31 +0100 Subject: [PATCH 2/3] clang-format --- lib_dec/ivas_ism_metadata_dec.c | 20 ++++++++++---------- lib_dec/ivas_ism_param_dec.c | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index 7cc8d139b..d3f0c6c7d 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -140,18 +140,18 @@ static void ism_metadata_smooth( *-------------------------------------------------------------------------*/ ivas_error ivas_ism_metadata_dec( - const int32_t ism_total_brate, /* i : ISM total bitrate */ - const int16_t nchan_ism, /* i : number of ISM channels */ - int16_t *nchan_transport, /* o : number of transport channels */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder handles */ - const int16_t bfi, /* i : bfi flag */ - int16_t nb_bits_metadata[], /* o : number of metadata bits */ - ISM_MODE ism_mode, /* i : ISM mode */ + const int32_t ism_total_brate, /* i : ISM total bitrate */ + const int16_t nchan_ism, /* i : number of ISM channels */ + int16_t *nchan_transport, /* o : number of transport channels */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder handles */ + const int16_t bfi, /* i : bfi flag */ + int16_t nb_bits_metadata[], /* o : number of metadata bits */ + ISM_MODE ism_mode, /* i : ISM mode */ #ifdef FIX_1547_ISMDTX_HANDLE - ISM_DTX_DATA_DEC *hISMDTX, /* i/o: ISM DTX handle */ + ISM_DTX_DATA_DEC *hISMDTX, /* i/o: ISM DTX handle */ #else - ISM_DTX_DATA_DEC hISMDTX, /* i/o: ISM DTX structure */ + ISM_DTX_DATA_DEC hISMDTX, /* i/o: ISM DTX structure */ #endif const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Config Handle */ int16_t *ism_extmeta_active, /* i/o: Extended metadata active in renderer */ diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index b1df8dff6..95efa3876 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -200,9 +200,9 @@ static void ivas_param_ism_compute_mixing_matrix( const int16_t nchan_ism, /* i : number of ISM channels */ PARAM_ISM_DEC_HANDLE hParamIsmDec, /* i/o: decoder ParamISM handle */ #ifdef FIX_1547_ISMDTX_HANDLE - const ISM_DTX_DATA_DEC *hISMDTX, /* i : ISM DTX handle */ + const ISM_DTX_DATA_DEC *hISMDTX, /* i : ISM DTX handle */ #else - ISM_DTX_DATA_DEC hISMDTX, /* i : ISM DTX handle */ + ISM_DTX_DATA_DEC hISMDTX, /* i : ISM DTX handle */ #endif float direct_response[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN], const int16_t nchan_transport, -- GitLab From 1b317589e59113998f7c938f4c5bddf3ed143d4b Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 25 Mar 2026 16:11:31 +0100 Subject: [PATCH 3/3] move the switch to correct place in options.h --- lib_com/options.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index d2e960c07..2ab2f5e96 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -161,7 +161,6 @@ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ #define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */ #define NONBE_1122_KEEP_EVS_MODE_UNCHANGED /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR. */ -#define FIX_1547_ISMDTX_HANDLE /* VA: float issue 1547: fix use of 'hISMDTX' handle */ /* #################### End BE switches ################################## */ @@ -169,7 +168,7 @@ /* any switch which is non-be wrt. TS 26.258 V3.0 */ #define FIX_1543_MID_LSF_BITS /* VA: float issue 1543: Resolve "MSAN: use-of-uninitialized-value in lib_enc/lsf_enc.c:262:5 for EVS encoder" */ - +#define FIX_1547_ISMDTX_HANDLE /* VA: float issue 1547: fix use of 'hISMDTX' handle */ /* ##################### End NON-BE switches ########################### */ -- GitLab