From d3a5066db234d98be880da9690ac2d758aacbf54 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Thu, 6 Nov 2025 11:57:47 +0200 Subject: [PATCH 1/4] Add object editing gain limitations as agreed. --- lib_com/ivas_cnst.h | 6 +++ lib_com/options.h | 2 + lib_dec/lib_dec.c | 85 +++++++++++++++++++++++++++++++++ lib_util/obj_edit_file_reader.h | 6 ++- 4 files changed, 98 insertions(+), 1 deletion(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 3e8521f47d..55c66cd1ce 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -177,6 +177,12 @@ typedef enum #define MAX_SPAR_INTERNAL_CHANNELS IVAS_SPAR_MAX_CH #define MAX_CLDFB_DIGEST_CHANNELS 3 /* == maximum of ParamISM TCs and ParamMC TCs */ +#ifdef FIX_GAIN_EDIT_LIMITS +#define OBJ_EDIT_GAIN_MIN 0.0630957f /* Minimum allowed gain edit: -24 dB */ +#define OBJ_EDIT_GAIN_MAX 3.9810719f /* Maximum allowed gain edit: +12 dB */ +#endif + + typedef enum { TC_BUFFER_MODE_RENDERER, diff --git a/lib_com/options.h b/lib_com/options.h index a98f995caa..28046fa481 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -193,6 +193,8 @@ /*#define NONBE_1324_TC_BUFFER_MEMOERY_KEEP*/ /* VA: issue 1324: do not reset TSM memory in JBM bitrate switching */ #define NONBE_1380_OMASA_BUILD_DIFF /* Nokia: Fix for issue #1380: Large differences in OMASA output between Debug and Release builds */ +#define FIX_GAIN_EDIT_LIMITS /* Harmonize gain edit limits for all opertation points. For all modes, limit to max +12dB. For parametric modes, limit to min -24dB. */ + /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index d8a602beb0..a6efcf995e 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -1520,13 +1520,35 @@ ivas_error IVAS_DEC_SetEditableParameters( st_ivas->hIsmMetaData[obj]->edited_radius = hIvasEditableParameters.ism_metadata[obj].radius; st_ivas->hIsmMetaData[obj]->edited_yaw = hIvasEditableParameters.ism_metadata[obj].yaw; st_ivas->hIsmMetaData[obj]->edited_pitch = hIvasEditableParameters.ism_metadata[obj].pitch; +#ifdef FIX_GAIN_EDIT_LIMITS + if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + { + st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MAX; + } + else + { + st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain; + } +#else st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain; +#endif st_ivas->hIsmMetaData[obj]->non_diegetic_flag = hIvasEditableParameters.ism_metadata[obj].non_diegetic_flag; } if ( ism_mode == ISM_SBA_MODE_DISC ) { +#ifdef FIX_GAIN_EDIT_LIMITS + if ( hIvasEditableParameters.gain_bed > OBJ_EDIT_GAIN_MAX ) + { + st_ivas->hSbaIsmData->gain_bed = OBJ_EDIT_GAIN_MAX; + } + else + { + st_ivas->hSbaIsmData->gain_bed = hIvasEditableParameters.gain_bed; + } +#else st_ivas->hSbaIsmData->gain_bed = hIvasEditableParameters.gain_bed; +#endif } } else if ( ism_mode == ISM_MODE_PARAM ) @@ -1541,7 +1563,23 @@ ivas_error IVAS_DEC_SetEditableParameters( if ( st_ivas->hMasaIsmData != NULL ) { +#ifdef FIX_GAIN_EDIT_LIMITS + /* Limit gain edit to a range of +12dB to -24dB with parametric ISM mode */ + if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + { + st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MAX; + } + else if ( hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) + { + st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MIN; + } + else + { + st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain; + } +#else st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain; +#endif /* Detect direction editing in Param-ISM mode */ if ( fabsf( st_ivas->hParamIsmDec->azimuth_values[obj] - hIvasEditableParameters.ism_metadata[obj].azimuth ) > OMASA_AZI_EDIT_THR || @@ -1675,7 +1713,23 @@ ivas_error IVAS_DEC_SetEditableParameters( if ( fabsf( st_ivas->hIsmMetaData[obj]->edited_gain - hIvasEditableParameters.ism_metadata[obj].gain ) > OMASA_GAIN_EDIT_THR ) { st_ivas->hMasaIsmData->ism_gain_is_edited[obj] = 1u; +#ifdef FIX_GAIN_EDIT_LIMITS + /* Limit masa gain edit to a range of +12dB to -infdB with discrete OMASA mode and +12dB to -24dB with parametric OMASA mode */ + if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + { + st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MAX; + } + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) + { + st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MIN; + } + else + { + st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain; + } +#else st_ivas->hMasaIsmData->gain_ism_edited[obj] = hIvasEditableParameters.ism_metadata[obj].gain; +#endif } else { @@ -1691,14 +1745,45 @@ ivas_error IVAS_DEC_SetEditableParameters( st_ivas->hIsmMetaData[obj]->edited_yaw = hIvasEditableParameters.ism_metadata[obj].yaw; st_ivas->hIsmMetaData[obj]->edited_pitch = hIvasEditableParameters.ism_metadata[obj].pitch; st_ivas->hIsmMetaData[obj]->edited_radius = hIvasEditableParameters.ism_metadata[obj].radius; +#ifdef FIX_GAIN_EDIT_LIMITS + if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + { + st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MAX; + } + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) + { + st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MIN; + } + else + { + st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain; + } +#else st_ivas->hIsmMetaData[obj]->edited_gain = hIvasEditableParameters.ism_metadata[obj].gain; +#endif st_ivas->hIsmMetaData[obj]->non_diegetic_flag = hIvasEditableParameters.ism_metadata[obj].non_diegetic_flag; } } if ( fabsf( hIvasEditableParameters.gain_bed - 1.0f ) > OMASA_GAIN_EDIT_THR ) { +#ifdef FIX_GAIN_EDIT_LIMITS + /* Limit masa gain edit to a range of +12dB to -infdB with discrete OMASA mode and +12dB to -24dB with parametric OMASA mode */ + if ( hIvasEditableParameters.gain_bed > OBJ_EDIT_GAIN_MAX ) + { + st_ivas->hMasaIsmData->gain_masa_edited = OBJ_EDIT_GAIN_MAX; + } + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.gain_bed < OBJ_EDIT_GAIN_MIN ) + { + st_ivas->hMasaIsmData->gain_masa_edited = OBJ_EDIT_GAIN_MIN; + } + else + { + st_ivas->hMasaIsmData->gain_masa_edited = hIvasEditableParameters.gain_bed; + } +#else st_ivas->hMasaIsmData->gain_masa_edited = hIvasEditableParameters.gain_bed; +#endif st_ivas->hMasaIsmData->masa_gain_is_edited = 1u; } else diff --git a/lib_util/obj_edit_file_reader.h b/lib_util/obj_edit_file_reader.h index 06b92a74d2..edf2fbf4ec 100644 --- a/lib_util/obj_edit_file_reader.h +++ b/lib_util/obj_edit_file_reader.h @@ -40,9 +40,13 @@ the United Nations Convention on Contracts on the International Sales of Goods. /*---------------------------------------------------------------------* * Constants ans structures *---------------------------------------------------------------------*/ - +#ifdef FIX_GAIN_EDIT_LIMITS +#define OBJ_EDIT_GAIN_MIN 0.0f /* -inf dB */ +#define OBJ_EDIT_GAIN_MAX 3.9810719f /* +12 dB */ +#else #define OBJ_EDIT_GAIN_MIN 0.06309573f /* -24 dB */ #define OBJ_EDIT_GAIN_MAX 15.84893f /* +24 dB */ +#endif typedef struct ObjectEditFileReader ObjectEditFileReader; typedef struct ReadObjectEditInfo ReadObjectEditInfo; -- GitLab From e02c1f12779a48286df7f310b2f57bd5907e4506 Mon Sep 17 00:00:00 2001 From: lintervo Date: Thu, 6 Nov 2025 13:31:14 +0200 Subject: [PATCH 2/4] Clang format --- lib_dec/lib_dec.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index a6efcf995e..2406334b67 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -1715,11 +1715,11 @@ ivas_error IVAS_DEC_SetEditableParameters( st_ivas->hMasaIsmData->ism_gain_is_edited[obj] = 1u; #ifdef FIX_GAIN_EDIT_LIMITS /* Limit masa gain edit to a range of +12dB to -infdB with discrete OMASA mode and +12dB to -24dB with parametric OMASA mode */ - if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) { st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MAX; } - else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) { st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MIN; } @@ -1750,7 +1750,7 @@ ivas_error IVAS_DEC_SetEditableParameters( { st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MAX; } - else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) { st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MIN; } @@ -1769,11 +1769,11 @@ ivas_error IVAS_DEC_SetEditableParameters( { #ifdef FIX_GAIN_EDIT_LIMITS /* Limit masa gain edit to a range of +12dB to -infdB with discrete OMASA mode and +12dB to -24dB with parametric OMASA mode */ - if ( hIvasEditableParameters.gain_bed > OBJ_EDIT_GAIN_MAX ) + if ( hIvasEditableParameters.gain_bed > OBJ_EDIT_GAIN_MAX ) { st_ivas->hMasaIsmData->gain_masa_edited = OBJ_EDIT_GAIN_MAX; } - else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.gain_bed < OBJ_EDIT_GAIN_MIN ) + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.gain_bed < OBJ_EDIT_GAIN_MIN ) { st_ivas->hMasaIsmData->gain_masa_edited = OBJ_EDIT_GAIN_MIN; } -- GitLab From dbbba41ae7528315c23ddc741e37a14e7f560fba Mon Sep 17 00:00:00 2001 From: lintervo Date: Thu, 6 Nov 2025 13:52:39 +0200 Subject: [PATCH 3/4] Improve comments --- lib_com/ivas_cnst.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 55c66cd1ce..5dae9ab8e2 100755 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -178,7 +178,7 @@ typedef enum #define MAX_CLDFB_DIGEST_CHANNELS 3 /* == maximum of ParamISM TCs and ParamMC TCs */ #ifdef FIX_GAIN_EDIT_LIMITS -#define OBJ_EDIT_GAIN_MIN 0.0630957f /* Minimum allowed gain edit: -24 dB */ +#define OBJ_EDIT_GAIN_MIN 0.0630957f /* Minimum allowed gain edit with parametric modes: -24 dB */ #define OBJ_EDIT_GAIN_MAX 3.9810719f /* Maximum allowed gain edit: +12 dB */ #endif -- GitLab From 46ea01d5bdc8482115efaebd1c67421bafb384a7 Mon Sep 17 00:00:00 2001 From: lintervo Date: Fri, 7 Nov 2025 15:36:42 +0200 Subject: [PATCH 4/4] Change macro names to not overlap --- lib_com/ivas_cnst.h | 4 ++-- lib_dec/lib_dec.c | 40 ++++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index e184b9b021..6d38b27e74 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -178,8 +178,8 @@ typedef enum #define MAX_CLDFB_DIGEST_CHANNELS 3 /* == maximum of ParamISM TCs and ParamMC TCs */ #ifdef FIX_GAIN_EDIT_LIMITS -#define OBJ_EDIT_GAIN_MIN 0.0630957f /* Minimum allowed gain edit with parametric modes: -24 dB */ -#define OBJ_EDIT_GAIN_MAX 3.9810719f /* Maximum allowed gain edit: +12 dB */ +#define EDIT_GAIN_MIN 0.0630957f /* Minimum allowed gain edit with parametric modes: -24 dB */ +#define EDIT_GAIN_MAX 3.9810719f /* Maximum allowed gain edit: +12 dB */ #endif diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index a15128c0ef..4b4efd93c7 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -1516,9 +1516,9 @@ ivas_error IVAS_DEC_SetEditableParameters( st_ivas->hIsmMetaData[obj]->edited_yaw = hIvasEditableParameters.ism_metadata[obj].yaw; st_ivas->hIsmMetaData[obj]->edited_pitch = hIvasEditableParameters.ism_metadata[obj].pitch; #ifdef FIX_GAIN_EDIT_LIMITS - if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX ) { - st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MAX; + st_ivas->hIsmMetaData[obj]->edited_gain = EDIT_GAIN_MAX; } else { @@ -1533,9 +1533,9 @@ ivas_error IVAS_DEC_SetEditableParameters( if ( ism_mode == ISM_SBA_MODE_DISC ) { #ifdef FIX_GAIN_EDIT_LIMITS - if ( hIvasEditableParameters.gain_bed > OBJ_EDIT_GAIN_MAX ) + if ( hIvasEditableParameters.gain_bed > EDIT_GAIN_MAX ) { - st_ivas->hSbaIsmData->gain_bed = OBJ_EDIT_GAIN_MAX; + st_ivas->hSbaIsmData->gain_bed = EDIT_GAIN_MAX; } else { @@ -1560,13 +1560,13 @@ ivas_error IVAS_DEC_SetEditableParameters( { #ifdef FIX_GAIN_EDIT_LIMITS /* Limit gain edit to a range of +12dB to -24dB with parametric ISM mode */ - if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX ) { - st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MAX; + st_ivas->hMasaIsmData->gain_ism_edited[obj] = EDIT_GAIN_MAX; } - else if ( hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) + else if ( hIvasEditableParameters.ism_metadata[obj].gain < EDIT_GAIN_MIN ) { - st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MIN; + st_ivas->hMasaIsmData->gain_ism_edited[obj] = EDIT_GAIN_MIN; } else { @@ -1710,13 +1710,13 @@ ivas_error IVAS_DEC_SetEditableParameters( st_ivas->hMasaIsmData->ism_gain_is_edited[obj] = 1u; #ifdef FIX_GAIN_EDIT_LIMITS /* Limit masa gain edit to a range of +12dB to -infdB with discrete OMASA mode and +12dB to -24dB with parametric OMASA mode */ - if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX ) { - st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MAX; + st_ivas->hMasaIsmData->gain_ism_edited[obj] = EDIT_GAIN_MAX; } - else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < EDIT_GAIN_MIN ) { - st_ivas->hMasaIsmData->gain_ism_edited[obj] = OBJ_EDIT_GAIN_MIN; + st_ivas->hMasaIsmData->gain_ism_edited[obj] = EDIT_GAIN_MIN; } else { @@ -1741,13 +1741,13 @@ ivas_error IVAS_DEC_SetEditableParameters( st_ivas->hIsmMetaData[obj]->edited_pitch = hIvasEditableParameters.ism_metadata[obj].pitch; st_ivas->hIsmMetaData[obj]->edited_radius = hIvasEditableParameters.ism_metadata[obj].radius; #ifdef FIX_GAIN_EDIT_LIMITS - if ( hIvasEditableParameters.ism_metadata[obj].gain > OBJ_EDIT_GAIN_MAX ) + if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX ) { - st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MAX; + st_ivas->hIsmMetaData[obj]->edited_gain = EDIT_GAIN_MAX; } - else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < OBJ_EDIT_GAIN_MIN ) + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.ism_metadata[obj].gain < EDIT_GAIN_MIN ) { - st_ivas->hIsmMetaData[obj]->edited_gain = OBJ_EDIT_GAIN_MIN; + st_ivas->hIsmMetaData[obj]->edited_gain = EDIT_GAIN_MIN; } else { @@ -1764,13 +1764,13 @@ ivas_error IVAS_DEC_SetEditableParameters( { #ifdef FIX_GAIN_EDIT_LIMITS /* Limit masa gain edit to a range of +12dB to -infdB with discrete OMASA mode and +12dB to -24dB with parametric OMASA mode */ - if ( hIvasEditableParameters.gain_bed > OBJ_EDIT_GAIN_MAX ) + if ( hIvasEditableParameters.gain_bed > EDIT_GAIN_MAX ) { - st_ivas->hMasaIsmData->gain_masa_edited = OBJ_EDIT_GAIN_MAX; + st_ivas->hMasaIsmData->gain_masa_edited = EDIT_GAIN_MAX; } - else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.gain_bed < OBJ_EDIT_GAIN_MIN ) + else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && hIvasEditableParameters.gain_bed < EDIT_GAIN_MIN ) { - st_ivas->hMasaIsmData->gain_masa_edited = OBJ_EDIT_GAIN_MIN; + st_ivas->hMasaIsmData->gain_masa_edited = EDIT_GAIN_MIN; } else { -- GitLab