Loading Workspace_msvc/lib_util.vcxproj +2 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading @@ -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" /> Loading apps/decoder.c +105 −2 Original line number Diff line number Diff line Loading @@ -43,6 +43,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 Loading Loading @@ -73,6 +76,10 @@ static #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 Loading @@ -94,6 +101,10 @@ typedef struct 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 Loading Loading @@ -131,7 +142,11 @@ 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 Loading Loading @@ -163,6 +178,9 @@ int main( #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; Loading Loading @@ -269,6 +287,19 @@ int main( } } #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 Loading Loading @@ -518,7 +549,11 @@ 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 Loading Loading @@ -581,7 +616,9 @@ cleanup: #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 ) Loading Loading @@ -728,6 +765,10 @@ static bool parseCmdlIVAS_dec( 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 Loading Loading @@ -947,6 +988,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] ); Loading @@ -954,7 +1005,7 @@ static bool parseCmdlIVAS_dec( return false; } #else char tmp[4]; char tmp[11]; strcpy( tmp, argv[i + 1] ); #endif #ifdef FIX_I109_ORIENTATION_TRACKING Loading @@ -978,6 +1029,16 @@ static bool parseCmdlIVAS_dec( { arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_AVG; } #ifdef OTR_REFERENCE_VECTOR_TRACKING else if ( strcmp( to_upper( tmp ), "REF_VEC" ) == 0 ) { arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF_VEC; } else if ( strcmp( to_upper( tmp ), "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", tmp ); Loading @@ -1004,6 +1065,23 @@ static bool parseCmdlIVAS_dec( 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; Loading Loading @@ -1232,6 +1310,10 @@ static void usage_dec( void ) #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" ); Loading Loading @@ -1429,6 +1511,9 @@ static ivas_error decodeG192( 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 ) Loading Loading @@ -1564,6 +1649,24 @@ static ivas_error decodeG192( goto cleanup; } } #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 */ #endif /* Run decoder for one frame (get rendered output) */ if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples ) ) != IVAS_ERR_OK ) Loading apps/renderer.c +77 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,9 @@ #include "cmdln_parser.h" #include "common_api_types.h" #include "head_rotation_file_reader.h" #ifdef OTR_REFERENCE_VECTOR_TRACKING #include "vector3_pair_file_reader.h" #endif /* OTR_REFERENCE_VECTOR_TRACKING */ #include "hrtf_file_reader.h" #include "ism_file_reader.h" #include "lib_rend.h" Loading Loading @@ -125,6 +128,9 @@ typedef struct int16_t numInMetadataFiles; char headRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING char referenceVectorFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; #endif /* OTR_REFERENCE_VECTOR_TRACKING */ char referenceRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; #endif char customHrtfFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; Loading Loading @@ -163,6 +169,9 @@ typedef enum CmdLnOptionId_inputMetadata, CmdLnOptionId_listFormats, CmdLnOptionId_inputGain, #ifdef OTR_REFERENCE_VECTOR_TRACKING CmdLnOptionId_referenceVectorFile, #endif /* OTR_REFERENCE_VECTOR_TRACKING */ } CmdLnOptionId; static const CmdLnParser_Option cliOptions[] = { Loading Loading @@ -237,7 +246,11 @@ static const CmdLnParser_Option cliOptions[] = { .match = "tracking_type", .matchShort = "otr", #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING .description = "Head orientation tracking type: 'none', 'ref', 'avg' or `ref_vec` or `ref_vec_lev` (only for BINAURAL and BINAURAL_ROOM)", #else .description = "Head orientation tracking type: 'none', 'ref' or 'avg' (only for BINAURAL and BINAURAL_ROOM)", #endif /* OTR_REFERENCE_VECTOR_TRACKING */ #else .description = "Head orientation tracking type: 'ref' or 'avg' (only for BINAURAL and BINAURAL_ROOM)", #endif Loading Loading @@ -276,6 +289,14 @@ static const CmdLnParser_Option cliOptions[] = { .matchShort = "l", .description = "List supported audio formats", }, #ifdef OTR_REFERENCE_VECTOR_TRACKING { .id = CmdLnOptionId_referenceVectorFile, .match = "reference_vector_file", .matchShort = "rvf", .description = "Reference vector trajectory file for simulation of head tracking (only for BINAURAL and BINAURAL_ROOM outputs)", }, #endif /* OTR_REFERENCE_VECTOR_TRACKING */ }; static const int32_t numCliOptions = sizeof( cliOptions ) / sizeof( CmdLnParser_Option ); Loading Loading @@ -539,6 +560,9 @@ int main( IVAS_REND_HANDLE hIvasRend; HeadRotFileReader *headRotReader = NULL; #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING Vector3PairFileReader *referenceVectorReader = NULL; #endif /* OTR_REFERENCE_VECTOR_TRACKING */ HeadRotFileReader *referenceRotReader = NULL; #endif hrtfFileReader *hrtfFileReader = NULL; Loading Loading @@ -591,6 +615,9 @@ int main( #endif convert_backslash( args.headRotationFilePath ); #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING convert_backslash( args.referenceVectorFilePath ); #endif /* OTR_REFERENCE_VECTOR_TRACKING */ convert_backslash( args.referenceRotationFilePath ); #endif convert_backslash( args.inLfePanningMatrixFile ); Loading @@ -613,6 +640,16 @@ int main( exit( -1 ); } } #ifdef OTR_REFERENCE_VECTOR_TRACKING if ( !isEmptyString( args.referenceVectorFilePath ) ) { if ( Vector3PairFileReader_open( args.referenceVectorFilePath, &referenceVectorReader ) != IVAS_ERR_OK ) { fprintf( stderr, "Error opening file: %s\n", args.referenceVectorFilePath ); exit( -1 ); } } #endif /* OTR_REFERENCE_VECTOR_TRACKING */ #endif if ( !isEmptyString( args.customHrtfFilePath ) ) Loading Loading @@ -941,6 +978,22 @@ int main( } #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING if ( referenceVectorReader != NULL ) { IVAS_VECTOR3 listenerPos, refPos; if ( ( error = Vector3PairFileReader_read( referenceVectorReader, &listenerPos, &refPos ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_SetReferenceVector( hIvasRend, listenerPos, refPos ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } #endif /* OTR_REFERENCE_VECTOR_TRACKING */ /* Read from reference rotation trajectory file if specified */ if ( referenceRotReader != NULL ) { Loading Loading @@ -1120,6 +1173,9 @@ int main( AudioFileWriter_close( &audioWriter ); HeadRotationFileReader_close( &headRotReader ); #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING Vector3PairFileReader_close( &referenceVectorReader ); #endif /* OTR_REFERENCE_VECTOR_TRACKING */ HeadRotationFileReader_close( &referenceRotReader ); #endif hrtfFileReader_close( &hrtfFileReader ); Loading Loading @@ -1360,6 +1416,18 @@ static bool parseOrientationTracking( { *tracking_type = IVAS_ORIENT_TRK_AVG; } #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING else if ( strcmp( value, "REF_VEC" ) == 0 ) { *tracking_type = IVAS_ORIENT_TRK_REF_VEC; } else if ( strcmp( value, "REF_VEC_LEV" ) == 0 ) { *tracking_type = IVAS_ORIENT_TRK_REF_VEC_LEV; } #endif /* OTR_REFERENCE_VECTOR_TRACKING */ #endif else { fprintf( stderr, "Error: Invalid orientation tracking type %s \n\n", value ); Loading Loading @@ -1580,6 +1648,9 @@ static CmdlnArgs defaultArgs( clearString( args.headRotationFilePath ); #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING clearString( args.referenceVectorFilePath ); #endif /* OTR_REFERENCE_VECTOR_TRACKING */ clearString( args.referenceRotationFilePath ); #endif clearString( args.customHrtfFilePath ); Loading Loading @@ -1665,6 +1736,12 @@ static void parseOption( strncpy( args->headRotationFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); break; #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING case CmdLnOptionId_referenceVectorFile: assert( numOptionValues == 1 ); strncpy( args->referenceVectorFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); break; #endif /* OTR_REFERENCE_VECTOR_TRACKING */ case CmdLnOptionId_refRotFile: assert( numOptionValues == 1 ); strncpy( args->referenceRotationFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); Loading lib_com/common_api_types.h +7 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,13 @@ typedef struct } IVAS_QUATERNION; #ifdef OTR_REFERENCE_VECTOR_TRACKING typedef struct { float x, y, z; } IVAS_VECTOR3; #endif /* OTR_REFERENCE_VECTOR_TRACKING */ typedef struct ivas_masa_metadata_frame_struct *IVAS_MASA_METADATA_HANDLE; typedef struct ivas_masa_qmetadata_frame_struct *IVAS_MASA_QMETADATA_HANDLE; Loading lib_com/ivas_cnst.h +11 −1 Original line number Diff line number Diff line Loading @@ -1462,6 +1462,10 @@ typedef enum #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 Loading @@ -1476,7 +1480,13 @@ typedef enum #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 Loading
Workspace_msvc/lib_util.vcxproj +2 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading @@ -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" /> Loading
apps/decoder.c +105 −2 Original line number Diff line number Diff line Loading @@ -43,6 +43,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 Loading Loading @@ -73,6 +76,10 @@ static #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 Loading @@ -94,6 +101,10 @@ typedef struct 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 Loading Loading @@ -131,7 +142,11 @@ 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 Loading Loading @@ -163,6 +178,9 @@ int main( #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; Loading Loading @@ -269,6 +287,19 @@ int main( } } #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 Loading Loading @@ -518,7 +549,11 @@ 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 Loading Loading @@ -581,7 +616,9 @@ cleanup: #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 ) Loading Loading @@ -728,6 +765,10 @@ static bool parseCmdlIVAS_dec( 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 Loading Loading @@ -947,6 +988,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] ); Loading @@ -954,7 +1005,7 @@ static bool parseCmdlIVAS_dec( return false; } #else char tmp[4]; char tmp[11]; strcpy( tmp, argv[i + 1] ); #endif #ifdef FIX_I109_ORIENTATION_TRACKING Loading @@ -978,6 +1029,16 @@ static bool parseCmdlIVAS_dec( { arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_AVG; } #ifdef OTR_REFERENCE_VECTOR_TRACKING else if ( strcmp( to_upper( tmp ), "REF_VEC" ) == 0 ) { arg->orientation_tracking = IVAS_PUBLIC_ORIENT_TRK_REF_VEC; } else if ( strcmp( to_upper( tmp ), "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", tmp ); Loading @@ -1004,6 +1065,23 @@ static bool parseCmdlIVAS_dec( 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; Loading Loading @@ -1232,6 +1310,10 @@ static void usage_dec( void ) #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" ); Loading Loading @@ -1429,6 +1511,9 @@ static ivas_error decodeG192( 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 ) Loading Loading @@ -1564,6 +1649,24 @@ static ivas_error decodeG192( goto cleanup; } } #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 */ #endif /* Run decoder for one frame (get rendered output) */ if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples ) ) != IVAS_ERR_OK ) Loading
apps/renderer.c +77 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,9 @@ #include "cmdln_parser.h" #include "common_api_types.h" #include "head_rotation_file_reader.h" #ifdef OTR_REFERENCE_VECTOR_TRACKING #include "vector3_pair_file_reader.h" #endif /* OTR_REFERENCE_VECTOR_TRACKING */ #include "hrtf_file_reader.h" #include "ism_file_reader.h" #include "lib_rend.h" Loading Loading @@ -125,6 +128,9 @@ typedef struct int16_t numInMetadataFiles; char headRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING char referenceVectorFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; #endif /* OTR_REFERENCE_VECTOR_TRACKING */ char referenceRotationFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; #endif char customHrtfFilePath[RENDERER_MAX_CLI_ARG_LENGTH]; Loading Loading @@ -163,6 +169,9 @@ typedef enum CmdLnOptionId_inputMetadata, CmdLnOptionId_listFormats, CmdLnOptionId_inputGain, #ifdef OTR_REFERENCE_VECTOR_TRACKING CmdLnOptionId_referenceVectorFile, #endif /* OTR_REFERENCE_VECTOR_TRACKING */ } CmdLnOptionId; static const CmdLnParser_Option cliOptions[] = { Loading Loading @@ -237,7 +246,11 @@ static const CmdLnParser_Option cliOptions[] = { .match = "tracking_type", .matchShort = "otr", #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING .description = "Head orientation tracking type: 'none', 'ref', 'avg' or `ref_vec` or `ref_vec_lev` (only for BINAURAL and BINAURAL_ROOM)", #else .description = "Head orientation tracking type: 'none', 'ref' or 'avg' (only for BINAURAL and BINAURAL_ROOM)", #endif /* OTR_REFERENCE_VECTOR_TRACKING */ #else .description = "Head orientation tracking type: 'ref' or 'avg' (only for BINAURAL and BINAURAL_ROOM)", #endif Loading Loading @@ -276,6 +289,14 @@ static const CmdLnParser_Option cliOptions[] = { .matchShort = "l", .description = "List supported audio formats", }, #ifdef OTR_REFERENCE_VECTOR_TRACKING { .id = CmdLnOptionId_referenceVectorFile, .match = "reference_vector_file", .matchShort = "rvf", .description = "Reference vector trajectory file for simulation of head tracking (only for BINAURAL and BINAURAL_ROOM outputs)", }, #endif /* OTR_REFERENCE_VECTOR_TRACKING */ }; static const int32_t numCliOptions = sizeof( cliOptions ) / sizeof( CmdLnParser_Option ); Loading Loading @@ -539,6 +560,9 @@ int main( IVAS_REND_HANDLE hIvasRend; HeadRotFileReader *headRotReader = NULL; #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING Vector3PairFileReader *referenceVectorReader = NULL; #endif /* OTR_REFERENCE_VECTOR_TRACKING */ HeadRotFileReader *referenceRotReader = NULL; #endif hrtfFileReader *hrtfFileReader = NULL; Loading Loading @@ -591,6 +615,9 @@ int main( #endif convert_backslash( args.headRotationFilePath ); #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING convert_backslash( args.referenceVectorFilePath ); #endif /* OTR_REFERENCE_VECTOR_TRACKING */ convert_backslash( args.referenceRotationFilePath ); #endif convert_backslash( args.inLfePanningMatrixFile ); Loading @@ -613,6 +640,16 @@ int main( exit( -1 ); } } #ifdef OTR_REFERENCE_VECTOR_TRACKING if ( !isEmptyString( args.referenceVectorFilePath ) ) { if ( Vector3PairFileReader_open( args.referenceVectorFilePath, &referenceVectorReader ) != IVAS_ERR_OK ) { fprintf( stderr, "Error opening file: %s\n", args.referenceVectorFilePath ); exit( -1 ); } } #endif /* OTR_REFERENCE_VECTOR_TRACKING */ #endif if ( !isEmptyString( args.customHrtfFilePath ) ) Loading Loading @@ -941,6 +978,22 @@ int main( } #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING if ( referenceVectorReader != NULL ) { IVAS_VECTOR3 listenerPos, refPos; if ( ( error = Vector3PairFileReader_read( referenceVectorReader, &listenerPos, &refPos ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_SetReferenceVector( hIvasRend, listenerPos, refPos ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } #endif /* OTR_REFERENCE_VECTOR_TRACKING */ /* Read from reference rotation trajectory file if specified */ if ( referenceRotReader != NULL ) { Loading Loading @@ -1120,6 +1173,9 @@ int main( AudioFileWriter_close( &audioWriter ); HeadRotationFileReader_close( &headRotReader ); #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING Vector3PairFileReader_close( &referenceVectorReader ); #endif /* OTR_REFERENCE_VECTOR_TRACKING */ HeadRotationFileReader_close( &referenceRotReader ); #endif hrtfFileReader_close( &hrtfFileReader ); Loading Loading @@ -1360,6 +1416,18 @@ static bool parseOrientationTracking( { *tracking_type = IVAS_ORIENT_TRK_AVG; } #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING else if ( strcmp( value, "REF_VEC" ) == 0 ) { *tracking_type = IVAS_ORIENT_TRK_REF_VEC; } else if ( strcmp( value, "REF_VEC_LEV" ) == 0 ) { *tracking_type = IVAS_ORIENT_TRK_REF_VEC_LEV; } #endif /* OTR_REFERENCE_VECTOR_TRACKING */ #endif else { fprintf( stderr, "Error: Invalid orientation tracking type %s \n\n", value ); Loading Loading @@ -1580,6 +1648,9 @@ static CmdlnArgs defaultArgs( clearString( args.headRotationFilePath ); #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING clearString( args.referenceVectorFilePath ); #endif /* OTR_REFERENCE_VECTOR_TRACKING */ clearString( args.referenceRotationFilePath ); #endif clearString( args.customHrtfFilePath ); Loading Loading @@ -1665,6 +1736,12 @@ static void parseOption( strncpy( args->headRotationFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); break; #ifdef FIX_I109_ORIENTATION_TRACKING #ifdef OTR_REFERENCE_VECTOR_TRACKING case CmdLnOptionId_referenceVectorFile: assert( numOptionValues == 1 ); strncpy( args->referenceVectorFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); break; #endif /* OTR_REFERENCE_VECTOR_TRACKING */ case CmdLnOptionId_refRotFile: assert( numOptionValues == 1 ); strncpy( args->referenceRotationFilePath, optionValues[0], RENDERER_MAX_CLI_ARG_LENGTH - 1 ); Loading
lib_com/common_api_types.h +7 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,13 @@ typedef struct } IVAS_QUATERNION; #ifdef OTR_REFERENCE_VECTOR_TRACKING typedef struct { float x, y, z; } IVAS_VECTOR3; #endif /* OTR_REFERENCE_VECTOR_TRACKING */ typedef struct ivas_masa_metadata_frame_struct *IVAS_MASA_METADATA_HANDLE; typedef struct ivas_masa_qmetadata_frame_struct *IVAS_MASA_QMETADATA_HANDLE; Loading
lib_com/ivas_cnst.h +11 −1 Original line number Diff line number Diff line Loading @@ -1462,6 +1462,10 @@ typedef enum #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 Loading @@ -1476,7 +1480,13 @@ typedef enum #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