Commit e3fa8dc5 authored by Ripinder Singh's avatar Ripinder Singh
Browse files

Code review comments #2



* Split rtp file writing
* Update copyrights
* Added additional comments
* Added preprocessor defined for constants
* Fix bug in pidata pack
* Remove un-needed defines

Signed-off-by: default avatarRipinder Singh <ripinder.singh@dolby.com>
parent de43d43a
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -115,6 +115,7 @@
    <ClCompile Include="..\lib_util\ivas_rtp_rom.c" />
    <ClCompile Include="..\lib_util\ivas_bpool.c" />
    <ClCompile Include="..\lib_util\ivas_queue.c" />
    <ClCompile Include="..\lib_util\ivas_rtp_file.c" />
    <ClCompile Include="..\lib_util\vector3_pair_file_reader.c" />
    <ClCompile Include="..\lib_util\hrtf_file_reader.c" />
    <ClCompile Include="..\lib_util\ism_file_reader.c" />
+3 −0
Original line number Diff line number Diff line
@@ -97,6 +97,9 @@
    <ClCompile Include="..\lib_util\ivas_queue.c">
      <Filter>util_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_util\ivas_rtp_file.c">
      <Filter>util_c</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="..\lib_util\aeid_file_reader.h">
+65 −80
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@
#ifdef IVAS_RTPDUMP
#include "ivas_rtp_api.h"
#include "ivas_rtp_pi_data.h"
#include "ivas_rtp_file.h"
#endif
#include "jbm_file_writer.h"
#include "hrtf_file_reader.h"
@@ -172,7 +173,6 @@ typedef struct
} IVAS_DEC_HRTF_BINARY_WRAPPER;

#ifdef IVAS_RTPDUMP
#define JITTER_DURATION_MS ( 60 )
#ifdef DEBUGGING
#define DEBUG_PRINT fprintf
#else
@@ -190,7 +190,7 @@ typedef struct
    uint8_t packet[NOMINAL_BUFFER_SIZE( IVAS_MAX_FRAMES_PER_RTP_PACKET )];
    PIDATA_TS piData[IVAS_PI_MAX_ID * IVAS_MAX_FRAMES_PER_RTP_PACKET];

    FILE *f_rtpstream;
    IVAS_RTP_FILE_HANDLE hReader;
    FILE *f_piDataOut;
    IVAS_RTP_CODEC codecId;
    uint32_t nReadPiData;
@@ -223,7 +223,7 @@ static const char *PiDataNames[IVAS_PI_MAX_ID] = {
};


static void LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataPresent )
static void IVAS_RTP_LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataPresent )
{
    uint32_t timestamp = ~0u;
    if ( f_piDataOut == NULL || piData == NULL || nPiDataPresent == 0 )
@@ -374,12 +374,10 @@ static void LogPiData( FILE *f_piDataOut, PIDATA_TS *piData, uint32_t nPiDataPre

static void IVAS_RTP_Term( IVAS_RTP *rtp )
{
    if ( rtp->f_rtpstream )
    if ( NULL != rtp )
    {
        fclose( rtp->f_rtpstream );
        rtp->f_rtpstream = NULL;
    }
    if ( rtp->f_piDataOut )
        IvasRtpFile_Close( &rtp->hReader );
        if ( rtp->f_piDataOut != NULL )
        {
            fprintf( rtp->f_piDataOut, "\n}\n" );
            fclose( rtp->f_piDataOut );
@@ -387,57 +385,60 @@ static void IVAS_RTP_Term( IVAS_RTP *rtp )
        }
        IVAS_RTP_UNPACK_Close( &rtp->hUnpack );
    }
}

static ivas_error IVAS_RTP_Init( IVAS_RTP *rtp, FILE *f_rtpstream, FILE *f_piDataOut )
static ivas_error IVAS_RTP_Init( IVAS_RTP *rtp, const char *inputBitstreamFilename, const char *piOutputFilename )
{
    ivas_error error = IVAS_ERR_OK;

    memset( rtp, 0, sizeof( IVAS_RTP ) );

    rtp->unpackCfg.maxFramesPerPacket = IVAS_MAX_FRAMES_PER_RTP_PACKET;
    rtp->rtpPacket.buffer = rtp->packet;
    rtp->rtpPacket.capacity = sizeof( rtp->packet );

    error = IVAS_RTP_UNPACK_Open( &rtp->hUnpack, &rtp->unpackCfg );
    if ( error == IVAS_ERR_OK )
    {
        error = IvasRtpFile_Open( inputBitstreamFilename, false, &rtp->hReader );
        if ( error != IVAS_ERR_OK )
        {
            return error;
        }

    rtp->f_rtpstream = f_rtpstream;
    rtp->f_piDataOut = f_piDataOut;
    rtp->rtpPacket.buffer = rtp->packet;
    rtp->rtpPacket.capacity = sizeof( rtp->packet );
        if ( piOutputFilename != NULL )
        {
            rtp->f_piDataOut = fopen( piOutputFilename, "w" );
            if ( rtp->f_piDataOut == NULL )
            {
                fprintf( stderr, "could not open: %s\n", piOutputFilename );
                return IVAS_ERR_FAILED_FILE_OPEN;
            }
            fprintf( rtp->f_piDataOut, "{\n" );
        }
    }

    return error;
}

static ivas_error readNextFrame( IVAS_RTP *rtp, uint8_t *au, int16_t *auSizeBits, uint32_t *rtpTimeStamp, uint16_t *rtpSequenceNumber, uint32_t *nextPacketRcvTime_ms, bool *qBit )
static 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 error = IVAS_ERR_OK;
    IVAS_DATA_BUFFER packedFrame = { 0, 0, NULL };
    size_t packetLen = 0u;
    IVAS_DATA_BUFFER packedFrame;
    IVAS_RTP_CODEC codecId = IVAS_RTP_IVAS;
    bool isAMRWB_IOmode = false;

    packedFrame.length = 0;
    packedFrame.buffer = au;
    packedFrame.capacity = ( IVAS_MAX_BITS_PER_FRAME / 8 );
    if ( rtp->numFramesInPacket == 0 )
    {
        size_t nread = fread( &packetLen, sizeof( uint32_t ), 1, rtp->f_rtpstream ); /* Read Packet Length */
        if ( nread == 0 )
        {
            return IVAS_ERR_END_OF_FILE;
        }
        if ( packetLen > sizeof( rtp->packet ) )
        rtp->rtpPacket.length = 0;
        if ( ( error = IvasRtpFile_Read( rtp->hReader, rtp->rtpPacket.buffer, &rtp->rtpPacket.length, rtp->rtpPacket.capacity ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "RTP packet > buffer capacity %lu bytes\n", sizeof( rtp->packet ) );
            return IVAS_ERR_INVALID_OUTPUT_BUFFER_SIZE;
        }

        nread = fread( rtp->packet, sizeof( uint8_t ), packetLen, rtp->f_rtpstream ); /* Read Packet */
        if ( nread < packetLen )
        {
            return IVAS_ERR_END_OF_FILE;
            return error;
        }

        rtp->rtpPacket.buffer = rtp->packet;
        rtp->rtpPacket.length = packetLen;

        if ( ( error = IVAS_RTP_UNPACK_PushPacket( rtp->hUnpack, &rtp->rtpPacket,
                                                   &rtp->numFramesInPacket, &rtp->numPiDataInPacket,
                                                   &rtp->remoteRequestBitmap ) ) != IVAS_ERR_OK )
@@ -461,7 +462,7 @@ static ivas_error readNextFrame( IVAS_RTP *rtp, uint8_t *au, int16_t *auSizeBits
            rtp->nReadPiData++;
            rtp->numPiDataInPacket--;
        }
        LogPiData( rtp->f_piDataOut, rtp->piData, rtp->nReadPiData );
        IVAS_RTP_LogPiData( rtp->f_piDataOut, rtp->piData, rtp->nReadPiData );
    }

#ifdef RTP_S4_251135_CR26253_0016_REV1
@@ -505,7 +506,7 @@ static ivas_error readNextFrame( IVAS_RTP *rtp, uint8_t *au, int16_t *auSizeBits
    return IVAS_ERR_OK;
}

static ivas_error applyPiData( IVAS_RTP *rtp, IVAS_DEC_HANDLE hIvasDec, uint32_t rtpTimeStamp )
static ivas_error IVAS_RTP_ApplyPiData( IVAS_RTP *rtp, IVAS_DEC_HANDLE hIvasDec, uint32_t rtpTimeStamp )
{
    ivas_error error = IVAS_ERR_OK;
    while ( rtp->nProcPiData < rtp->nReadPiData &&
@@ -633,7 +634,7 @@ static int restartDecoder(

    if ( arg->voipMode )
    {
        if ( ( error = IVAS_DEC_EnableVoIP( hIvasDec, JITTER_DURATION_MS, arg->inputFormat ) ) != IVAS_ERR_OK )
        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;
@@ -975,11 +976,7 @@ int main(

    if ( arg.voipMode )
    {
#ifdef IVAS_RTPDUMP
        if ( ( error = IVAS_DEC_EnableVoIP( hIvasDec, JITTER_DURATION_MS, arg.inputFormat ) ) != IVAS_ERR_OK )
#else
        if ( ( error = IVAS_DEC_EnableVoIP( hIvasDec, 60, arg.inputFormat ) ) != IVAS_ERR_OK )
#endif
        {
            fprintf( stderr, "\nCould not enable VOIP: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
            goto cleanup;
@@ -3406,18 +3403,18 @@ static ivas_error printBitstreamInfoVoip(
{
    bool previewFailed = true;
    ivas_error error = IVAS_ERR_OK;
    FILE *f_rtpstream = NULL;
#ifdef IVAS_RTPDUMP
    IVAS_RTP ivasRtp;
#else
    FILE *f_rtpstream = NULL;
    EVS_RTPDUMP_DEPACKER rtpdumpDepacker;
    EVS_RTPDUMP_DEPACKER_ERROR rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_NO_ERROR;
    bool isAMRWB_IOmode;
    uint16_t frameTypeIndex;
#endif
    uint8_t au[( IVAS_MAX_BITS_PER_FRAME + 7 ) >> 3];
    int16_t auSizeBits;
    uint8_t *auPtr = NULL;
    bool isAMRWB_IOmode;
    uint16_t frameTypeIndex;
    bool qBit;
    uint32_t nextPacketRcvTime_ms = 0;
    uint16_t rtpSequenceNumber;
@@ -3430,6 +3427,13 @@ static ivas_error printBitstreamInfoVoip(
    {
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP:
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF:
#ifdef IVAS_RTPDUMP
            if ( ( error = IVAS_RTP_Init( &ivasRtp, arg.inputBitstreamFilename, NULL ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "error in IVAS_RTP_Init(): %d\n", error );
                goto cleanup;
            }
#else
            f_rtpstream = fopen( arg.inputBitstreamFilename, "r" );

            if ( f_rtpstream == NULL )
@@ -3438,13 +3442,6 @@ static ivas_error printBitstreamInfoVoip(
                goto cleanup;
            }

#ifdef IVAS_RTPDUMP
            if ( ( error = IVAS_RTP_Init( &ivasRtp, f_rtpstream ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "error in IVAS_RTP_Init(): %d\n", error );
                goto cleanup;
            }
#else
            rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_open( &rtpdumpDepacker, f_rtpstream, arg.inputFormat == IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF );
            if ( rtpdumpDepackerError != EVS_RTPDUMP_DEPACKER_NO_ERROR )
            {
@@ -3481,7 +3478,11 @@ static ivas_error printBitstreamInfoVoip(
            /* EVS RTP payload format has timescale 16000, JBM uses 1000 internally */
            rtpTimeStamp = rtpTimeStamp / 16;
        }
#ifdef IVAS_RTPDUMP
        if ( error != IVAS_ERR_OK )
#else
        if ( error != IVAS_ERR_OK || rtpdumpDepackerError != EVS_RTPDUMP_DEPACKER_NO_ERROR )
#endif
        {
            fprintf( stderr, "failed to read first RTP packet\n" );
            goto cleanup;
@@ -3574,13 +3575,12 @@ static ivas_error decodeVoIP(
    int16_t delayNumSamples = -1;
    int32_t delayTimeScale = -1;
    int16_t i;
    FILE *f_rtpstream = NULL;
#ifdef IVAS_RTPDUMP
    IVAS_RTP ivasRtp = { 0 };
    IVAS_DEC_HANDLE hIvasDec = *phIvasDec;
    FILE *f_piDataOut = NULL;
    int32_t initialTsOffsetSystemAndRTP = 0;
#else
    FILE *f_rtpstream = NULL;
    EVS_RTPDUMP_DEPACKER rtpdumpDepacker;
    EVS_RTPDUMP_DEPACKER_ERROR rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_NO_ERROR;
#endif
@@ -3634,34 +3634,19 @@ static ivas_error decodeVoIP(
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP:
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF:
#ifdef IVAS_RTPDUMP
            f_rtpstream = fopen( arg.inputBitstreamFilename, "rb" );
            if ( ( error = IVAS_RTP_Init( &ivasRtp, arg.inputBitstreamFilename, arg.piOutputFilename ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "error in IVAS_RTP_Init(): %d\n", error );
                goto cleanup;
            }
#else
            f_rtpstream = fopen( arg.inputBitstreamFilename, "r" );
#endif

            if ( f_rtpstream == NULL )
            {
                fprintf( stderr, "could not open: %s\n", arg.inputBitstreamFilename );
                goto cleanup;
            }

#ifdef IVAS_RTPDUMP
            if ( arg.piOutputFilename != NULL )
            {
                f_piDataOut = fopen( arg.piOutputFilename, "w" );
                if ( f_piDataOut == NULL )
                {
                    fprintf( stderr, "could not open: %s\n", arg.piOutputFilename );
                    goto cleanup;
                }
                fprintf( f_piDataOut, "{\n" );
            }
            if ( ( error = IVAS_RTP_Init( &ivasRtp, f_rtpstream, f_piDataOut ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "error in IVAS_RTP_Init(): %d\n", error );
                goto cleanup;
            }
#else
            rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_open( &rtpdumpDepacker, f_rtpstream, arg.inputFormat == IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF );
            if ( rtpdumpDepackerError != EVS_RTPDUMP_DEPACKER_NO_ERROR )
            {
@@ -3711,7 +3696,7 @@ static ivas_error decodeVoIP(
    {
        auPtr = au; /* might have been set to RTP packet in prev call */
#ifdef IVAS_RTPDUMP
        error = readNextFrame( &ivasRtp, auPtr, &auSize, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, &qBit );
        error = IVAS_RTP_ReadNextFrame( &ivasRtp, auPtr, &auSize, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, &qBit );
        initialTsOffsetSystemAndRTP = rtpTimeStamp - systemTime_ms * 16; /* For time mapping */
#else
        rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_readNextFrame( &rtpdumpDepacker, &rtpSequenceNumber, &rtpTimeStamp, &nextPacketRcvTime_ms, &isAMRWB_IOmode, &frameTypeIndex, &qBit, &auPtr, (uint16_t *) &auSize );
@@ -3916,7 +3901,7 @@ static ivas_error decodeVoIP(
            {
                auPtr = au; /* might have been set to RTP packet in prev call */
#ifdef IVAS_RTPDUMP
                error = readNextFrame( &ivasRtp, au, &auSize, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, &qBit );
                error = IVAS_RTP_ReadNextFrame( &ivasRtp, au, &auSize, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, &qBit );

                /* IVAS RTP payload format has timescale 16000, JBM uses 1000 internally */
                rtpTimeStamp = rtpTimeStamp / 16;
@@ -3966,7 +3951,7 @@ static ivas_error decodeVoIP(
            {
                /* Rudimentry Time Mapping to map system time to rtp timestamp */
                uint32_t piTs = systemTime_ms * 16 + initialTsOffsetSystemAndRTP;
                if ( ( error = applyPiData( &ivasRtp, hIvasDec, piTs ) ) != IVAS_ERR_OK )
                if ( ( error = IVAS_RTP_ApplyPiData( &ivasRtp, hIvasDec, piTs ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nError in IVAS_DEC_VoIP_GetSamples: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                    goto cleanup;
+28 −45
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@
#include "ivas_rtp_api.h"
#include "ivas_rtp_pi_data.h"
#include "rotation_file_reader.h"
#include "ivas_rtp_file.h"
#endif
#ifdef DEBUGGING
#include "debug.h"
@@ -221,14 +222,14 @@ int main(
#endif

#ifdef IVAS_RTPDUMP
    FILE *f_rtpstream = NULL;
    IVAS_RTP_FILE_HANDLE hWriter = NULL;
    IVAS_RTP_PACK_HANDLE hPack = NULL;

    uint8_t au[IVAS_MAX_BITS_PER_FRAME / 8];
    uint8_t packet[NOMINAL_BUFFER_SIZE( IVAS_MAX_FRAMES_PER_RTP_PACKET )];
    IVAS_DATA_BUFFER packedFrame = { 0, 0, NULL };
    IVAS_DATA_BUFFER rtpPacket = { 0, 0, NULL };
    uint32_t numFramesInPayload = 0, packetLength = 0;
    uint32_t numFramesInPayload = 0;

    packedFrame.capacity = sizeof( au );
    packedFrame.buffer = au;
@@ -639,8 +640,8 @@ int main(
        packCfg.maxFramesPerPacket = arg.numFramesPerPacket;

        /* Open the output file for RTPDump writing */
        f_rtpstream = fopen( arg.outputBitstreamFilename, "wb" );
        if ( f_rtpstream == NULL )
        error = IvasRtpFile_Open ( arg.outputBitstreamFilename, true, &hWriter );
        if ( error != IVAS_ERR_OK )
        {
            fprintf( stderr, "could not open: %s\n", arg.outputBitstreamFilename );
            goto cleanup;
@@ -861,40 +862,17 @@ int main(
        }

        /* *** Encode one frame *** */
        if ( ( error = IVAS_ENC_EncodeFrameToSerial( hIvasEnc, pcmBuf, pcmBufSize, bitStream, &numBits ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nencodeFrame failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) );
            goto cleanup;
        }

#ifdef IVAS_RTPDUMP
        if ( hPack )
        {
            uint32_t n = numBits / 8, x = 0;
            uint16_t *bitstrm = bitStream;

            /* Pack Encoded Stream */
            packedFrame.length = 0;
            rtpPacket.length = 0;
            while ( n )
            if ( ( error = IVAS_ENC_EncodeFrameToCompact( hIvasEnc, pcmBuf, pcmBufSize, packedFrame.buffer, &numBits ) ) != IVAS_ERR_OK )
            {
                x = ( ( bitstrm[0] << 7 ) | ( bitstrm[1] << 6 ) | ( bitstrm[2] << 5 ) | ( bitstrm[3] << 4 ) |
                      ( bitstrm[4] << 3 ) | ( bitstrm[5] << 2 ) | ( bitstrm[6] << 1 ) | ( bitstrm[7] << 0 ) );
                packedFrame.buffer[packedFrame.length++] = (uint8_t) x;
                bitstrm += 8;
                n--;
                fprintf( stderr, "\nencodeFrame failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) );
                goto cleanup;
            }

            /* AMWWB-IO has non octet sized bitstream */
            if ( numBits & 0x7 )
            {
                x = 0;
                for ( n = 0; n < (uint32_t) ( numBits & 0x7 ); n++ )
                {
                    x |= (uint8_t) ( bitstrm[n] << ( 7 - n ) );
                }
                packedFrame.buffer[packedFrame.length++] = (uint8_t) x;
            }
            packedFrame.length = ( numBits + 7 ) / 8;
            rtpPacket.length = 0;

            /* Push Encoded Stream to */
            if ( ( error = IVAS_RTP_PACK_PushFrame( hPack,
@@ -961,15 +939,22 @@ int main(
                    goto cleanup;
                }

                /* File Format = Packet Length (uint32_t) + Packet bytes */
                packetLength = (uint32_t) rtpPacket.length;
                fwrite( &packetLength, sizeof( packetLength ), 1, f_rtpstream );
                fwrite( rtpPacket.buffer, sizeof( uint8_t ), packetLength, f_rtpstream );
                if ( ( error = IvasRtpFile_Write ( hWriter, rtpPacket.buffer, rtpPacket.length ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nError %s while writing RTP packet\n", IVAS_ENC_GetErrorMessage( error ) );
                    goto cleanup;
                }
            }
        }
        else
        {
#endif
            if ( ( error = IVAS_ENC_EncodeFrameToSerial( hIvasEnc, pcmBuf, pcmBufSize, bitStream, &numBits ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nencodeFrame failed: %s\n\n", IVAS_ENC_GetErrorMessage( error ) );
                goto cleanup;
            }

            /* write bitstream */
            if ( ( error = BS_Writer_WriteFrame_short( hBsWriter, bitStream, numBits, totalBitrate ) ) != IVAS_ERR_OK )
            {
@@ -1068,10 +1053,11 @@ cleanup:
                goto cleanup;
            }

            /* File Format = Packet Length (uint32_t) + Packet bytes */
            packetLength = (uint32_t) rtpPacket.length;
            fwrite( &packetLength, sizeof( packetLength ), 1, f_rtpstream );
            fwrite( rtpPacket.buffer, sizeof( uint8_t ), packetLength, f_rtpstream );
            if ( ( error = IvasRtpFile_Write ( hWriter, rtpPacket.buffer, rtpPacket.length ) ) != IVAS_ERR_OK )
            {
                fprintf( stderr, "\nError %s while writing RTP packet\n", IVAS_ENC_GetErrorMessage( error ) );
                goto cleanup;
            }
        }

        IVAS_RTP_PACK_Close( &hPack );
@@ -1087,10 +1073,7 @@ cleanup:
        RotationFileReader_close( &deviceOrientationFileReader );
    }

    if ( f_rtpstream )
    {
        fclose( f_rtpstream );
    }
    IvasRtpFile_Close( &hWriter );
#endif

    IVAS_ENC_Close( &hIvasEnc );
+1 −1
Original line number Diff line number Diff line
/******************************************************************************************************

   (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
   (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
   Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
   Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
   Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
Loading