Commit 71a32f14 authored by Marek Szczerba's avatar Marek Szczerba
Browse files

Merge branch 'main' into 1154-add-rtpdump-support-apply-acoustic-env

parents a22cdcc1 eb30e8a4
Loading
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -4252,6 +4252,46 @@ 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];
                    }
                }
                /* 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 = 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
            }

            /* gain editing for all objects */
+1 −0
Original line number Diff line number Diff line
@@ -172,6 +172,7 @@
#define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR      /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */
#define FIX_1413_IGF_INIT_PRINTOUT                      /* FhG: use correct variable for IGF initiliazation */
#define RENDERER_MD_SYNC_DELAY_TO_INTEGER               /* FhG: change data type of metadata sync delay in ext renderer to int16_t for better BASOP portability (and nicer code) */
#define FIX_1427_OBJ_EDITING_EXT_METADATA               /* Eri: Add support for extended metadata in object editing */
#define FIX_1419_MONO_STEREO_UMX                        /* FhG: fix for issue 1419 : support upmix to all output formats for mono and stereo */


+9 −0
Original line number Diff line number Diff line
@@ -1750,9 +1750,18 @@ ivas_error IVAS_DEC_SetEditableParameters(
            {
                st_ivas->hIsmMetaData[obj]->edited_azimuth = hIvasEditableParameters.ism_metadata[obj].azimuth;
                st_ivas->hIsmMetaData[obj]->edited_elevation = hIvasEditableParameters.ism_metadata[obj].elevation;
#ifdef FIX_1427_OBJ_EDITING_EXT_METADATA // Disable editing extended metadata for OMASA Param ISM
                if ( ism_mode == ISM_MASA_MODE_DISC )
                {
                    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;
                }
#else
                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;
#endif
#ifdef FIX_GAIN_EDIT_LIMITS
                if ( hIvasEditableParameters.ism_metadata[obj].gain > EDIT_GAIN_MAX )
                {
+66 −1
Original line number Diff line number Diff line
@@ -77,8 +77,11 @@ ivas_error ObjectEditFileReader_open(
    }

    self = (ObjectEditFileReader *) calloc( 1, sizeof( ObjectEditFileReader ) );

#ifndef FIX_1427_OBJ_EDITING_EXT_METADATA
    self->maxLineLen = 256;
#else
    self->maxLineLen = 1024;
#endif
    self->editFileHandle = fileHandle;
    self->inLine = (char *) calloc( self->maxLineLen, sizeof( char ) );

@@ -97,6 +100,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_1427_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;
@@ -143,6 +157,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 */
@@ -214,6 +236,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
                    }
                }
            }
@@ -237,6 +288,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
+18 −0
Original line number Diff line number Diff line
@@ -48,6 +48,10 @@ the United Nations Convention on Contracts on the International Sales of Goods.
#define OBJ_EDIT_GAIN_MAX 15.84893f   /* +24 dB */
#endif

#ifdef FIX_1427_OBJ_EDITING_EXT_METADATA
#define OBJ_EDIT_RADIUS_MAX 15.75f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */
#endif

typedef struct ObjectEditFileReader ObjectEditFileReader;
typedef struct ReadObjectEditInfo ReadObjectEditInfo;

@@ -67,6 +71,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