From ebc4c54ff3e8e5ccd67da0f3ca8e5d8afb46f817 Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Thu, 6 Nov 2025 11:33:42 +0100 Subject: [PATCH 1/7] Port MR 2337 from float --- apps/decoder.c | 40 ++++++++++++++++++++ lib_com/options.h | 1 + lib_util/obj_edit_file_reader.c | 67 ++++++++++++++++++++++++++++++++- lib_util/obj_edit_file_reader.h | 19 ++++++++++ 4 files changed, 126 insertions(+), 1 deletion(-) diff --git a/apps/decoder.c b/apps/decoder.c index 94bfab14d..ac76ce1a4 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -3500,6 +3500,46 @@ static void do_object_editing_fx( #endif } } +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA + /* object direction editing only for diegetic objects */ + if ( readInfo->obj_yaw_edited[obj_idx] ) + { + if ( readInfo->obj_yaw_relative[obj_idx] ) + { + /* yaw: apply relative edit + wrap */ + editableParameters->ism_metadata[obj_idx].yaw_fx = ( ( editableParameters->ism_metadata[obj_idx].yaw_fx + (Word32) ( readInfo->obj_yaw[obj_idx] * 4194304 ) + 2264924160 ) % 1509949440 ) - 754974720; /* Q22 */ + } + else + { + editableParameters->ism_metadata[obj_idx].yaw_fx = (Word32) ( readInfo->obj_yaw[obj_idx] * 4194304 ); /* Q22 */ + } + } + if ( readInfo->obj_pitch_edited[obj_idx] ) + { + if ( readInfo->obj_pitch_relative[obj_idx] ) + { + /* pitch: apply relative edit + saturation */ + editableParameters->ism_metadata[obj_idx].pitch_fx = L_max( L_min( editableParameters->ism_metadata[obj_idx].pitch_fx + (Word32) ( readInfo->obj_pitch[obj_idx] * 4194304 ), 377487360 ), -377487360 ); /* Q22 */ + } + else + { + editableParameters->ism_metadata[obj_idx].pitch_fx = (Word32) ( readInfo->obj_pitch[obj_idx] * 4194304 ); /* Q22 */ + } + } + /* radius editing only for diegetic objects */ + if ( readInfo->obj_radius_edited[obj_idx] ) + { + if ( readInfo->obj_radius_relative[obj_idx] ) + { + /* radius: apply relative edit + saturation */ + editableParameters->ism_metadata[obj_idx].radius_fx = L_max( L_min( L_shl_sat( Mpy_32_32( editableParameters->ism_metadata[obj_idx].radius_fx, (Word32) ( readInfo->obj_radius[obj_idx] * 536870912 ) ), 2 ), OBJ_EDIT_RADIUS_MAX_FX ), 0.0 ); /* Q29*Q29 -> Q27 shift back to Q29 */ + } + else + { + editableParameters->ism_metadata[obj_idx].radius_fx = (Word32) ( readInfo->obj_radius[obj_idx] * 536870912 ); /* Q29 */ + } + } +#endif } /* gain editing for all objects */ diff --git a/lib_com/options.h b/lib_com/options.h index f6e4deb5b..3827f88a4 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -145,6 +145,7 @@ #define FIX_2140_OBJECT_EDITING_SANITIZER_ISSUES /* Nokia: Issue 2140, fixes three different sanitizer issues persisting in object editing code. */ #define NONBE_FIX_1172_OBJ_EDIT_JBM /* VA: issue 1172: fix OMASA object editing in JBM */ #define FIX_2193_ISM_GAINS_WITH_OE /* FhG: fix issue 2193: use edited angles in ISM gain calculation */ +#define FIX_2192_OBJ_EDITING_EXT_METADATA /* Eri: Add support for extended metadata in object editing */ /* #################### End BASOP porting switches ############################ */ diff --git a/lib_util/obj_edit_file_reader.c b/lib_util/obj_edit_file_reader.c index 63a542094..44c100973 100644 --- a/lib_util/obj_edit_file_reader.c +++ b/lib_util/obj_edit_file_reader.c @@ -70,8 +70,11 @@ ivas_error ObjectEditFileReader_open( } self = (ObjectEditFileReader *) calloc( 1, sizeof( ObjectEditFileReader ) ); - +#ifndef FIX_2192_OBJ_EDITING_EXT_METADATA self->maxLineLen = 256; +#else + self->maxLineLen = 1024; +#endif self->editFileHandle = fileHandle; self->inLine = (char *) calloc( self->maxLineLen, sizeof( char ) ); @@ -90,6 +93,17 @@ ivas_error ObjectEditFileReader_open( self->readInfo->obj_ele[obj_idx] = 0.0f; self->readInfo->obj_ele_edited[obj_idx] = false; self->readInfo->obj_ele_relative[obj_idx] = false; +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA + self->readInfo->obj_radius[obj_idx] = 0.0f; + self->readInfo->obj_radius_edited[obj_idx] = false; + self->readInfo->obj_radius_relative[obj_idx] = false; + self->readInfo->obj_yaw[obj_idx] = 0.0f; + self->readInfo->obj_yaw_edited[obj_idx] = false; + self->readInfo->obj_yaw_relative[obj_idx] = false; + self->readInfo->obj_pitch[obj_idx] = 0.0f; + self->readInfo->obj_pitch_edited[obj_idx] = false; + self->readInfo->obj_pitch_relative[obj_idx] = false; +#endif } self->rewound = false; @@ -136,6 +150,14 @@ ivas_error ObjectEditFileReader_readNextFrame( readEdits->obj_azi_relative[obj_idx] = false; readEdits->obj_ele_edited[obj_idx] = false; readEdits->obj_ele_relative[obj_idx] = false; +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA + readEdits->obj_radius_edited[obj_idx] = false; + readEdits->obj_radius_relative[obj_idx] = false; + readEdits->obj_yaw_edited[obj_idx] = false; + readEdits->obj_yaw_relative[obj_idx] = false; + readEdits->obj_pitch_edited[obj_idx] = false; + readEdits->obj_pitch_relative[obj_idx] = false; +#endif } /* tokenize the line by comma */ @@ -207,6 +229,35 @@ ivas_error ObjectEditFileReader_readNextFrame( { readEdits->obj_ele_relative[obj_idx] = ( strcmp( paramValue, "1" ) == 0 ); } +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA + else if ( strcmp( param, "radius" ) == 0 ) + { + readEdits->obj_radius[obj_idx] = strtof( paramValue, NULL ); + readEdits->obj_radius_edited[obj_idx] = true; + } + else if ( strcmp( param, "yaw" ) == 0 ) + { + readEdits->obj_yaw[obj_idx] = strtof( paramValue, NULL ); + readEdits->obj_yaw_edited[obj_idx] = true; + } + else if ( strcmp( param, "pitch" ) == 0 ) + { + readEdits->obj_pitch[obj_idx] = strtof( paramValue, NULL ); + readEdits->obj_pitch_edited[obj_idx] = true; + } + else if ( strcmp( param, "relradius" ) == 0 ) + { + readEdits->obj_radius_relative[obj_idx] = ( strcmp( paramValue, "1" ) == 0 ); + } + else if ( strcmp( param, "relyaw" ) == 0 ) + { + readEdits->obj_yaw_relative[obj_idx] = ( strcmp( paramValue, "1" ) == 0 ); + } + else if ( strcmp( param, "relpitch" ) == 0 ) + { + readEdits->obj_pitch_relative[obj_idx] = ( strcmp( paramValue, "1" ) == 0 ); + } +#endif } } } @@ -230,6 +281,20 @@ ivas_error ObjectEditFileReader_readNextFrame( { readEdits->obj_ele[obj_idx] = max( min( readEdits->obj_ele[obj_idx], 90.f ), -90.f ); } +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA + if ( readEdits->obj_radius_edited[obj_idx] && !readEdits->obj_radius_relative[obj_idx] ) + { + readEdits->obj_radius[obj_idx] = max( min( readEdits->obj_radius[obj_idx], OBJ_EDIT_RADIUS_MAX ), 0.0f ); + } + if ( readEdits->obj_yaw_edited[obj_idx] && !readEdits->obj_yaw_relative[obj_idx] ) + { + readEdits->obj_yaw[obj_idx] = max( min( readEdits->obj_yaw[obj_idx], 180.f ), -180.f ); + } + if ( readEdits->obj_pitch_edited[obj_idx] && !readEdits->obj_pitch_relative[obj_idx] ) + { + readEdits->obj_pitch[obj_idx] = max( min( readEdits->obj_pitch[obj_idx], 90.f ), -90.f ); + } +#endif } } else diff --git a/lib_util/obj_edit_file_reader.h b/lib_util/obj_edit_file_reader.h index 4c3e4435f..ef83eb4c6 100644 --- a/lib_util/obj_edit_file_reader.h +++ b/lib_util/obj_edit_file_reader.h @@ -46,6 +46,11 @@ the United Nations Convention on Contracts on the International Sales of Goods. #define OBJ_EDIT_GAIN_MIN 0.06309573f /* -24 dB */ #define OBJ_EDIT_GAIN_MAX 3.9622325f /* +12 dB */ +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA +#define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ +#define OBJ_EDIT_RADIUS_MAX_FX 8452702364 /* Q29, 15.75f */ +#endif + typedef struct ObjectEditFileReader ObjectEditFileReader; typedef struct ReadObjectEditInfo ReadObjectEditInfo; @@ -65,6 +70,20 @@ struct ReadObjectEditInfo float obj_ele[IVAS_MAX_NUM_OBJECTS]; bool obj_ele_edited[IVAS_MAX_NUM_OBJECTS]; bool obj_ele_relative[IVAS_MAX_NUM_OBJECTS]; + +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA + float obj_radius[IVAS_MAX_NUM_OBJECTS]; + bool obj_radius_edited[IVAS_MAX_NUM_OBJECTS]; + bool obj_radius_relative[IVAS_MAX_NUM_OBJECTS]; + + float obj_yaw[IVAS_MAX_NUM_OBJECTS]; + bool obj_yaw_edited[IVAS_MAX_NUM_OBJECTS]; + bool obj_yaw_relative[IVAS_MAX_NUM_OBJECTS]; + + float obj_pitch[IVAS_MAX_NUM_OBJECTS]; + bool obj_pitch_edited[IVAS_MAX_NUM_OBJECTS]; + bool obj_pitch_relative[IVAS_MAX_NUM_OBJECTS]; +#endif }; struct ObjectEditFileReader -- GitLab From 5eb81405ad074b4accebecaf06ecd21767f16eb5 Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Mon, 10 Nov 2025 11:10:27 +0100 Subject: [PATCH 2/7] Port changes from float --- apps/decoder.c | 5 +++-- lib_com/common_api_types.h | 10 +++++++--- lib_dec/lib_dec_fx.c | 12 ++++++++++++ lib_util/obj_edit_file_reader.h | 5 +++-- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index d6e369b1f..c24028565 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -3560,8 +3560,9 @@ static void do_object_editing_fx( { if ( readInfo->obj_radius_relative[obj_idx] ) { - /* radius: apply relative edit + saturation */ - editableParameters->ism_metadata[obj_idx].radius_fx = L_max( L_min( L_shl_sat( Mpy_32_32( editableParameters->ism_metadata[obj_idx].radius_fx, (Word32) ( readInfo->obj_radius[obj_idx] * 536870912 ) ), 2 ), OBJ_EDIT_RADIUS_MAX_FX ), 0.0 ); /* Q29*Q29 -> Q27 shift back to Q29 */ + /* radius: apply relative edit + saturation */ + Word32 temp_result = L_shl_sat( Mpy_32_32( editableParameters->ism_metadata[obj_idx].radius_fx, (Word32) ( readInfo->obj_radius[obj_idx] * (Word32) 536870912L ) ), 2 ); + editableParameters->ism_metadata[obj_idx].radius_fx = L_max( L_min( temp_result, OBJ_EDIT_RADIUS_MAX_FX ), 0 ); /* Q29*Q29 -> Q27 shift back to Q29 */ } else { diff --git a/lib_com/common_api_types.h b/lib_com/common_api_types.h index 6259b5f8d..c8238e56f 100644 --- a/lib_com/common_api_types.h +++ b/lib_com/common_api_types.h @@ -125,9 +125,13 @@ typedef struct _IVAS_ENC_CHANNEL_AWARE_CONFIG typedef struct _IVAS_ISM_METADATA { - Word32 azimuth_fx; /* Q22 */ - Word32 elevation_fx; /* Q22 */ - Word16 radius_fx; /* Q9 */ + Word32 azimuth_fx; /* Q22 */ + Word32 elevation_fx; /* Q22 */ +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA + Word32 radius_fx; /* Q29 */ +#else + Word16 radius_fx; /* Q9 */ +#endif Word32 spread_fx; /* Q22 */ Word32 gainFactor_fx; /* Q29 */ Word32 yaw_fx; /* Q22 */ diff --git a/lib_dec/lib_dec_fx.c b/lib_dec/lib_dec_fx.c index 382d72dd2..bf4c0d7a1 100644 --- a/lib_dec/lib_dec_fx.c +++ b/lib_dec/lib_dec_fx.c @@ -4593,12 +4593,24 @@ ivas_error IVAS_DEC_SetEditableParameters( move32(); st_ivas->hIsmMetaData[obj]->edited_elevation_fx = hIvasEditableParameters.ism_metadata[obj].elevation_fx; move32(); +#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA + IF( EQ_16( ism_mode, ISM_MASA_MODE_DISC ) ) + { + st_ivas->hIsmMetaData[obj]->edited_yaw_fx = hIvasEditableParameters.ism_metadata[obj].yaw_fx; + move32(); + st_ivas->hIsmMetaData[obj]->edited_pitch_fx = hIvasEditableParameters.ism_metadata[obj].pitch_fx; + move32(); + st_ivas->hIsmMetaData[obj]->edited_radius_fx = hIvasEditableParameters.ism_metadata[obj].radius_fx; + move32(); + } +#else st_ivas->hIsmMetaData[obj]->edited_yaw_fx = hIvasEditableParameters.ism_metadata[obj].yaw_fx; move32(); st_ivas->hIsmMetaData[obj]->edited_pitch_fx = hIvasEditableParameters.ism_metadata[obj].pitch_fx; move32(); st_ivas->hIsmMetaData[obj]->edited_radius_fx = hIvasEditableParameters.ism_metadata[obj].radius_fx; move32(); +#endif #ifndef NONBE_FIX_1172_OBJ_EDIT_JBM st_ivas->hIsmMetaData[obj]->azimuth_fx = hIvasEditableParameters.ism_metadata[obj].azimuth_fx; move32(); diff --git a/lib_util/obj_edit_file_reader.h b/lib_util/obj_edit_file_reader.h index e3e6156d4..4f6e7ee20 100644 --- a/lib_util/obj_edit_file_reader.h +++ b/lib_util/obj_edit_file_reader.h @@ -54,8 +54,9 @@ the United Nations Convention on Contracts on the International Sales of Goods. #endif #ifdef FIX_2192_OBJ_EDITING_EXT_METADATA -#define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ -#define OBJ_EDIT_RADIUS_MAX_FX 8452702364 /* Q29, 15.75f */ +#define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ +#define OBJ_EDIT_RADIUS_MAX_FX 8455716864LL /* Q29, 15.75f */ +#define OBJ_EDIT_RADIUS_MIN_FX 0 #endif typedef struct ObjectEditFileReader ObjectEditFileReader; -- GitLab From 01122a00d46c8a1f8ff1bf0c50fc1f9d521f12ad Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Mon, 10 Nov 2025 15:16:11 +0100 Subject: [PATCH 3/7] Keep radius_fx as Word16 instead of Word32 --- apps/decoder.c | 13 +++++++++---- lib_com/common_api_types.h | 10 +++------- lib_util/obj_edit_file_reader.h | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index c24028565..62f7566d3 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -3560,13 +3560,18 @@ static void do_object_editing_fx( { if ( readInfo->obj_radius_relative[obj_idx] ) { - /* radius: apply relative edit + saturation */ - Word32 temp_result = L_shl_sat( Mpy_32_32( editableParameters->ism_metadata[obj_idx].radius_fx, (Word32) ( readInfo->obj_radius[obj_idx] * (Word32) 536870912L ) ), 2 ); - editableParameters->ism_metadata[obj_idx].radius_fx = L_max( L_min( temp_result, OBJ_EDIT_RADIUS_MAX_FX ), 0 ); /* Q29*Q29 -> Q27 shift back to Q29 */ + /* radius: apply relative edit + saturation */ + Word32 temp_radius = L_max( L_min( ( L_shl_sat( Mpy_32_32( (Word32) editableParameters->ism_metadata[obj_idx].radius_fx, (Word32) ( readInfo->obj_radius[obj_idx] * 512 ) ), 2 ) ), OBJ_EDIT_RADIUS_MAX_FX ), 0 ); /* Q9*Q9 -> Q7 shift back to Q9 */ + // Saturate to 16-bit range + if ( temp_radius > 32767 ) + temp_radius = 32767; + if ( temp_radius < -32768 ) + temp_radius = -32768; + editableParameters->ism_metadata[obj_idx].radius_fx = (Word16) temp_radius; } else { - editableParameters->ism_metadata[obj_idx].radius_fx = (Word32) ( readInfo->obj_radius[obj_idx] * 536870912 ); /* Q29 */ + editableParameters->ism_metadata[obj_idx].radius_fx = (Word16) ( readInfo->obj_radius[obj_idx] * 512 ); /* Q9 */ } } #endif diff --git a/lib_com/common_api_types.h b/lib_com/common_api_types.h index c8238e56f..6259b5f8d 100644 --- a/lib_com/common_api_types.h +++ b/lib_com/common_api_types.h @@ -125,13 +125,9 @@ typedef struct _IVAS_ENC_CHANNEL_AWARE_CONFIG typedef struct _IVAS_ISM_METADATA { - Word32 azimuth_fx; /* Q22 */ - Word32 elevation_fx; /* Q22 */ -#ifdef FIX_2192_OBJ_EDITING_EXT_METADATA - Word32 radius_fx; /* Q29 */ -#else - Word16 radius_fx; /* Q9 */ -#endif + Word32 azimuth_fx; /* Q22 */ + Word32 elevation_fx; /* Q22 */ + Word16 radius_fx; /* Q9 */ Word32 spread_fx; /* Q22 */ Word32 gainFactor_fx; /* Q29 */ Word32 yaw_fx; /* Q22 */ diff --git a/lib_util/obj_edit_file_reader.h b/lib_util/obj_edit_file_reader.h index 4f6e7ee20..04ca7f1e5 100644 --- a/lib_util/obj_edit_file_reader.h +++ b/lib_util/obj_edit_file_reader.h @@ -55,7 +55,7 @@ the United Nations Convention on Contracts on the International Sales of Goods. #ifdef FIX_2192_OBJ_EDITING_EXT_METADATA #define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ -#define OBJ_EDIT_RADIUS_MAX_FX 8455716864LL /* Q29, 15.75f */ +#define OBJ_EDIT_RADIUS_MAX_FX 8064 /* Q9, 15.75f (15.75 × 512 = 8064) */ #define OBJ_EDIT_RADIUS_MIN_FX 0 #endif -- GitLab From 6bae3349986427520ce1f550152d0d3b4d6ebbbd Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Mon, 10 Nov 2025 16:40:06 +0100 Subject: [PATCH 4/7] Edit format --- lib_util/obj_edit_file_reader.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_util/obj_edit_file_reader.h b/lib_util/obj_edit_file_reader.h index 04ca7f1e5..084b9a67a 100644 --- a/lib_util/obj_edit_file_reader.h +++ b/lib_util/obj_edit_file_reader.h @@ -54,8 +54,8 @@ the United Nations Convention on Contracts on the International Sales of Goods. #endif #ifdef FIX_2192_OBJ_EDITING_EXT_METADATA -#define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ -#define OBJ_EDIT_RADIUS_MAX_FX 8064 /* Q9, 15.75f (15.75 × 512 = 8064) */ +#define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ +#define OBJ_EDIT_RADIUS_MAX_FX 8064 /* Q9, 15.75f (15.75 × 512 = 8064) */ #define OBJ_EDIT_RADIUS_MIN_FX 0 #endif -- GitLab From 89ba117e14cdcb19590d7a4aaeb9cc3c1acd2f14 Mon Sep 17 00:00:00 2001 From: Sumeyra Kanik Date: Mon, 10 Nov 2025 18:01:41 +0100 Subject: [PATCH 5/7] Changes in radius_fx edit --- apps/decoder.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 62f7566d3..7194a8ea5 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -3561,13 +3561,18 @@ static void do_object_editing_fx( if ( readInfo->obj_radius_relative[obj_idx] ) { /* radius: apply relative edit + saturation */ - Word32 temp_radius = L_max( L_min( ( L_shl_sat( Mpy_32_32( (Word32) editableParameters->ism_metadata[obj_idx].radius_fx, (Word32) ( readInfo->obj_radius[obj_idx] * 512 ) ), 2 ) ), OBJ_EDIT_RADIUS_MAX_FX ), 0 ); /* Q9*Q9 -> Q7 shift back to Q9 */ - // Saturate to 16-bit range - if ( temp_radius > 32767 ) - temp_radius = 32767; - if ( temp_radius < -32768 ) - temp_radius = -32768; - editableParameters->ism_metadata[obj_idx].radius_fx = (Word16) temp_radius; + #define SQ 9 + + #define SHIFT_DUE_TO_SQxSQ ( SQ - ( SQ + SQ + 1 - 16 ) ) /* ^shift by 6 == mult by 2^6 = 64.0 */ + + Word32 L_tmp1 = L_mult( editableParameters->ism_metadata[obj_idx].radius_fx, (Word16) ( readInfo->obj_radius[obj_idx] * ( 1L << ( SQ ) ) ) ); /*SQ*SQ*/ + Word32 L_tmp2 = L_shl_sat( L_tmp1, SHIFT_DUE_TO_SQxSQ); /*shift back to Q(9+16)*/ + Word16 temp_radius = round_fx(L_tmp2); /* Q25 -> Q9 */ + temp_radius = s_max( s_min( temp_radius , OBJ_EDIT_RADIUS_MAX_FX ), 0 ); + + /* L_tmp2 is in S31Q25 stored in a signed Word32 + temp_radius is in S15Q9 stored in a signed Word16 + */ } else { -- GitLab From f946e6d9f22bc74f395c1b35d7bdb77d282785ae Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Mon, 10 Nov 2025 18:48:13 +0100 Subject: [PATCH 6/7] Clang format --- apps/decoder.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 7194a8ea5..f35ed1f04 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -3560,18 +3560,18 @@ static void do_object_editing_fx( { if ( readInfo->obj_radius_relative[obj_idx] ) { - /* radius: apply relative edit + saturation */ - #define SQ 9 +/* radius: apply relative edit + saturation */ +#define SQ 9 - #define SHIFT_DUE_TO_SQxSQ ( SQ - ( SQ + SQ + 1 - 16 ) ) /* ^shift by 6 == mult by 2^6 = 64.0 */ +#define SHIFT_DUE_TO_SQxSQ ( SQ - ( SQ + SQ + 1 - 16 ) ) /* ^shift by 6 == mult by 2^6 = 64.0 */ Word32 L_tmp1 = L_mult( editableParameters->ism_metadata[obj_idx].radius_fx, (Word16) ( readInfo->obj_radius[obj_idx] * ( 1L << ( SQ ) ) ) ); /*SQ*SQ*/ - Word32 L_tmp2 = L_shl_sat( L_tmp1, SHIFT_DUE_TO_SQxSQ); /*shift back to Q(9+16)*/ - Word16 temp_radius = round_fx(L_tmp2); /* Q25 -> Q9 */ - temp_radius = s_max( s_min( temp_radius , OBJ_EDIT_RADIUS_MAX_FX ), 0 ); + Word32 L_tmp2 = L_shl_sat( L_tmp1, SHIFT_DUE_TO_SQxSQ ); /*shift back to Q(9+16)*/ + Word16 temp_radius = round_fx( L_tmp2 ); /* Q25 -> Q9 */ + temp_radius = s_max( s_min( temp_radius, OBJ_EDIT_RADIUS_MAX_FX ), 0 ); - /* L_tmp2 is in S31Q25 stored in a signed Word32 - temp_radius is in S15Q9 stored in a signed Word16 + /* L_tmp2 is in S31Q25 stored in a signed Word32 + temp_radius is in S15Q9 stored in a signed Word16 */ } else -- GitLab From 6cd46fe0d0724ba7fe0f2b887d45c8903c6c83d7 Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Mon, 10 Nov 2025 19:28:08 +0100 Subject: [PATCH 7/7] Fix move32->move16 --- lib_dec/lib_dec_fx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_dec/lib_dec_fx.c b/lib_dec/lib_dec_fx.c index bc4419a95..827d937db 100644 --- a/lib_dec/lib_dec_fx.c +++ b/lib_dec/lib_dec_fx.c @@ -4624,11 +4624,11 @@ ivas_error IVAS_DEC_SetEditableParameters( IF( EQ_16( ism_mode, ISM_MASA_MODE_DISC ) ) { st_ivas->hIsmMetaData[obj]->edited_yaw_fx = hIvasEditableParameters.ism_metadata[obj].yaw_fx; - move32(); + move16(); st_ivas->hIsmMetaData[obj]->edited_pitch_fx = hIvasEditableParameters.ism_metadata[obj].pitch_fx; - move32(); + move16(); st_ivas->hIsmMetaData[obj]->edited_radius_fx = hIvasEditableParameters.ism_metadata[obj].radius_fx; - move32(); + move16(); } #else st_ivas->hIsmMetaData[obj]->edited_yaw_fx = hIvasEditableParameters.ism_metadata[obj].yaw_fx; -- GitLab