From d42b78acfc3e763b5e1407962d9d5576247abc47 Mon Sep 17 00:00:00 2001 From: Jouni Paulus Date: Mon, 14 Oct 2024 15:33:04 +0200 Subject: [PATCH 1/3] zero hMasaIsmData ring buffer contents when entering ISM_MASA_MODE_PARAM_ONE_OBJ. switch: NONBE_FIX_1197_OMASA_META_BUFFER --- lib_com/options.h | 1 + lib_dec/ivas_omasa_dec.c | 18 ++++++++++++++++++ lib_rend/ivas_dirac_dec_binaural_functions.c | 13 +++++++++---- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 926960226d..f1bdb1322c 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -183,6 +183,7 @@ #define NONBE_FIX_1174_MCMASA_LBR_LOOP_ERROR /* Nokia: Fix issue 1174 by removing the unnecessary inner loop causing problems. */ #define NONBE_FIX_1176_OSBA_REVERB_JBM_ASAN_ERROR /* Ericsson: Issue 1176, fix in TDREND_firfilt for subframes shorter than the filter length */ +#define NONBE_FIX_1197_OMASA_META_BUFFER /* Nokia: OMASA ISM_MASA_MODE_PARAM_ONE_OBJ history zero in rateswitching */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index 3ab3757688..1a03070dac 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -424,6 +424,24 @@ ivas_error ivas_omasa_dec_config( ivas_omasa_separate_object_renderer_close( st_ivas ); } +#ifdef NONBE_FIX_1197_OMASA_META_BUFFER + if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && st_ivas->hMasaIsmData != NULL ) /* this structure is in use only in ISM_MASA_MODE_PARAM_ONE_OBJ */ + { + MASA_ISM_DATA_HANDLE hMasaIsmData = st_ivas->hMasaIsmData; + for ( int16_t obj_idx = 0; obj_idx < MAX_NUM_OBJECTS; obj_idx++ ) + { + set_s( hMasaIsmData->azimuth_ism[obj_idx], 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); + set_s( hMasaIsmData->elevation_ism[obj_idx], 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); + for ( int16_t sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR; sf++ ) + { + set_zero( hMasaIsmData->energy_ratio_ism[obj_idx][sf], CLDFB_NO_CHANNELS_MAX ); + } + } + set_s( hMasaIsmData->azimuth_separated_ism, 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); + set_s( hMasaIsmData->elevation_separated_ism, 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); + } +#endif + if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC ) { if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 4e23dc51e9..57f3578e49 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -3193,15 +3193,20 @@ void ivas_omasa_preProcessStereoTransportsForEditedObjects( #endif /* Limit target energies to non-negative values */ - for ( ch = 0; ch < 2; ch++ ) +#ifdef NONBE_FIX_1197_OMASA_META_BUFFER + if ( ratioAccOrig > 1.0f ) { - totalTargetEneCh[ch] = max( totalTargetEneCh[ch], 0.0f ); + /* due to rounding, the sum may exceed 1.0f ever so slightly, so clip it */ + ratioAccOrig = 1.0f; } - - /* Diffuse ratio accumulation based on gaining */ +#endif if ( masaGainEdited ) { +#ifdef NONBE_FIX_1197_OMASA_META_BUFFER + ratioAccNew += gainMasaPow2 * ( 1.0f - ratioAccOrig ); +#else ratioAccNew += gainMasaPow2 * ( 1 - ratioAccOrig ); +#endif } else { -- GitLab From ec63425d9ebb11d5f84169efd9615480a69496c3 Mon Sep 17 00:00:00 2001 From: Jouni Paulus Date: Mon, 14 Oct 2024 15:47:45 +0200 Subject: [PATCH 2/3] clang formatting --- lib_dec/ivas_omasa_dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index 1a03070dac..b75ca1d93d 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -425,7 +425,7 @@ ivas_error ivas_omasa_dec_config( } #ifdef NONBE_FIX_1197_OMASA_META_BUFFER - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && st_ivas->hMasaIsmData != NULL ) /* this structure is in use only in ISM_MASA_MODE_PARAM_ONE_OBJ */ + if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && st_ivas->hMasaIsmData != NULL ) /* this structure is in use only in ISM_MASA_MODE_PARAM_ONE_OBJ */ { MASA_ISM_DATA_HANDLE hMasaIsmData = st_ivas->hMasaIsmData; for ( int16_t obj_idx = 0; obj_idx < MAX_NUM_OBJECTS; obj_idx++ ) -- GitLab From 8aee5a9d9b4e863760b00c490250ff09275f63e2 Mon Sep 17 00:00:00 2001 From: Jouni Paulus Date: Thu, 17 Oct 2024 08:52:08 +0200 Subject: [PATCH 3/3] simplify clipping statement to use min() --- lib_rend/ivas_dirac_dec_binaural_functions.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 57f3578e49..394c2c14e5 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -3194,11 +3194,8 @@ void ivas_omasa_preProcessStereoTransportsForEditedObjects( /* Limit target energies to non-negative values */ #ifdef NONBE_FIX_1197_OMASA_META_BUFFER - if ( ratioAccOrig > 1.0f ) - { - /* due to rounding, the sum may exceed 1.0f ever so slightly, so clip it */ - ratioAccOrig = 1.0f; - } + /* due to rounding, the sum may exceed 1.0f ever so slightly, so clip it */ + ratioAccOrig = min( ratioAccOrig, 1.0f ); #endif if ( masaGainEdited ) { -- GitLab