Loading apps/decoder.c +5 −146 Original line number Original line Diff line number Diff line Loading @@ -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 ); Loading @@ -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() * * Loading Loading @@ -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 { { Loading Loading @@ -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 */ Loading Loading @@ -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; Loading Loading @@ -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 ) { { Loading lib_dec/lib_dec.c +0 −5 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading lib_util/ivas_bpool.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -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" Loading lib_util/ivas_queue.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -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" Loading lib_util/ivas_rtp_file.c +46 −21 Original line number Original line Diff line number Diff line Loading @@ -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" Loading Loading @@ -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 ) Loading @@ -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; Loading Loading @@ -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 ) Loading @@ -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 ) { { Loading Loading @@ -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 ) Loading @@ -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" ); Loading Loading @@ -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" ); Loading Loading @@ -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 ) { { Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 Loading
apps/decoder.c +5 −146 Original line number Original line Diff line number Diff line Loading @@ -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 ); Loading @@ -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() * * Loading Loading @@ -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 { { Loading Loading @@ -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 */ Loading Loading @@ -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; Loading Loading @@ -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 ) { { Loading
lib_dec/lib_dec.c +0 −5 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading
lib_util/ivas_bpool.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -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" Loading
lib_util/ivas_queue.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -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" Loading
lib_util/ivas_rtp_file.c +46 −21 Original line number Original line Diff line number Diff line Loading @@ -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" Loading Loading @@ -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 ) Loading @@ -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; Loading Loading @@ -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 ) Loading @@ -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 ) { { Loading Loading @@ -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 ) Loading @@ -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" ); Loading Loading @@ -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" ); Loading Loading @@ -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 ) { { Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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