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 +94 −1 Original line number Diff line number Diff line Loading @@ -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 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 @@ -133,7 +144,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 @@ -165,6 +180,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 @@ -293,6 +311,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 @@ -561,7 +592,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 @@ -623,7 +658,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 @@ -767,6 +804,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 @@ -979,6 +1020,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 @@ -1004,6 +1055,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 @@ -1207,6 +1275,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 @@ -1412,6 +1484,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 @@ -1555,6 +1630,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/encoder.c +16 −7 Original line number Diff line number Diff line Loading @@ -1640,8 +1640,18 @@ static void usage_enc( void ) fprintf( stdout, " *VBR mode (average bitrate),\n" ); fprintf( stdout, " for AMR-WB IO modes R = (6600, 8850, 12650, 14250, 15850, 18250,\n" ); fprintf( stdout, " 19850, 23050, 23850) \n" ); #ifdef ISM_HIGHEST_BITRATE fprintf( stdout, " for IVAS stereo R = (13200, 16400, 24400, 32000, 48000, 64000, 80000, \n" ); fprintf( stdout, " 96000, 128000, 160000, 192000, 256000) \n" ); fprintf( stdout, " for IVAS ISM R = 13200 for 1 ISM, 16400 for 1 ISM and 2 ISM, \n" ); fprintf( stdout, " (24400, 32000, 48000, 64000, 80000, 96000, 128000) \n" ); fprintf( stdout, " for 2 ISM, 3 ISM and 4 ISM also 160000, 192000, 256000) \n" ); fprintf( stdout, " for 3 ISM and 4 ISM also 384000 \n" ); fprintf( stdout, " for 4 ISM also 512000 \n" ); #else fprintf( stdout, " for IVAS stereo & ISm R =(13200, 16400, 24400, 32000, 48000, 64000, 80000, \n" ); fprintf( stdout, " 96000, 128000, 160000, 192000, 256000) \n" ); #endif fprintf( stdout, " for IVAS SBA, MASA, MC R=(13200, 16400, 24400, 32000, 48000, 64000, 80000, \n" ); fprintf( stdout, " 96000, 128000, 160000, 192000, 256000, 384000, 512000) \n" ); fprintf( stdout, " Alternatively, R can be a bitrate switching file which consists of R values\n" ); Loading @@ -1657,16 +1667,16 @@ static void usage_enc( void ) fprintf( stdout, "EVS mono is default, for IVAS choose one of the following: -stereo, -ism, -sba, -masa, -mc\n" ); fprintf( stdout, "-stereo [Mode] : Stereo format, default is unified stereo \n" ); fprintf( stdout, " optional for Mode: 1: DFT Stereo, 2: TD Stereo, 3: MDCT Stereo\n" ); fprintf( stdout, "-ism Channels Files : ISm format \n" ); fprintf( stdout, " where Channels specifies the number of ISms (1-4)\n" ); fprintf( stdout, "-ism Channels Files : ISM format \n" ); fprintf( stdout, " where Channels specifies the number of ISMs (1-4)\n" ); fprintf( stdout, " and Files specify input files containing metadata, one file per object\n" ); fprintf( stdout, " (use NULL for no input metadata)\n" ); fprintf( stdout, "-sba +/-Order : Scene Based Audio input format (Ambisonics ACN/SN3D),\n" ); fprintf( stdout, " where Order specifies the Ambisionics order (1-3),\n" ); fprintf( stdout, " where positive (+) means full 3D and negative (-) only 2D/planar components to be coded\n" ); fprintf( stdout, "-masa Ch File : MASA format \n" ); fprintf( stdout, " where Ch specifies the number of input/transport channels (1 or 2): \n" ); fprintf( stdout, " and File specifies input file containing parametric metadata \n" ); fprintf( stdout, "-masa Channels File : MASA format \n" ); fprintf( stdout, " where Channels specifies the number of input/transport channels (1 or 2): \n" ); fprintf( stdout, " and File specifies input file containing parametric MASA metadata \n" ); fprintf( stdout, "-mc InputConf : Multi-channel format\n" ); fprintf( stdout, " where InputConf specifies the channel configuration: 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4\n" ); fprintf( stdout, " Loudspeaker positions are assumed to have azimuth and elevation as per \n" ); Loading @@ -1676,8 +1686,7 @@ static void usage_enc( void ) fprintf( stdout, " where 0 = adaptive, 3-100 = fixed in number of frames,\n" ); fprintf( stdout, " default is deactivated\n" ); fprintf( stdout, "-dtx : Activate DTX mode with a SID update rate of 8 frames\n" ); fprintf( stdout, " Note: DTX is currently supported in EVS, stereo, 1 ISm, \n" ); fprintf( stdout, " SBA (up to 128kbps) and MASA (up to 128kbps)\n" ); fprintf( stdout, " Note: DTX is supported in EVS, stereo, ISM, SBA up to 80kbps and MASA up to 128kbps \n" ); fprintf( stdout, "-rf p o : Activate channel-aware mode for WB and SWB signal at 13.2kbps, \n" ); fprintf( stdout, " where FEC indicator, p: LO or HI, and FEC offset, o: 2, 3, 5, or 7 in number of frames.\n" ); fprintf( stdout, " Alternatively p and o can be replaced by a rf configuration file with each line \n" ); Loading apps/renderer.c +77 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,9 @@ #include "cmdl_tools.h" #include "cmdln_parser.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 "ls_custom_file_reader.h" Loading Loading @@ -131,6 +134,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 @@ -169,6 +175,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 @@ -243,7 +252,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 @@ -282,6 +295,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 */ }; Loading Loading @@ -509,6 +530,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 @@ -561,6 +585,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 @@ -583,6 +610,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 @@ -974,6 +1011,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 @@ -1165,6 +1218,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 @@ -1408,6 +1464,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 @@ -1626,6 +1694,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 @@ -1711,6 +1782,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 @@ -86,6 +86,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 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 +94 −1 Original line number Diff line number Diff line Loading @@ -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 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 @@ -133,7 +144,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 @@ -165,6 +180,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 @@ -293,6 +311,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 @@ -561,7 +592,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 @@ -623,7 +658,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 @@ -767,6 +804,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 @@ -979,6 +1020,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 @@ -1004,6 +1055,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 @@ -1207,6 +1275,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 @@ -1412,6 +1484,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 @@ -1555,6 +1630,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/encoder.c +16 −7 Original line number Diff line number Diff line Loading @@ -1640,8 +1640,18 @@ static void usage_enc( void ) fprintf( stdout, " *VBR mode (average bitrate),\n" ); fprintf( stdout, " for AMR-WB IO modes R = (6600, 8850, 12650, 14250, 15850, 18250,\n" ); fprintf( stdout, " 19850, 23050, 23850) \n" ); #ifdef ISM_HIGHEST_BITRATE fprintf( stdout, " for IVAS stereo R = (13200, 16400, 24400, 32000, 48000, 64000, 80000, \n" ); fprintf( stdout, " 96000, 128000, 160000, 192000, 256000) \n" ); fprintf( stdout, " for IVAS ISM R = 13200 for 1 ISM, 16400 for 1 ISM and 2 ISM, \n" ); fprintf( stdout, " (24400, 32000, 48000, 64000, 80000, 96000, 128000) \n" ); fprintf( stdout, " for 2 ISM, 3 ISM and 4 ISM also 160000, 192000, 256000) \n" ); fprintf( stdout, " for 3 ISM and 4 ISM also 384000 \n" ); fprintf( stdout, " for 4 ISM also 512000 \n" ); #else fprintf( stdout, " for IVAS stereo & ISm R =(13200, 16400, 24400, 32000, 48000, 64000, 80000, \n" ); fprintf( stdout, " 96000, 128000, 160000, 192000, 256000) \n" ); #endif fprintf( stdout, " for IVAS SBA, MASA, MC R=(13200, 16400, 24400, 32000, 48000, 64000, 80000, \n" ); fprintf( stdout, " 96000, 128000, 160000, 192000, 256000, 384000, 512000) \n" ); fprintf( stdout, " Alternatively, R can be a bitrate switching file which consists of R values\n" ); Loading @@ -1657,16 +1667,16 @@ static void usage_enc( void ) fprintf( stdout, "EVS mono is default, for IVAS choose one of the following: -stereo, -ism, -sba, -masa, -mc\n" ); fprintf( stdout, "-stereo [Mode] : Stereo format, default is unified stereo \n" ); fprintf( stdout, " optional for Mode: 1: DFT Stereo, 2: TD Stereo, 3: MDCT Stereo\n" ); fprintf( stdout, "-ism Channels Files : ISm format \n" ); fprintf( stdout, " where Channels specifies the number of ISms (1-4)\n" ); fprintf( stdout, "-ism Channels Files : ISM format \n" ); fprintf( stdout, " where Channels specifies the number of ISMs (1-4)\n" ); fprintf( stdout, " and Files specify input files containing metadata, one file per object\n" ); fprintf( stdout, " (use NULL for no input metadata)\n" ); fprintf( stdout, "-sba +/-Order : Scene Based Audio input format (Ambisonics ACN/SN3D),\n" ); fprintf( stdout, " where Order specifies the Ambisionics order (1-3),\n" ); fprintf( stdout, " where positive (+) means full 3D and negative (-) only 2D/planar components to be coded\n" ); fprintf( stdout, "-masa Ch File : MASA format \n" ); fprintf( stdout, " where Ch specifies the number of input/transport channels (1 or 2): \n" ); fprintf( stdout, " and File specifies input file containing parametric metadata \n" ); fprintf( stdout, "-masa Channels File : MASA format \n" ); fprintf( stdout, " where Channels specifies the number of input/transport channels (1 or 2): \n" ); fprintf( stdout, " and File specifies input file containing parametric MASA metadata \n" ); fprintf( stdout, "-mc InputConf : Multi-channel format\n" ); fprintf( stdout, " where InputConf specifies the channel configuration: 5_1, 7_1, 5_1_2, 5_1_4, 7_1_4\n" ); fprintf( stdout, " Loudspeaker positions are assumed to have azimuth and elevation as per \n" ); Loading @@ -1676,8 +1686,7 @@ static void usage_enc( void ) fprintf( stdout, " where 0 = adaptive, 3-100 = fixed in number of frames,\n" ); fprintf( stdout, " default is deactivated\n" ); fprintf( stdout, "-dtx : Activate DTX mode with a SID update rate of 8 frames\n" ); fprintf( stdout, " Note: DTX is currently supported in EVS, stereo, 1 ISm, \n" ); fprintf( stdout, " SBA (up to 128kbps) and MASA (up to 128kbps)\n" ); fprintf( stdout, " Note: DTX is supported in EVS, stereo, ISM, SBA up to 80kbps and MASA up to 128kbps \n" ); fprintf( stdout, "-rf p o : Activate channel-aware mode for WB and SWB signal at 13.2kbps, \n" ); fprintf( stdout, " where FEC indicator, p: LO or HI, and FEC offset, o: 2, 3, 5, or 7 in number of frames.\n" ); fprintf( stdout, " Alternatively p and o can be replaced by a rf configuration file with each line \n" ); Loading
apps/renderer.c +77 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,9 @@ #include "cmdl_tools.h" #include "cmdln_parser.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 "ls_custom_file_reader.h" Loading Loading @@ -131,6 +134,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 @@ -169,6 +175,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 @@ -243,7 +252,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 @@ -282,6 +295,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 */ }; Loading Loading @@ -509,6 +530,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 @@ -561,6 +585,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 @@ -583,6 +610,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 @@ -974,6 +1011,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 @@ -1165,6 +1218,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 @@ -1408,6 +1464,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 @@ -1626,6 +1694,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 @@ -1711,6 +1782,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 @@ -86,6 +86,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