Commit 96f25dcd authored by Ripinder Singh's avatar Ripinder Singh
Browse files

Remove restart functionality and bugfix in lib_dec free and code review

parent d14eb8b1
Loading
Loading
Loading
Loading
Loading
+5 −146
Original line number Original line Diff line number Diff line
@@ -179,16 +179,11 @@ typedef struct
static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg );
static bool parseCmdlIVAS_dec( int16_t argc, char **argv, DecArguments *arg );
static void usage_dec( void );
static void usage_dec( void );
static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtf, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
static ivas_error decodeG192( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtf, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtf, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader,
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
                              ISAR_SPLIT_REND_BITS_DATA *splitRendBits,
static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtf, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, ISAR_SPLIT_REND_BITS_DATA *splitRendBits, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
#endif
#ifdef IVAS_RTPDUMP
                              IVAS_DEC_HANDLE *phIvasDec,
#else
#else
                              IVAS_DEC_HANDLE hIvasDec,
static ivas_error decodeVoIP( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtf, RotFileReader *headRotReader, RotFileReader *externalOrientationFileReader, RotFileReader *refRotReader, Vector3PairFileReader *referenceVectorReader, ObjectEditFileReader *objectEditFileReader, IVAS_DEC_HANDLE hIvasDec, int16_t *pcmBuf );
#endif
#endif
                              int16_t *pcmBuf );
static ivas_error load_hrtf_from_file( IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, IVAS_DEC_HANDLE hIvasDec, const IVAS_AUDIO_CONFIG OutputConfig, const int32_t output_Fs );
static ivas_error load_hrtf_from_file( IVAS_DEC_HRTF_BINARY_WRAPPER *hHrtfBinary, IVAS_DEC_HANDLE hIvasDec, const IVAS_AUDIO_CONFIG OutputConfig, const int32_t output_Fs );
#ifdef DEBUGGING
#ifdef DEBUGGING
static ivas_error printBitstreamInfoVoip( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec );
static ivas_error printBitstreamInfoVoip( DecArguments arg, BS_READER_HANDLE hBsReader, IVAS_DEC_HANDLE hIvasDec );
@@ -196,112 +191,6 @@ static int16_t app_own_random( int16_t *seed );
#endif
#endif
static void do_object_editing( IVAS_EDITABLE_PARAMETERS *editableParameters, ObjectEditFileReader *objectEditFileReader );
static void do_object_editing( IVAS_EDITABLE_PARAMETERS *editableParameters, ObjectEditFileReader *objectEditFileReader );


#ifdef IVAS_RTPDUMP
static ivas_error restartDecoder(
    IVAS_DEC_HANDLE *phIvasDec,
    IVAS_DEC_MODE codec,
    DecArguments *arg,
    IVAS_RENDER_CONFIG_DATA *renderConfig,
    IVAS_CUSTOM_LS_DATA *hLsCustomData )
{
    ivas_error error = IVAS_ERR_OK;
    IVAS_DEC_HANDLE hIvasDec;

    if ( phIvasDec == NULL )
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    if ( NULL != *phIvasDec )
    {
        IVAS_DEC_Close( phIvasDec );
    }

    if ( ( error = IVAS_DEC_Open( phIvasDec, codec ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "Open failed: %s\n", IVAS_DEC_GetErrorMessage( error ) );
        goto cleanup;
    }

    arg->decMode = codec;

    hIvasDec = *phIvasDec;

    uint16_t aeID = arg->aeSequence.count > 0 ? arg->aeSequence.pID[0] : 65535;

    IVAS_AUDIO_CONFIG outputConfig = ( codec == IVAS_DEC_MODE_IVAS ) ? arg->outputConfig : IVAS_AUDIO_CONFIG_MONO;
    if ( ( error = IVAS_DEC_Configure( hIvasDec, arg->output_Fs, outputConfig, arg->renderFramesize, arg->customLsOutputEnabled, arg->hrtfReaderEnabled,
                                       arg->enableHeadRotation, arg->enableExternalOrientation, arg->orientation_tracking, arg->renderConfigEnabled, arg->non_diegetic_pan_enabled,
                                       arg->non_diegetic_pan_gain, arg->dpidEnabled, aeID, arg->objEditEnabled, arg->delayCompensationEnabled ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
        goto cleanup;
    }

    if ( ( error = IVAS_DEC_GetRenderFramesize( hIvasDec, &arg->renderFramesize ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
        goto cleanup;
    }

    if ( arg->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || arg->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
    {
        if ( ( error = IVAS_DEC_EnableSplitRendering( hIvasDec ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nSplit rendering configure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
            goto cleanup;
        }

        if ( ( error = IVAS_DEC_GetRenderFramesize( hIvasDec, &arg->renderFramesize ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
            goto cleanup;
        }

        arg->enableHeadRotation = true;
    }

    if ( arg->voipMode )
    {
        if ( ( error = IVAS_DEC_EnableVoIP( hIvasDec, 60, arg->inputFormat ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nCould not enable VOIP: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
            goto cleanup;
        }
    }

    if ( ( error = IVAS_DEC_PrintConfig( hIvasDec, 1, arg->voipMode ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nIVAS_DEC_PrintConfig failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
        goto cleanup;
    }

    if ( arg->renderConfigEnabled && renderConfig != NULL )
    {
        if ( ( error = IVAS_DEC_FeedRenderConfig( hIvasDec, *renderConfig ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nIVAS_DEC_FeedRenderConfig failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
            goto cleanup;
        }
    }

    if ( arg->customLsOutputEnabled && hLsCustomData != NULL )
    {
        if ( ( error = IVAS_DEC_FeedCustomLsData( hIvasDec, *hLsCustomData ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nIVAS_DEC_FeedCustomLsData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) );
            goto cleanup;
        }
    }

    return IVAS_ERR_OK;

cleanup:
    IVAS_DEC_Close( phIvasDec );
    return error;
}
#endif

/*------------------------------------------------------------------------------------------*
/*------------------------------------------------------------------------------------------*
 * main()
 * main()
 *
 *
@@ -855,16 +744,12 @@ int main(


    if ( arg.voipMode )
    if ( arg.voipMode )
    {
    {
        error = decodeVoIP( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader,

#ifdef FIX_1119_SPLIT_RENDERING_VOIP
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
                            &splitRendBits,
        error = decodeVoIP( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, &splitRendBits, hIvasDec, pcmBuf );
#endif
#ifdef IVAS_RTPDUMP
                            &hIvasDec,
#else
#else
                            hIvasDec,
        error = decodeVoIP( arg, hBsReader, &hHrtfBinary, headRotReader, externalOrientationFileReader, refRotReader, referenceVectorReader, objectEditFileReader, hIvasDec, pcmBuf );
#endif
#endif
                            pcmBuf );
    }
    }
    else
    else
    {
    {
@@ -3171,11 +3056,7 @@ static ivas_error decodeVoIP(
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
    ISAR_SPLIT_REND_BITS_DATA *splitRendBits,
    ISAR_SPLIT_REND_BITS_DATA *splitRendBits,
#endif
#endif
#ifdef IVAS_RTPDUMP
    IVAS_DEC_HANDLE *phIvasDec,
#else
    IVAS_DEC_HANDLE hIvasDec,
    IVAS_DEC_HANDLE hIvasDec,
#endif
    int16_t *pcmBuf )
    int16_t *pcmBuf )
{
{
    bool decodingFailed = true; /* Assume failure until cleanup is reached without errors */
    bool decodingFailed = true; /* Assume failure until cleanup is reached without errors */
@@ -3209,7 +3090,6 @@ static ivas_error decodeVoIP(
    int16_t i;
    int16_t i;
#ifdef IVAS_RTPDUMP
#ifdef IVAS_RTPDUMP
    IVAS_RTP ivasRtp = { 0 };
    IVAS_RTP ivasRtp = { 0 };
    IVAS_DEC_HANDLE hIvasDec = *phIvasDec;
#else
#else
    FILE *f_rtpstream = NULL;
    FILE *f_rtpstream = NULL;
    EVS_RTPDUMP_DEPACKER rtpdumpDepacker;
    EVS_RTPDUMP_DEPACKER rtpdumpDepacker;
@@ -3392,27 +3272,6 @@ static ivas_error decodeVoIP(
    {
    {
        nSamplesRendered = 0;
        nSamplesRendered = 0;


#ifdef IVAS_RTPDUMP
        if ( ivasRtp.restartNeeded )
        {
            IVAS_DEC_MODE newCodecInPacket = ( ivasRtp.codecId == IVAS_RTP_EVS ) ? IVAS_DEC_MODE_EVS : IVAS_DEC_MODE_IVAS;
            error = restartDecoder(
                &hIvasDec,
                newCodecInPacket,
                &arg,
                NULL, /* ToDo : Provide rendererConfig */
                NULL  /* ToDo : Provide LS Custom Data */
            );
            if ( error != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nFailed to restart decoder from %d to %d\n", arg.decMode, newCodecInPacket );
                goto cleanup;
            }
            *phIvasDec = hIvasDec; /* Update for main()' s free */
            ivasRtp.restartNeeded = false;
        }
#endif

        /* reference vector */
        /* reference vector */
        if ( arg.enableReferenceVectorTracking && vec_pos_update == 0 )
        if ( arg.enableReferenceVectorTracking && vec_pos_update == 0 )
        {
        {
+0 −5
Original line number Original line Diff line number Diff line
@@ -347,15 +347,10 @@ void IVAS_DEC_Close(
    }
    }


    /* destroy Split binaural renderer (ISAR) handle */
    /* destroy Split binaural renderer (ISAR) handle */
#ifndef IVAS_RTPDUMP
    ivas_destroy_handle_isar( &( *phIvasDec )->st_ivas->hSplitBinRend );
    ivas_destroy_handle_isar( &( *phIvasDec )->st_ivas->hSplitBinRend );


#endif
    if ( ( *phIvasDec )->st_ivas )
    if ( ( *phIvasDec )->st_ivas )
    {
    {
#ifdef IVAS_RTPDUMP
        ivas_destroy_handle_isar( &( *phIvasDec )->st_ivas->hSplitBinRend );
#endif
        ivas_destroy_dec( ( *phIvasDec )->st_ivas );
        ivas_destroy_dec( ( *phIvasDec )->st_ivas );
        ( *phIvasDec )->st_ivas = NULL;
        ( *phIvasDec )->st_ivas = NULL;
    }
    }
+0 −1
Original line number Original line Diff line number Diff line
@@ -29,7 +29,6 @@
   the United Nations Convention on Contracts on the International Sales of Goods.
   the United Nations Convention on Contracts on the International Sales of Goods.


*******************************************************************************************************/
*******************************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdbool.h>
#include "ivas_bpool.h"
#include "ivas_bpool.h"
+0 −1
Original line number Original line Diff line number Diff line
@@ -30,7 +30,6 @@


*******************************************************************************************************/
*******************************************************************************************************/


#include <stdint.h>
#include <stdlib.h>
#include <stdlib.h>
#include "ivas_queue.h"
#include "ivas_queue.h"
#include "ivas_error_utils.h"
#include "ivas_error_utils.h"
+46 −21
Original line number Original line Diff line number Diff line
@@ -29,12 +29,8 @@
   the United Nations Convention on Contracts on the International Sales of Goods.
   the United Nations Convention on Contracts on the International Sales of Goods.


*******************************************************************************************************/
*******************************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include <stdbool.h>

#include "lib_dec.h"
#include "ivas_rtp_file.h"
#include "ivas_rtp_file.h"
#include "ivas_error_utils.h"
#include "ivas_error_utils.h"


@@ -87,8 +83,8 @@ static ivas_error IvasRtpFile_Close(


static ivas_error IvasRtpFile_Write(
static ivas_error IvasRtpFile_Write(
    IVAS_RTP_FILE_HANDLE hRtpFile, /* i : pointer to an IVAS file writer handle    */
    IVAS_RTP_FILE_HANDLE hRtpFile, /* i : pointer to an IVAS file writer handle    */
    const uint8_t *packet,
    const uint8_t *packet,         /* i : rtp packet to be written to rtpdump file */
    size_t numBytes )
    size_t numBytes )              /* i : size in bytes of the rtp packet          */
{
{
    ivas_error error = IVAS_ERR_OK;
    ivas_error error = IVAS_ERR_OK;
    if ( hRtpFile->isFileWriter )
    if ( hRtpFile->isFileWriter )
@@ -105,10 +101,11 @@ static ivas_error IvasRtpFile_Write(
}
}


static ivas_error IvasRtpFile_Read(
static ivas_error IvasRtpFile_Read(
    IVAS_RTP_FILE_HANDLE hRtpFile, /* i : pointer to an IVAS file writer handle */
    IVAS_RTP_FILE_HANDLE hRtpFile, /* i : pointer to an IVAS file reader handle */
    uint8_t *packet,
    uint8_t *packet,               /* o : read rtp packet                       */
    size_t *numBytes,
    size_t *numBytes,              /* o : no of bytes in packet                 */
    size_t capacity )
    size_t capacity                /* i : max capacity of the packet buffer     */
)
{
{
    size_t nread = 0;
    size_t nread = 0;
    uint32_t length = 0;
    uint32_t length = 0;
@@ -149,7 +146,11 @@ static const char *const PiDataNames[IVAS_PI_MAX_ID] = {
    "RESERVED30", "NO_DATA"
    "RESERVED30", "NO_DATA"
};
};


void IVAS_RTP_LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataPresent )
void IVAS_RTP_LogPiData(
    FILE *f_piDataOut,       /* i/o : Output json file handle to dump PI data for debug/test             */
    const PIDATA_TS *piData, /* i   : PI Data + Timestamp array containing all PI data in current packet */
    uint32_t nPiDataPresent  /* i   : Number of valid elements in the piData array                       */
)
{
{
    uint32_t timestamp = ~0u;
    uint32_t timestamp = ~0u;
    if ( f_piDataOut == NULL || piData == NULL || nPiDataPresent == 0 )
    if ( f_piDataOut == NULL || piData == NULL || nPiDataPresent == 0 )
@@ -164,7 +165,7 @@ void IVAS_RTP_LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataP


    while ( nPiDataPresent-- > 0 )
    while ( nPiDataPresent-- > 0 )
    {
    {
        PIDATA_TS *cur = piData++;
        const PIDATA_TS *cur = piData++;


        if ( timestamp != ( ~0u ) && timestamp != cur->timestamp )
        if ( timestamp != ( ~0u ) && timestamp != cur->timestamp )
        {
        {
@@ -222,7 +223,7 @@ void IVAS_RTP_LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataP
            case IVAS_PI_AUDIO_DESCRIPTION:
            case IVAS_PI_AUDIO_DESCRIPTION:
            {
            {
                uint32_t nEntries = cur->data.audioDesc.nValidEntries;
                uint32_t nEntries = cur->data.audioDesc.nValidEntries;
                IVAS_AUDIO_ID *audioId = cur->data.audioDesc.audioId;
                const IVAS_AUDIO_ID *audioId = cur->data.audioDesc.audioId;


                fprintf( f_piDataOut, "[\n" );
                fprintf( f_piDataOut, "[\n" );
                while ( nEntries-- > 0 )
                while ( nEntries-- > 0 )
@@ -241,7 +242,7 @@ void IVAS_RTP_LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataP
            break;
            break;
            case IVAS_PI_DIEGETIC_TYPE:
            case IVAS_PI_DIEGETIC_TYPE:
            {
            {
                bool *isDiegetic = cur->data.digeticIndicator.isDiegetic;
                const bool *isDiegetic = cur->data.digeticIndicator.isDiegetic;
                fprintf( f_piDataOut, "{\n" );
                fprintf( f_piDataOut, "{\n" );
                fprintf( f_piDataOut, "\t\t\t\"isDigetic\": [\n" );
                fprintf( f_piDataOut, "\t\t\t\"isDigetic\": [\n" );
                fprintf( f_piDataOut, "\t\t\t\t%s,\n", isDiegetic[0] ? "true" : "false" );
                fprintf( f_piDataOut, "\t\t\t\t%s,\n", isDiegetic[0] ? "true" : "false" );
@@ -274,7 +275,7 @@ void IVAS_RTP_LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataP
            break;
            break;
            case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION:
            case IVAS_PI_DYNAMIC_AUDIO_SUPPRESSION:
            {
            {
                IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppression;
                const IVAS_PIDATA_DYNAMIC_SUPPRESSION *das = &cur->data.dynSuppression;
                fprintf( f_piDataOut, "{\n" );
                fprintf( f_piDataOut, "{\n" );
                fprintf( f_piDataOut, "\t\t\t\"preferSpeech\": %s,\n", das->speech ? "true" : "false" );
                fprintf( f_piDataOut, "\t\t\t\"preferSpeech\": %s,\n", das->speech ? "true" : "false" );
                fprintf( f_piDataOut, "\t\t\t\"preferMusic\": %s,\n", das->music ? "true" : "false" );
                fprintf( f_piDataOut, "\t\t\t\"preferMusic\": %s,\n", das->music ? "true" : "false" );
@@ -336,7 +337,9 @@ void IVAS_RTP_LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataP
    fprintf( f_piDataOut, "\n\t}" );
    fprintf( f_piDataOut, "\n\t}" );
}
}


void IVAS_RTP_Term( IVAS_RTP *rtp )
void IVAS_RTP_Term(
    IVAS_RTP *rtp /* i/o : IVAS RTP File reader/writer handle */
)
{
{
    if ( NULL != rtp )
    if ( NULL != rtp )
    {
    {
@@ -382,7 +385,11 @@ void IVAS_RTP_Term( IVAS_RTP *rtp )
    }
    }
}
}


ivas_error IVAS_RTP_WRITER_Init( IVAS_RTP *rtp, const char *outputBitstreamFilename, uint32_t numFramesPerPacket )
ivas_error IVAS_RTP_WRITER_Init(
    IVAS_RTP *rtp,                       /* i/o : IVAS RTP File writer handle      */
    const char *outputBitstreamFilename, /* i   : RTP Dump filename                */
    uint32_t numFramesPerPacket          /* i   : No. of frames per packet desired */
)
{
{
    uint32_t SSRC = ( rand() & 0xFFFF ) | ( (uint32_t) rand() << 16 );
    uint32_t SSRC = ( rand() & 0xFFFF ) | ( (uint32_t) rand() << 16 );
    ivas_error error = IVAS_ERR_OK;
    ivas_error error = IVAS_ERR_OK;
@@ -413,7 +420,11 @@ ivas_error IVAS_RTP_WRITER_Init( IVAS_RTP *rtp, const char *outputBitstreamFilen
    return error;
    return error;
}
}


ivas_error IVAS_RTP_READER_Init( IVAS_RTP *rtp, const char *inputBitstreamFilename, const char *piOutputFilename )
ivas_error IVAS_RTP_READER_Init(
    IVAS_RTP *rtp,                      /* i/o : IVAS RTP File reader handle  */
    const char *inputBitstreamFilename, /* i   : Input rtpdump filename       */
    const char *piOutputFilename        /* i   : Output PI data json filename */
)
{
{
    ivas_error error = IVAS_ERR_OK;
    ivas_error error = IVAS_ERR_OK;


@@ -447,7 +458,13 @@ ivas_error IVAS_RTP_READER_Init( IVAS_RTP *rtp, const char *inputBitstreamFilena
    return error;
    return error;
}
}


ivas_error IVAS_RTP_WriteNextFrame( IVAS_RTP *rtp, uint8_t *au, int16_t auSizeBits, bool isMono, bool forcePacket )
ivas_error IVAS_RTP_WriteNextFrame(
    IVAS_RTP *rtp,      /* i/o : IVAS RTP File writer handle                      */
    uint8_t *au,        /* i   : IVAS Compressed AU (Packed frame)                */
    int16_t auSizeBits, /* i   : Frame size in bits                               */
    bool isMono,        /* i   : input was evs(true) or ivas(false)               */
    bool forcePacket    /* i   : force packets with whatever frames pushed so far */
)
{
{
    ivas_error error = IVAS_ERR_OK;
    ivas_error error = IVAS_ERR_OK;
    uint32_t nProcPiData = 0;
    uint32_t nProcPiData = 0;
@@ -501,7 +518,15 @@ ivas_error IVAS_RTP_WriteNextFrame( IVAS_RTP *rtp, uint8_t *au, int16_t auSizeBi
    return error;
    return error;
}
}


ivas_error IVAS_RTP_ReadNextFrame( IVAS_RTP *rtp, uint8_t *au, int16_t *auSizeBits, uint32_t *rtpTimeStamp, uint16_t *rtpSequenceNumber, uint32_t *nextPacketRcvTime_ms, bool *qBit )
ivas_error IVAS_RTP_ReadNextFrame(
    IVAS_RTP *rtp,                  /* i/o : IVAS RTP File reader handle                       */
    uint8_t *au,                    /* o   : Read next IVAS Compressed AU (Packed frame)       */
    int16_t *auSizeBits,            /* o   : Reported Frame size in bits                       */
    uint32_t *rtpTimeStamp,         /* o   : RTP Timestamp for this frame                      */
    uint16_t *rtpSequenceNumber,    /* o   : RTP sequence number for this packet               */
    uint32_t *nextPacketRcvTime_ms, /* i/o : Clock indicating packet receive times need in JBM */
    bool *qBit                      /* o   : AMRWB Q bite as indicated in the RTP packet       */
)
{
{
    ivas_error error = IVAS_ERR_OK;
    ivas_error error = IVAS_ERR_OK;
    IVAS_DATA_BUFFER packedFrame;
    IVAS_DATA_BUFFER packedFrame;
Loading