Commit cb8d4469 authored by sbsarac's avatar sbsarac
Browse files

Extract data according to command line params

parent fa7154d5
Loading
Loading
Loading
Loading
+232 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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 );
@@ -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;
@@ -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
     *------------------------------------------------------------------------------------------*/
@@ -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
    }

@@ -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 );

@@ -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;
@@ -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;
@@ -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" );
@@ -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,
@@ -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 )
@@ -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;
@@ -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 )
@@ -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 )
{
@@ -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 )
@@ -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 )
        {