Loading apps/decoder.c +232 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,14 @@ typedef struct bool voipMode; bool enableHeadRotation; char *headrotTrajFileName; #ifdef NONBE_FIX_1100_OUTPUT_ORIENT bool mainOrientationWriterEnabled; char *mainOrientationFilename; bool trackedRotationWriterEnabled; char *trackedRotationFilename; bool combinedOrientationWriterEnabled; char *combinedOrientationFilename; #endif bool enableReferenceRotation; char *refrotTrajFileName; bool enableReferenceVectorTracking; Loading Loading @@ -172,12 +180,21 @@ typedef struct static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg ); static void usage_dec( void ); #ifdef NONBE_FIX_1100_OUTPUT_ORIENT #ifdef SPLIT_REND_WITH_HEAD_ROT static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, QuaternionFileWriter *mainOrientWriter, QuaternionFileWriter *trackRotWriter, QuaternionFileWriter *combOrientWriter, Vector3PairFileReader *referenceVectorReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #else static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, QuaternionFileWriter *mainOrientWriter, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #endif static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, QuaternionFileWriter *mainOrientWriter, QuaternionFileWriter *trackRotWriter, QuaternionFileWriter *combOrientWriter, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec ); #else #ifdef SPLIT_REND_WITH_HEAD_ROT static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #else static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #endif static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec ); #endif #ifdef DEBUGGING static ivas_error printBitstreamInfoVoip( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec ); Loading Loading @@ -211,6 +228,11 @@ int main( RotFileReader *headRotReader = NULL; RotFileReader *externalOrientationFileReader = NULL; RotFileReader *refRotReader = NULL; #ifdef NONBE_FIX_1100_OUTPUT_ORIENT QuaternionFileWriter *mainOrientWriter = NULL; QuaternionFileWriter *trackRotWriter = NULL; QuaternionFileWriter *combOrientWriter = NULL; #endif Vector3PairFileReader *referenceVectorReader = NULL; RenderConfigReader *renderConfigReader = NULL; int16_t *pcmBuf = NULL; Loading Loading @@ -346,6 +368,47 @@ int main( } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT /*------------------------------------------------------------------------------------------* * Open main orientation file *------------------------------------------------------------------------------------------*/ if ( arg.mainOrientationWriterEnabled ) { if ( ( error = QuaternionFileWriter_open( arg.mainOrientationFilename, &mainOrientWriter ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open main orientation file %s \n\n", arg.mainOrientationFilename ); goto cleanup; } } /*------------------------------------------------------------------------------------------* * Open tracked rotation file *------------------------------------------------------------------------------------------*/ if ( arg.trackedRotationWriterEnabled ) { if ( ( error = QuaternionFileWriter_open( arg.trackedRotationFilename, &trackRotWriter ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open tracked rotation file %s \n\n", arg.trackedRotationFilename ); goto cleanup; } } /*------------------------------------------------------------------------------------------* * Open combined orientation file *------------------------------------------------------------------------------------------*/ if ( arg.combinedOrientationWriterEnabled ) { if ( ( error = QuaternionFileWriter_open( arg.combinedOrientationFilename, &combOrientWriter ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open combined orientation file %s \n\n", arg.combinedOrientationFilename ); goto cleanup; } } #endif /*------------------------------------------------------------------------------------------* * Open reference rotation file *------------------------------------------------------------------------------------------*/ Loading Loading @@ -882,14 +945,26 @@ int main( if ( arg.voipMode ) { #ifdef NONBE_FIX_1100_OUTPUT_ORIENT error = decodeVoIP( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, mainOrientWriter, trackRotWriter, combOrientWriter, referenceVectorReader, hIvasDec ); #else error = decodeVoIP( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, hIvasDec ); #endif } else { #ifdef NONBE_FIX_1100_OUTPUT_ORIENT #ifdef SPLIT_REND_WITH_HEAD_ROT error = decodeG192( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, mainOrientWriter, trackRotWriter, combOrientWriter, referenceVectorReader, &splitRendBits, hIvasDec, pcmBuf ); #else error = decodeG192( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, mainOrientWriter, trackRotWriter, combOrientWriter, referenceVectorReader, hIvasDec, pcmBuf ); #endif #else #ifdef SPLIT_REND_WITH_HEAD_ROT error = decodeG192( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, &splitRendBits, hIvasDec, pcmBuf ); #else error = decodeG192( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, hIvasDec, pcmBuf ); #endif #endif } Loading Loading @@ -960,6 +1035,11 @@ cleanup: RotationFileReader_close( &headRotReader ); RotationFileReader_close( &externalOrientationFileReader ); RotationFileReader_close( &refRotReader ); #ifdef NONBE_FIX_1100_OUTPUT_ORIENT QuaternionFileWriter_close( &mainOrientWriter ); QuaternionFileWriter_close( &trackRotWriter ); QuaternionFileWriter_close( &combOrientWriter ); #endif Vector3PairFileReader_close( &referenceVectorReader ); RenderConfigReader_close( &renderConfigReader ); Loading Loading @@ -1111,6 +1191,14 @@ static bool parseCmdlIVAS_dec( arg->enableHeadRotation = false; arg->headrotTrajFileName = NULL; #ifdef NONBE_FIX_1100_OUTPUT_ORIENT arg->mainOrientationWriterEnabled = false; arg->mainOrientationFilename = NULL; arg->trackedRotationWriterEnabled = false; arg->trackedRotationFilename = NULL; arg->combinedOrientationWriterEnabled = false; arg->combinedOrientationFilename = NULL; #endif arg->orientation_tracking = ORIENT_TRK_NONE; arg->enableReferenceRotation = false; arg->headrotTrajFileName = NULL; Loading Loading @@ -1345,6 +1433,53 @@ static bool parseCmdlIVAS_dec( arg->headrotTrajFileName = argv[i]; i++; } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT else if ( strcmp( argv_to_upper, "-MORI" ) == 0 ) { arg->mainOrientationWriterEnabled = true; i++; if ( argc - i <= 4 || argv[i][0] == '-' ) { fprintf( stderr, "Error: Main orientation file name not specified!\n\n" ); usage_dec(); return false; } arg->mainOrientationFilename = argv[i]; i++; } else if ( strcmp( argv_to_upper, "-TROT" ) == 0 ) { arg->trackedRotationWriterEnabled = true; i++; if ( argc - i <= 4 || argv[i][0] == '-' ) { fprintf( stderr, "Error: Tracked rotation file name not specified!\n\n" ); usage_dec(); return false; } arg->trackedRotationFilename = argv[i]; i++; } else if ( strcmp( argv_to_upper, "-CORI" ) == 0 ) { arg->combinedOrientationWriterEnabled = true; i++; if ( argc - i <= 4 || argv[i][0] == '-' ) { fprintf( stderr, "Error: Combined orientation file name not specified!\n\n" ); usage_dec(); return false; } arg->combinedOrientationFilename = argv[i]; i++; } #endif else if ( strcmp( argv_to_upper, "-FR" ) == 0 ) { int32_t tmp; Loading Loading @@ -1848,6 +1983,9 @@ static void usage_dec( void ) fprintf( stdout, " default bitstream file format is G.192\n" ); fprintf( stdout, "-hrtf File : HRTF filter File used in BINAURAL output configuration\n" ); fprintf( stdout, "-T File : Head rotation specified by external trajectory File\n" ); fprintf( stdout, "-mori File : Main orientation data output file\n" ); fprintf( stdout, "-trot File : Tracked rotation data output file\n" ); fprintf( stdout, "-cori File : Combined orientation data output file\n" ); fprintf( stdout, "-otr tracking_type : Head orientation tracking type: 'none', 'ref', 'avg', 'ref_vec' \n" ); fprintf( stdout, " or 'ref_vec_lev' (only for binaural rendering)\n" ); fprintf( stdout, "-rf File : Reference rotation specified by external trajectory File\n" ); Loading Loading @@ -2265,6 +2403,11 @@ static ivas_error decodeG192( RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, #ifdef NONBE_FIX_1100_OUTPUT_ORIENT QuaternionFileWriter *mainOrientWriter, QuaternionFileWriter *trackRotWriter, QuaternionFileWriter *combOrientWriter, #endif Vector3PairFileReader *referenceVectorReader, #ifdef SPLIT_REND_WITH_HEAD_ROT ISAR_SPLIT_REND_BITS_DATA *splitRendBits, Loading Loading @@ -2507,6 +2650,24 @@ static ivas_error decodeG192( goto cleanup; } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.mainOrientationWriterEnabled ) { IVAS_QUATERNION orientation; IVAS_DEC_GetMainOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( mainOrientWriter, orientation ); } if ( arg.trackedRotationWriterEnabled ) { IVAS_QUATERNION rotation; IVAS_DEC_GetTrackedRotation( hIvasDec, &rotation ); QuaternionFileWriter_writeFrame( trackRotWriter, rotation ); } #endif } if ( arg.enableExternalOrientation ) Loading Loading @@ -2535,6 +2696,16 @@ static ivas_error decodeG192( } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.combinedOrientationWriterEnabled && ( arg.enableHeadRotation || arg.enableExternalOrientation ) ) { IVAS_QUATERNION orientation; IVAS_DEC_GetCombinedOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( combOrientWriter, orientation ); } #endif /* decode and get samples */ nSamplesRendered = 0; nSamplesToRender = nOutSamples; Loading Loading @@ -2867,8 +3038,36 @@ static ivas_error decodeG192( fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.mainOrientationWriterEnabled ) { IVAS_QUATERNION orientation; IVAS_DEC_GetMainOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( mainOrientWriter, orientation ); } if ( arg.trackedRotationWriterEnabled ) { IVAS_QUATERNION rotation; IVAS_DEC_GetTrackedRotation( hIvasDec, &rotation ); QuaternionFileWriter_writeFrame( trackRotWriter, rotation ); } #endif } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.combinedOrientationWriterEnabled && ( arg.enableHeadRotation || arg.enableExternalOrientation ) ) { IVAS_QUATERNION orientation; IVAS_DEC_GetCombinedOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( combOrientWriter, orientation ); } #endif /* decode and get samples */ #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = IVAS_DEC_Flush( hIvasDec, nOutSamples, IVAS_DEC_PCM_INT16, (void *) pcmBuf, &nSamplesFlushed ) ) != IVAS_ERR_OK ) Loading Loading @@ -3160,6 +3359,11 @@ static ivas_error decodeVoIP( RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, #ifdef NONBE_FIX_1100_OUTPUT_ORIENT QuaternionFileWriter *mainOrientWriter, QuaternionFileWriter *trackRotWriter, QuaternionFileWriter *combOrientWriter, #endif Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec ) { Loading Loading @@ -3413,6 +3617,24 @@ static ivas_error decodeVoIP( goto cleanup; } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.mainOrientationWriterEnabled ) { IVAS_QUATERNION orientation; IVAS_DEC_GetMainOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( mainOrientWriter, orientation ); } if ( arg.trackedRotationWriterEnabled ) { IVAS_QUATERNION rotation; IVAS_DEC_GetTrackedRotation( hIvasDec, &rotation ); QuaternionFileWriter_writeFrame( trackRotWriter, rotation ); } #endif } if ( arg.enableExternalOrientation ) Loading Loading @@ -3443,6 +3665,16 @@ static ivas_error decodeVoIP( } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.combinedOrientationWriterEnabled && ( arg.enableHeadRotation || arg.enableExternalOrientation ) ) { IVAS_QUATERNION orientation; IVAS_DEC_GetCombinedOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( combOrientWriter, orientation ); } #endif /* read all packets with a receive time smaller than the system time */ while ( nextPacketRcvTime_ms <= systemTime_ms ) { Loading Loading
apps/decoder.c +232 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,14 @@ typedef struct bool voipMode; bool enableHeadRotation; char *headrotTrajFileName; #ifdef NONBE_FIX_1100_OUTPUT_ORIENT bool mainOrientationWriterEnabled; char *mainOrientationFilename; bool trackedRotationWriterEnabled; char *trackedRotationFilename; bool combinedOrientationWriterEnabled; char *combinedOrientationFilename; #endif bool enableReferenceRotation; char *refrotTrajFileName; bool enableReferenceVectorTracking; Loading Loading @@ -172,12 +180,21 @@ typedef struct static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg ); static void usage_dec( void ); #ifdef NONBE_FIX_1100_OUTPUT_ORIENT #ifdef SPLIT_REND_WITH_HEAD_ROT static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, QuaternionFileWriter *mainOrientWriter, QuaternionFileWriter *trackRotWriter, QuaternionFileWriter *combOrientWriter, Vector3PairFileReader *referenceVectorReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #else static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, QuaternionFileWriter *mainOrientWriter, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #endif static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, QuaternionFileWriter *mainOrientWriter, QuaternionFileWriter *trackRotWriter, QuaternionFileWriter *combOrientWriter, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec ); #else #ifdef SPLIT_REND_WITH_HEAD_ROT static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #else static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf ); #endif static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec ); #endif #ifdef DEBUGGING static ivas_error printBitstreamInfoVoip( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec ); Loading Loading @@ -211,6 +228,11 @@ int main( RotFileReader *headRotReader = NULL; RotFileReader *externalOrientationFileReader = NULL; RotFileReader *refRotReader = NULL; #ifdef NONBE_FIX_1100_OUTPUT_ORIENT QuaternionFileWriter *mainOrientWriter = NULL; QuaternionFileWriter *trackRotWriter = NULL; QuaternionFileWriter *combOrientWriter = NULL; #endif Vector3PairFileReader *referenceVectorReader = NULL; RenderConfigReader *renderConfigReader = NULL; int16_t *pcmBuf = NULL; Loading Loading @@ -346,6 +368,47 @@ int main( } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT /*------------------------------------------------------------------------------------------* * Open main orientation file *------------------------------------------------------------------------------------------*/ if ( arg.mainOrientationWriterEnabled ) { if ( ( error = QuaternionFileWriter_open( arg.mainOrientationFilename, &mainOrientWriter ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open main orientation file %s \n\n", arg.mainOrientationFilename ); goto cleanup; } } /*------------------------------------------------------------------------------------------* * Open tracked rotation file *------------------------------------------------------------------------------------------*/ if ( arg.trackedRotationWriterEnabled ) { if ( ( error = QuaternionFileWriter_open( arg.trackedRotationFilename, &trackRotWriter ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open tracked rotation file %s \n\n", arg.trackedRotationFilename ); goto cleanup; } } /*------------------------------------------------------------------------------------------* * Open combined orientation file *------------------------------------------------------------------------------------------*/ if ( arg.combinedOrientationWriterEnabled ) { if ( ( error = QuaternionFileWriter_open( arg.combinedOrientationFilename, &combOrientWriter ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError: Can't open combined orientation file %s \n\n", arg.combinedOrientationFilename ); goto cleanup; } } #endif /*------------------------------------------------------------------------------------------* * Open reference rotation file *------------------------------------------------------------------------------------------*/ Loading Loading @@ -882,14 +945,26 @@ int main( if ( arg.voipMode ) { #ifdef NONBE_FIX_1100_OUTPUT_ORIENT error = decodeVoIP( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, mainOrientWriter, trackRotWriter, combOrientWriter, referenceVectorReader, hIvasDec ); #else error = decodeVoIP( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, hIvasDec ); #endif } else { #ifdef NONBE_FIX_1100_OUTPUT_ORIENT #ifdef SPLIT_REND_WITH_HEAD_ROT error = decodeG192( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, mainOrientWriter, trackRotWriter, combOrientWriter, referenceVectorReader, &splitRendBits, hIvasDec, pcmBuf ); #else error = decodeG192( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, mainOrientWriter, trackRotWriter, combOrientWriter, referenceVectorReader, hIvasDec, pcmBuf ); #endif #else #ifdef SPLIT_REND_WITH_HEAD_ROT error = decodeG192( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, &splitRendBits, hIvasDec, pcmBuf ); #else error = decodeG192( arg, hBsReader, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, hIvasDec, pcmBuf ); #endif #endif } Loading Loading @@ -960,6 +1035,11 @@ cleanup: RotationFileReader_close( &headRotReader ); RotationFileReader_close( &externalOrientationFileReader ); RotationFileReader_close( &refRotReader ); #ifdef NONBE_FIX_1100_OUTPUT_ORIENT QuaternionFileWriter_close( &mainOrientWriter ); QuaternionFileWriter_close( &trackRotWriter ); QuaternionFileWriter_close( &combOrientWriter ); #endif Vector3PairFileReader_close( &referenceVectorReader ); RenderConfigReader_close( &renderConfigReader ); Loading Loading @@ -1111,6 +1191,14 @@ static bool parseCmdlIVAS_dec( arg->enableHeadRotation = false; arg->headrotTrajFileName = NULL; #ifdef NONBE_FIX_1100_OUTPUT_ORIENT arg->mainOrientationWriterEnabled = false; arg->mainOrientationFilename = NULL; arg->trackedRotationWriterEnabled = false; arg->trackedRotationFilename = NULL; arg->combinedOrientationWriterEnabled = false; arg->combinedOrientationFilename = NULL; #endif arg->orientation_tracking = ORIENT_TRK_NONE; arg->enableReferenceRotation = false; arg->headrotTrajFileName = NULL; Loading Loading @@ -1345,6 +1433,53 @@ static bool parseCmdlIVAS_dec( arg->headrotTrajFileName = argv[i]; i++; } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT else if ( strcmp( argv_to_upper, "-MORI" ) == 0 ) { arg->mainOrientationWriterEnabled = true; i++; if ( argc - i <= 4 || argv[i][0] == '-' ) { fprintf( stderr, "Error: Main orientation file name not specified!\n\n" ); usage_dec(); return false; } arg->mainOrientationFilename = argv[i]; i++; } else if ( strcmp( argv_to_upper, "-TROT" ) == 0 ) { arg->trackedRotationWriterEnabled = true; i++; if ( argc - i <= 4 || argv[i][0] == '-' ) { fprintf( stderr, "Error: Tracked rotation file name not specified!\n\n" ); usage_dec(); return false; } arg->trackedRotationFilename = argv[i]; i++; } else if ( strcmp( argv_to_upper, "-CORI" ) == 0 ) { arg->combinedOrientationWriterEnabled = true; i++; if ( argc - i <= 4 || argv[i][0] == '-' ) { fprintf( stderr, "Error: Combined orientation file name not specified!\n\n" ); usage_dec(); return false; } arg->combinedOrientationFilename = argv[i]; i++; } #endif else if ( strcmp( argv_to_upper, "-FR" ) == 0 ) { int32_t tmp; Loading Loading @@ -1848,6 +1983,9 @@ static void usage_dec( void ) fprintf( stdout, " default bitstream file format is G.192\n" ); fprintf( stdout, "-hrtf File : HRTF filter File used in BINAURAL output configuration\n" ); fprintf( stdout, "-T File : Head rotation specified by external trajectory File\n" ); fprintf( stdout, "-mori File : Main orientation data output file\n" ); fprintf( stdout, "-trot File : Tracked rotation data output file\n" ); fprintf( stdout, "-cori File : Combined orientation data output file\n" ); fprintf( stdout, "-otr tracking_type : Head orientation tracking type: 'none', 'ref', 'avg', 'ref_vec' \n" ); fprintf( stdout, " or 'ref_vec_lev' (only for binaural rendering)\n" ); fprintf( stdout, "-rf File : Reference rotation specified by external trajectory File\n" ); Loading Loading @@ -2265,6 +2403,11 @@ static ivas_error decodeG192( RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, #ifdef NONBE_FIX_1100_OUTPUT_ORIENT QuaternionFileWriter *mainOrientWriter, QuaternionFileWriter *trackRotWriter, QuaternionFileWriter *combOrientWriter, #endif Vector3PairFileReader *referenceVectorReader, #ifdef SPLIT_REND_WITH_HEAD_ROT ISAR_SPLIT_REND_BITS_DATA *splitRendBits, Loading Loading @@ -2507,6 +2650,24 @@ static ivas_error decodeG192( goto cleanup; } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.mainOrientationWriterEnabled ) { IVAS_QUATERNION orientation; IVAS_DEC_GetMainOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( mainOrientWriter, orientation ); } if ( arg.trackedRotationWriterEnabled ) { IVAS_QUATERNION rotation; IVAS_DEC_GetTrackedRotation( hIvasDec, &rotation ); QuaternionFileWriter_writeFrame( trackRotWriter, rotation ); } #endif } if ( arg.enableExternalOrientation ) Loading Loading @@ -2535,6 +2696,16 @@ static ivas_error decodeG192( } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.combinedOrientationWriterEnabled && ( arg.enableHeadRotation || arg.enableExternalOrientation ) ) { IVAS_QUATERNION orientation; IVAS_DEC_GetCombinedOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( combOrientWriter, orientation ); } #endif /* decode and get samples */ nSamplesRendered = 0; nSamplesToRender = nOutSamples; Loading Loading @@ -2867,8 +3038,36 @@ static ivas_error decodeG192( fprintf( stderr, "\nIVAS_DEC_FeedHeadTrackData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); goto cleanup; } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.mainOrientationWriterEnabled ) { IVAS_QUATERNION orientation; IVAS_DEC_GetMainOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( mainOrientWriter, orientation ); } if ( arg.trackedRotationWriterEnabled ) { IVAS_QUATERNION rotation; IVAS_DEC_GetTrackedRotation( hIvasDec, &rotation ); QuaternionFileWriter_writeFrame( trackRotWriter, rotation ); } #endif } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.combinedOrientationWriterEnabled && ( arg.enableHeadRotation || arg.enableExternalOrientation ) ) { IVAS_QUATERNION orientation; IVAS_DEC_GetCombinedOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( combOrientWriter, orientation ); } #endif /* decode and get samples */ #ifdef SPLIT_REND_WITH_HEAD_ROT if ( ( error = IVAS_DEC_Flush( hIvasDec, nOutSamples, IVAS_DEC_PCM_INT16, (void *) pcmBuf, &nSamplesFlushed ) ) != IVAS_ERR_OK ) Loading Loading @@ -3160,6 +3359,11 @@ static ivas_error decodeVoIP( RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, #ifdef NONBE_FIX_1100_OUTPUT_ORIENT QuaternionFileWriter *mainOrientWriter, QuaternionFileWriter *trackRotWriter, QuaternionFileWriter *combOrientWriter, #endif Vector3PairFileReader *referenceVectorReader, IVAS_DEC_HANDLE hIvasDec ) { Loading Loading @@ -3413,6 +3617,24 @@ static ivas_error decodeVoIP( goto cleanup; } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.mainOrientationWriterEnabled ) { IVAS_QUATERNION orientation; IVAS_DEC_GetMainOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( mainOrientWriter, orientation ); } if ( arg.trackedRotationWriterEnabled ) { IVAS_QUATERNION rotation; IVAS_DEC_GetTrackedRotation( hIvasDec, &rotation ); QuaternionFileWriter_writeFrame( trackRotWriter, rotation ); } #endif } if ( arg.enableExternalOrientation ) Loading Loading @@ -3443,6 +3665,16 @@ static ivas_error decodeVoIP( } } #ifdef NONBE_FIX_1100_OUTPUT_ORIENT if ( arg.combinedOrientationWriterEnabled && ( arg.enableHeadRotation || arg.enableExternalOrientation ) ) { IVAS_QUATERNION orientation; IVAS_DEC_GetCombinedOrientation( hIvasDec, &orientation ); QuaternionFileWriter_writeFrame( combOrientWriter, orientation ); } #endif /* read all packets with a receive time smaller than the system time */ while ( nextPacketRcvTime_ms <= systemTime_ms ) { Loading