Commit 0336bb8e authored by fotopoulou's avatar fotopoulou
Browse files

Merge branch 'main' into disable_bwd_for_mct

parents c15a98c8 589bd13c
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@
    <ClCompile Include="..\lib_util\evs_rtp_payload.c" />
    <ClCompile Include="..\lib_util\g192.c" />
    <ClCompile Include="..\lib_util\head_rotation_file_reader.c" />
    <ClCompile Include="..\lib_util\vector3_pair_file_reader.c" />
    <ClCompile Include="..\lib_util\hrtf_file_reader.c" />
    <ClCompile Include="..\lib_util\ism_file_reader.c" />
    <ClCompile Include="..\lib_util\ism_file_writer.c" />
@@ -167,6 +168,7 @@
    <ClInclude Include="..\lib_util\cmdl_tools.h" />
    <ClInclude Include="..\lib_util\evs_rtp_payload.h" />
    <ClInclude Include="..\lib_util\g192.h" />
    <ClInclude Include="..\lib_util\vector3_pair_file_reader.h" />
    <ClInclude Include="..\lib_util\head_rotation_file_reader.h" />
    <ClInclude Include="..\lib_util\hrtf_file_reader.h" />
    <ClInclude Include="..\lib_util\ism_file_reader.h" />
+211 −4
Original line number Diff line number Diff line
@@ -42,6 +42,9 @@
#include "ls_custom_file_reader.h"
#include "hrtf_file_reader.h"
#include "head_rotation_file_reader.h"
#ifdef OTR_REFERENCE_VECTOR_TRACKING
#include "vector3_pair_file_reader.h"
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#include "jbm_file_writer.h"
#include "evs_rtp_payload.h"
#ifdef DEBUGGING
@@ -69,9 +72,18 @@ static
#define MAX_NUM_OUTPUT_CHANNELS    16
#define MAX_OUTPUT_PCM_BUFFER_SIZE ( MAX_NUM_OUTPUT_CHANNELS * MAX_FRAME_SIZE )

#ifdef FIX_I109_ORIENTATION_TRACKING
#define IVAS_PUBLIC_ORIENT_TRK_NONE ( 0 )
#define IVAS_PUBLIC_ORIENT_TRK_REF  ( 1 )
#define IVAS_PUBLIC_ORIENT_TRK_AVG  ( 2 )
#ifdef OTR_REFERENCE_VECTOR_TRACKING
#define IVAS_PUBLIC_ORIENT_TRK_REF_VEC     ( 3 )
#define IVAS_PUBLIC_ORIENT_TRK_REF_VEC_LEV ( 4 )
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#else
#define IVAS_PUBLIC_ORIENT_TRK_REF 0
#define IVAS_PUBLIC_ORIENT_TRK_AVG 1

#endif

typedef struct
{
@@ -85,6 +97,14 @@ typedef struct
    bool voipMode;
    bool enableHeadRotation;
    char *headrotTrajFileName;
#ifdef FIX_I109_ORIENTATION_TRACKING
    bool enableReferenceRotation;
    char *refrotTrajFileName;
#endif
#ifdef OTR_REFERENCE_VECTOR_TRACKING
    bool enableReferenceVectorTracking;
    char *referenceVectorTrajFileName;
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#ifdef SUPPORT_JBM_TRACEFILE
    char *jbmTraceFilename;
#endif
@@ -120,7 +140,15 @@ typedef struct

static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg );
static void usage_dec( void );
#ifdef FIX_I109_ORIENTATION_TRACKING
#ifdef OTR_REFERENCE_VECTOR_TRACKING
static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, HeadRotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
#else /* OTR_REFERENCE_VECTOR_TRACKING */
static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, HeadRotFileReader *refRotReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
#endif
#else
static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, HeadRotFileReader *headRotReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
#endif
static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec );
#ifdef DEBUGGING
static ivas_error printBitstreamInfoVoip( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec );
@@ -146,6 +174,12 @@ int main(
    LsCustomFileReader *hLsCustomReader = NULL;
    hrtfFileReader *hrtfReader = NULL;
    HeadRotFileReader *headRotReader = NULL;
#ifdef FIX_I109_ORIENTATION_TRACKING
    HeadRotFileReader *refRotReader = NULL;
#endif
#ifdef OTR_REFERENCE_VECTOR_TRACKING
    Vector3PairFileReader *referenceVectorReader = NULL;
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
    ivas_error error = IVAS_ERR_UNKNOWN;
    int16_t pcmBuf[MAX_OUTPUT_PCM_BUFFER_SIZE];
    RenderConfigReader *renderConfigReader = NULL;
@@ -255,6 +289,33 @@ int main(
        }
    }

#ifdef FIX_I109_ORIENTATION_TRACKING
    /*------------------------------------------------------------------------------------------*
     * Open reference rotation file
     *------------------------------------------------------------------------------------------*/
    if ( arg.enableReferenceRotation )
    {
        if ( ( error = HeadRotationFileReader_open( arg.refrotTrajFileName, &refRotReader ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nError: Can't open reference rotation file %s \n\n", arg.refrotTrajFileName );
            goto cleanup;
        }
    }
#endif
#ifdef OTR_REFERENCE_VECTOR_TRACKING
    /*------------------------------------------------------------------------------------------*
     * Open reference vector trajectory file
     *------------------------------------------------------------------------------------------*/
    if ( arg.enableReferenceVectorTracking )
    {
        if ( ( error = Vector3PairFileReader_open( arg.referenceVectorTrajFileName, &referenceVectorReader ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nError: Can't open reference vector trajectory file %s \n\n", arg.referenceVectorTrajFileName );
            goto cleanup;
        }
    }
#endif /* OTR_REFERENCE_VECTOR_TRACKING */

    /*------------------------------------------------------------------------------------------*
     * Open custom loudspeaker layout file
     *------------------------------------------------------------------------------------------*/
@@ -511,7 +572,15 @@ int main(
    }
    else
    {
#ifdef FIX_I109_ORIENTATION_TRACKING
#ifdef OTR_REFERENCE_VECTOR_TRACKING
        error = decodeG192( arg, hBsReader, headRotReader, refRotReader, referenceVectorReader, hIvasDec, pcmBuf );
#else
        error = decodeG192( arg, hBsReader, headRotReader, refRotReader, hIvasDec, pcmBuf );
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#else
        error = decodeG192( arg, hBsReader, headRotReader, hIvasDec, pcmBuf );
#endif
    }

    if ( error == IVAS_ERR_OK || error == IVAS_ERR_END_OF_FILE )
@@ -567,7 +636,12 @@ cleanup:
    CustomLsReader_close( &hLsCustomReader );
    hrtfFileReader_close( &hrtfReader );
    HeadRotationFileReader_close( &headRotReader );

#ifdef FIX_I109_ORIENTATION_TRACKING
    HeadRotationFileReader_close( &refRotReader );
#endif
#ifdef OTR_REFERENCE_VECTOR_TRACKING
    Vector3PairFileReader_close( &referenceVectorReader );
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
    RenderConfigReader_close( &renderConfigReader );

    if ( BS_Reader_Close( &hBsReader ) != IVAS_ERR_OK )
@@ -704,7 +778,17 @@ static bool parseCmdlIVAS_dec(

    arg->enableHeadRotation = false;
    arg->headrotTrajFileName = NULL;
#ifdef FIX_I109_ORIENTATION_TRACKING
    arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_NONE;
    arg->enableReferenceRotation = false;
    arg->headrotTrajFileName = NULL;
#ifdef OTR_REFERENCE_VECTOR_TRACKING
    arg->enableReferenceVectorTracking = false;
    arg->referenceVectorTrajFileName = NULL;
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#else
    arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF;
#endif

#ifdef SUPPORT_JBM_TRACEFILE
    arg->jbmTraceFilename = NULL;
@@ -879,17 +963,26 @@ static bool parseCmdlIVAS_dec(
        }
        else if ( strcmp( argv_to_upper, "-OTR" ) == 0 )
        {
#ifndef FIX_I109_ORIENTATION_TRACKING
            if ( strlen( argv[i + 1] ) > 3 )
            {
                fprintf( stderr, "Error: Invalid orientation tracking type %s \n\n", argv[i + 1] );
                usage_dec();
                return false;
            }
#endif

            strncpy( argv_to_upper, argv[i + 1], sizeof( argv_to_upper ) - 1 );
            argv_to_upper[sizeof( argv_to_upper ) - 1] = '\0';
            to_upper( argv_to_upper );

#ifdef FIX_I109_ORIENTATION_TRACKING
            if ( strcmp( argv_to_upper, "NONE" ) == 0 )
            {
                arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_NONE;
            }
            else
#endif
                if ( strcmp( argv_to_upper, "REF" ) == 0 )
            {
                arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF;
@@ -898,6 +991,16 @@ static bool parseCmdlIVAS_dec(
            {
                arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_AVG;
            }
#ifdef OTR_REFERENCE_VECTOR_TRACKING
            else if ( strcmp( argv_to_upper, "REF_VEC" ) == 0 )
            {
                arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF_VEC;
            }
            else if ( strcmp( argv_to_upper, "REF_VEC_LEV" ) == 0 )
            {
                arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF_VEC_LEV;
            }
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
            else
            {
                fprintf( stderr, "Error: Invalid orientation tracking type %s \n\n", argv[i + 1] );
@@ -906,6 +1009,40 @@ static bool parseCmdlIVAS_dec(
            }
            i += 2;
        }
#ifdef FIX_I109_ORIENTATION_TRACKING
        else if ( strcmp( argv_to_upper, "-RF" ) == 0 )
        {
            arg->enableReferenceRotation = true;
            i++;

            if ( argc - i <= 4 || argv[i][0] == '-' )
            {
                fprintf( stderr, "Error: Reference rotation file name not specified!\n\n" );
                usage_dec();
                return false;
            }

            arg->refrotTrajFileName = argv[i];
            i++;
        }
#endif
#ifdef OTR_REFERENCE_VECTOR_TRACKING
        else if ( strcmp( argv_to_upper, "-RVF" ) == 0 )
        {
            arg->enableReferenceVectorTracking = true;
            i++;

            if ( argc - i <= 4 || argv[i][0] == '-' )
            {
                fprintf( stderr, "Error: reference vector trajectory file name not specified!\n\n" );
                usage_dec();
                return false;
            }

            arg->referenceVectorTrajFileName = argv[i];
            i++;
        }
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
        else if ( strcmp( argv_to_upper, "-RENDER_CONFIG" ) == 0 )
        {
            arg->renderConfigEnabled = true;
@@ -1098,7 +1235,17 @@ static void usage_dec( void )
    fprintf( stdout, "                      default is OFF, if this option is not used\n" );
    fprintf( stdout, "-force R            : Force specific binaural rendering mode, R = (TDREND, CLDFBREND),\n" );
#endif
#ifdef FIX_I109_ORIENTATION_TRACKING
    fprintf( stdout, "-otr tracking_type  : head orientation tracking type: 'none', 'ref' or 'avg'  (only for binaural rendering)\n" );
    fprintf( stdout, "-rf File            : Reference rotation specified by external trajectory file\n" );
    fprintf( stdout, "                      works only in combination with -otr ref mode\n" );
#else
    fprintf( stdout, "-otr tracking_type  : head orientation tracking type: 'ref' or 'avg'  (only for binaural rendering)\n" );
#endif
#ifdef OTR_REFERENCE_VECTOR_TRACKING
    fprintf( stdout, "-rvf File           : Reference vector specified by external trajectory file\n" );
    fprintf( stdout, "                      works only in combination with -otr ref_vec and ref_vec_lev modes\n" );
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
    fprintf( stdout, "-render_config file : Renderer configuration file\n" );
    fprintf( stdout, "-no_diegetic_pan    : panning mono no dietic sound to stereo -1<= pan <=1,\n" );
    fprintf( stdout, "                      left or l or 1->left, right or r or -1->right, center or c or  0->middle\n" );
@@ -1315,6 +1462,12 @@ static ivas_error decodeG192(
    DecArguments arg,
    BS_READER_HANDLE hBsReader,
    HeadRotFileReader *headRotReader,
#ifdef FIX_I109_ORIENTATION_TRACKING
    HeadRotFileReader *refRotReader,
#ifdef OTR_REFERENCE_VECTOR_TRACKING
    Vector3PairFileReader *referenceVectorReader,
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#endif
    IVAS_DEC_HANDLE hIvasDec,
    int16_t *pcmBuf )

@@ -1414,11 +1567,65 @@ static ivas_error decodeG192(
            goto cleanup;
        }

#ifdef FIX_I109_ORIENTATION_TRACKING
#ifdef OTR_REFERENCE_VECTOR_TRACKING
        /* reference vector */
        if ( arg.enableReferenceVectorTracking )
        {
            IVAS_VECTOR3 listenerPosition, referencePosition;
            if ( ( error = Vector3PairFileReader_read( referenceVectorReader, &listenerPosition, &referencePosition ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nError %s while reading listener and reference positions from %s\n", IVAS_DEC_GetErrorMessage( error ), Vector3PairFileReader_getFilePath( referenceVectorReader ) );
                goto cleanup;
            }

            if ( ( error = IVAS_DEC_FeedRefVectorData( hIvasDec, listenerPosition, referencePosition ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nIVAS_DEC_FeedRefVectorData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                goto cleanup;
            }
        }
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
        /* Reference rotation */
        if ( arg.enableReferenceRotation )
        {
            IVAS_QUATERNION quaternion;
#ifdef TD5
            if ( ( error = HeadRotationFileReading( refRotReader, &quaternion, NULL ) ) != IVAS_ERR_OK )
#else
            if ( ( error = HeadRotationFileReading( refRotReader, &quaternion ) ) != IVAS_ERR_OK )
#endif
            {
                fprintf( stderr, "\nError %s while reading reference rotation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( refRotReader ) );
                goto cleanup;
            }

            if ( ( error = IVAS_DEC_FeedRefRotData( hIvasDec, quaternion ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nIVAS_DEC_FeedRefRotData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                goto cleanup;
            }
        }
#endif
        /* Head-tracking input simulation */
        if ( arg.enableHeadRotation )
        {
            IVAS_QUATERNION Quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES];

#ifdef FIX_I109_ORIENTATION_TRACKING
            for ( i = 0; i < IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; i++ )
            {
#ifdef TD5
                if ( ( error = HeadRotationFileReading( headRotReader, &Quaternions[i], &Pos[i] ) ) != IVAS_ERR_OK )
#else
                if ( ( error = HeadRotationFileReading( headRotReader, &Quaternions[i] ) ) != IVAS_ERR_OK )
#endif
                {
                    fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) );
                    goto cleanup;
                }
            }
#else
#ifdef TD5
            if ( ( error = HeadRotationFileReading( headRotReader, Quaternions, Pos ) ) != IVAS_ERR_OK )
#else
@@ -1428,6 +1635,7 @@ static ivas_error decodeG192(
                fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), HeadRotationFileReader_getFilePath( headRotReader ) );
                goto cleanup;
            }
#endif

#ifdef TD5
            if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternions, Pos ) ) != IVAS_ERR_OK )
@@ -1439,7 +1647,6 @@ static ivas_error decodeG192(
                goto cleanup;
            }
        }

        /* Run decoder for one frame (get rendered output) */
        if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples ) ) != IVAS_ERR_OK )
        {
+245 −34

File changed.

Preview size limit exceeded, changes collapsed.

+7 −0
Original line number Diff line number Diff line
@@ -90,6 +90,13 @@ typedef struct

} IVAS_QUATERNION;

#ifdef OTR_REFERENCE_VECTOR_TRACKING
typedef struct
{
    float x, y, z;
} IVAS_VECTOR3;
#endif /* OTR_REFERENCE_VECTOR_TRACKING */

#ifdef TD5
typedef struct
{
+23 −3
Original line number Diff line number Diff line
@@ -1483,15 +1483,35 @@ typedef enum
 *----------------------------------------------------------------------------------*/

/* Orientation tracking types */
#ifdef FIX_I109_ORIENTATION_TRACKING
#define IVAS_ORIENT_TRK_NONE                    0
#define IVAS_ORIENT_TRK_REF                     1
#define IVAS_ORIENT_TRK_AVG                     2
#ifdef OTR_REFERENCE_VECTOR_TRACKING
#define IVAS_ORIENT_TRK_REF_VEC                 3
#define IVAS_ORIENT_TRK_REF_VEC_LEV             4
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#else
#define IVAS_ORIENT_TRK_REF                     0
#define IVAS_ORIENT_TRK_AVG                     1
#endif

typedef enum
{
    OTR_TRACKING_NONE = IVAS_ORIENT_TRK_REF-1, /* track orientation relative to external reference orientation (default: yaw=pitch=roll=0) */ // VE: not really used in IVAS (only in unit-test)
    OTR_TRACKING_REF_ORIENT = IVAS_ORIENT_TRK_REF, /* track orientation relative to external reference orientation (default: yaw=pitch=roll=0) */
#ifdef FIX_I109_ORIENTATION_TRACKING
    OTR_TRACKING_NONE = IVAS_ORIENT_TRK_NONE,
#else
    OTR_TRACKING_NONE = IVAS_ORIENT_TRK_REF-1,
#endif
    OTR_TRACKING_REF_ORIENT = IVAS_ORIENT_TRK_REF, /* track orientation relative to external reference orientation (default: no rotation) */
    OTR_TRACKING_AVG_ORIENT = IVAS_ORIENT_TRK_AVG  /* track orientation relative to average orientation */

#ifdef FIX_I109_ORIENTATION_TRACKING
#ifdef OTR_REFERENCE_VECTOR_TRACKING
    ,
    OTR_TRACKING_REF_VEC = IVAS_ORIENT_TRK_REF_VEC, /* track orientation relative to external reference vector */
    OTR_TRACKING_REF_VEC_LEV = IVAS_ORIENT_TRK_REF_VEC_LEV  /* track orientation relative to level component of external reference vector */
#endif /* OTR_REFERENCE_VECTOR_TRACKING */
#endif
} OTR_TRACKING_T;


Loading