Commit 69922bb5 authored by norvell's avatar norvell
Browse files

Merge branch '2192_basop_port-mr2337-from-float-object-editing-do-not-support-ext-md' into 'main'

[Non-BE] Port 2337 from float Resolve "Object editing do not support extended metadata" - basop part

Closes #2192

See merge request !2550
parents be1996c8 6cd46fe0
Loading
Loading
Loading
Loading
+51 −0
Original line number Diff line number Diff line
@@ -3585,6 +3585,57 @@ 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 */
#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
                    {
                        editableParameters->ism_metadata[obj_idx].radius_fx = (Word16) ( readInfo->obj_radius[obj_idx] * 512 ); /* Q9 */
                    }
                }
#endif
            }

            /* gain editing for all objects */
+1 −0
Original line number Diff line number Diff line
@@ -158,6 +158,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 ############################ */

+12 −0
Original line number Diff line number Diff line
@@ -4620,12 +4620,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;
                    move16();
                    st_ivas->hIsmMetaData[obj]->edited_pitch_fx = hIvasEditableParameters.ism_metadata[obj].pitch_fx;
                    move16();
                    st_ivas->hIsmMetaData[obj]->edited_radius_fx = hIvasEditableParameters.ism_metadata[obj].radius_fx;
                    move16();
                }
#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();
+66 −1
Original line number Diff line number Diff line
@@ -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
+20 −0
Original line number Diff line number Diff line
@@ -53,6 +53,12 @@ the United Nations Convention on Contracts on the International Sales of Goods.
#define OBJ_EDIT_GAIN_MAX    3.9622325f  /* +12 dB */
#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_MIN_FX 0
#endif

typedef struct ObjectEditFileReader ObjectEditFileReader;
typedef struct ReadObjectEditInfo ReadObjectEditInfo;

@@ -72,6 +78,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