diff --git a/lib_com/options.h b/lib_com/options.h index 0d67f8497fdb633786ab29686e2f4802e102f848..30200d09d140d3c9b3585b86b1af6a714457b196 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 */ #define FIX_1139_REV_COLORATION_SHORT_T60 /* Nokia,FhG: Fix issue 1139, prevent sound coloration artefacts at very low reverberation times */ diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index 3ab3757688f1aa611fda0a3bd3719ad0c06c9973..b75ca1d93dbc30caba7785d636764c77ead9ecdf 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 34e8b4555e96cc8c34314a47cc58d848f1ae7760..448c50c6952ed5fcb255d9ce4ca0237383d52bde 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -3217,15 +3217,17 @@ void ivas_omasa_preProcessStereoTransportsForEditedObjects( #endif /* Limit target energies to non-negative values */ - for ( ch = 0; ch < 2; ch++ ) - { - totalTargetEneCh[ch] = max( totalTargetEneCh[ch], 0.0f ); - } - - /* Diffuse ratio accumulation based on gaining */ +#ifdef NONBE_FIX_1197_OMASA_META_BUFFER + /* due to rounding, the sum may exceed 1.0f ever so slightly, so clip it */ + ratioAccOrig = min( ratioAccOrig, 1.0f ); +#endif if ( masaGainEdited ) { +#ifdef NONBE_FIX_1197_OMASA_META_BUFFER + ratioAccNew += gainMasaPow2 * ( 1.0f - ratioAccOrig ); +#else ratioAccNew += gainMasaPow2 * ( 1 - ratioAccOrig ); +#endif } else {