Loading apps/decoder.c +42 −0 Original line number Diff line number Diff line Loading @@ -4139,6 +4139,33 @@ static void do_object_editing( editableParameters->ism_metadata[obj_idx].elevation = readInfo->obj_ele[obj_idx]; } } #ifdef FIX_1427_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 = fmodf( editableParameters->ism_metadata[obj_idx].yaw + readInfo->obj_yaw[obj_idx] + 540.f, 360.f ) - 180.f; } else { editableParameters->ism_metadata[obj_idx].yaw = readInfo->obj_yaw[obj_idx]; } } 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 = fmaxf( fminf( editableParameters->ism_metadata[obj_idx].pitch + readInfo->obj_pitch[obj_idx], 90.f ), -90.f ); } else { editableParameters->ism_metadata[obj_idx].pitch = readInfo->obj_pitch[obj_idx]; } } #endif } /* gain editing for all objects */ Loading @@ -4154,6 +4181,21 @@ static void do_object_editing( editableParameters->ism_metadata[obj_idx].gain = readInfo->obj_gain[obj_idx]; } } #ifdef FIX_1427_OBJ_EDITING_EXT_METADATA /* radius editing for all 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 = fmaxf( fminf( editableParameters->ism_metadata[obj_idx].radius * readInfo->obj_radius[obj_idx], OBJ_EDIT_RADIUS_MAX ), 0.0f ); } else { editableParameters->ism_metadata[obj_idx].radius = readInfo->obj_radius[obj_idx]; } } #endif } } else Loading lib_util/obj_edit_file_reader.c +51 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,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_1427_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 */ Loading Loading @@ -214,6 +222,35 @@ ivas_error ObjectEditFileReader_readNextFrame( { readEdits->obj_ele_relative[obj_idx] = ( strcmp( paramValue, "1" ) == 0 ); } #ifdef FIX_1427_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 } } } Loading @@ -237,6 +274,20 @@ ivas_error ObjectEditFileReader_readNextFrame( { readEdits->obj_ele[obj_idx] = max( min( readEdits->obj_ele[obj_idx], 90.f ), -90.f ); } #ifdef FIX_1427_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 Loading lib_util/obj_edit_file_reader.h +15 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ 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 15.84893f /* +24 dB */ #define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ typedef struct ObjectEditFileReader ObjectEditFileReader; typedef struct ReadObjectEditInfo ReadObjectEditInfo; Loading @@ -63,6 +64,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_1427_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 Loading Loading
apps/decoder.c +42 −0 Original line number Diff line number Diff line Loading @@ -4139,6 +4139,33 @@ static void do_object_editing( editableParameters->ism_metadata[obj_idx].elevation = readInfo->obj_ele[obj_idx]; } } #ifdef FIX_1427_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 = fmodf( editableParameters->ism_metadata[obj_idx].yaw + readInfo->obj_yaw[obj_idx] + 540.f, 360.f ) - 180.f; } else { editableParameters->ism_metadata[obj_idx].yaw = readInfo->obj_yaw[obj_idx]; } } 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 = fmaxf( fminf( editableParameters->ism_metadata[obj_idx].pitch + readInfo->obj_pitch[obj_idx], 90.f ), -90.f ); } else { editableParameters->ism_metadata[obj_idx].pitch = readInfo->obj_pitch[obj_idx]; } } #endif } /* gain editing for all objects */ Loading @@ -4154,6 +4181,21 @@ static void do_object_editing( editableParameters->ism_metadata[obj_idx].gain = readInfo->obj_gain[obj_idx]; } } #ifdef FIX_1427_OBJ_EDITING_EXT_METADATA /* radius editing for all 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 = fmaxf( fminf( editableParameters->ism_metadata[obj_idx].radius * readInfo->obj_radius[obj_idx], OBJ_EDIT_RADIUS_MAX ), 0.0f ); } else { editableParameters->ism_metadata[obj_idx].radius = readInfo->obj_radius[obj_idx]; } } #endif } } else Loading
lib_util/obj_edit_file_reader.c +51 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,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_1427_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 */ Loading Loading @@ -214,6 +222,35 @@ ivas_error ObjectEditFileReader_readNextFrame( { readEdits->obj_ele_relative[obj_idx] = ( strcmp( paramValue, "1" ) == 0 ); } #ifdef FIX_1427_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 } } } Loading @@ -237,6 +274,20 @@ ivas_error ObjectEditFileReader_readNextFrame( { readEdits->obj_ele[obj_idx] = max( min( readEdits->obj_ele[obj_idx], 90.f ), -90.f ); } #ifdef FIX_1427_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 Loading
lib_util/obj_edit_file_reader.h +15 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ 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 15.84893f /* +24 dB */ #define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */ typedef struct ObjectEditFileReader ObjectEditFileReader; typedef struct ReadObjectEditInfo ReadObjectEditInfo; Loading @@ -63,6 +64,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_1427_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 Loading