Commit 812901ac authored by Ripinder Singh's avatar Ripinder Singh
Browse files

SR RTPdump ingest in IVAS post renderer



* Generate a SR params file (simulating SR) for post renderer
* Enhance RTP API to pass codec framesize duration in ms

Signed-off-by: default avatarRipinder Singh <ripinder.singh@dolby.com>
parent c928727a
Loading
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -1866,8 +1866,29 @@ static ivas_error initOnFirstGoodFrame(
        }

#ifdef IVAS_RTPDUMP
        /* Split Rendering RTPDump Output file */
        if ( arg.rtpOutSR && srRtp != NULL )
        {
            FILE *fParamsSR = NULL;
            char srParamsFile[FILENAME_MAX], *ext = ".sr.txt";
            strncpy( srParamsFile, arg.outputWavFilename, FILENAME_MAX - sizeof( ext ) );
            strncat( srParamsFile, ext, sizeof( ext ) + 1 );

            /* Write the Split Rendering Params passed from SDP to srParamsFile */
            fParamsSR = fopen( srParamsFile, "w" );
            if ( NULL != fParamsSR )
            {
                fprintf( fParamsSR, "CODEC = %s;\nDOF = %d;\nFRAMESIZE = %d;\nRENDERSIZE = %d;\nLC3PLUS_HIGHRES = %d;\n",
                         splitRendCodec == ISAR_SPLIT_REND_CODEC_LC3PLUS ? "LC3PLUS" : "LCLD",
                         poseCorrection,
                         splitRendCodecFrameSizeMs,
                         splitRendIsarFrameSizeMs,
                         lc3plusHighRes );
                fclose( fParamsSR );
                fParamsSR = NULL;
            }


            /* Split Rendering RTPDump Output file */
            if ( ( error = IVAS_RTP_WRITER_Init( srRtp, arg.outputWavFilename, 1000 / ( IVAS_NUM_FRAMES_PER_SEC * splitRendCodecFrameSizeMs ) ) ) != IVAS_ERR_OK )
            {
@@ -3057,7 +3078,11 @@ static ivas_error printBitstreamInfoVoip(
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP:
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF:
#ifdef IVAS_RTPDUMP
#ifdef RTP_S4_251135_CR26253_0016_REV1
            if ( ( error = IVAS_RTP_READER_Init( &ivasRtp, 0, arg.inputBitstreamFilename, arg.piOutputFilename, arg.outputConfig == IVAS_AUDIO_CONFIG_EXTERNAL, arg.outputWavFilename ) ) != IVAS_ERR_OK )
#else
            if ( ( error = IVAS_RTP_READER_Init( &ivasRtp, arg.inputBitstreamFilename, arg.piOutputFilename, arg.outputConfig == IVAS_AUDIO_CONFIG_EXTERNAL, arg.outputWavFilename ) ) != IVAS_ERR_OK )
#endif
            {
                fprintf( stderr, "error in IVAS_RTP_READER_Init(): %d\n", error );
                goto cleanup;
@@ -3099,7 +3124,11 @@ static ivas_error printBitstreamInfoVoip(
        {
            auPtr = au; /* might have been set to RTP packet in prev call */
#ifdef IVAS_RTPDUMP
#ifdef RTP_S4_251135_CR26253_0016_REV1
            error = IVAS_RTP_ReadNextFrame( &ivasRtp, auPtr, &auSizeBits, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, NULL, &qBit );
#else
            error = IVAS_RTP_ReadNextFrame( &ivasRtp, auPtr, &auSizeBits, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, &qBit );
#endif
#else
            rtpdumpDepackerError = EVS_RTPDUMP_DEPACKER_readNextFrame( &rtpdumpDepacker, &rtpSequenceNumber, &rtpTimeStamp, &nextPacketRcvTime_ms, &isAMRWB_IOmode, &frameTypeIndex, &qBit, &auPtr, (uint16_t *) &auSizeBits );
#endif
@@ -3286,7 +3315,11 @@ static ivas_error decodeVoIP(
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP:
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF:
#ifdef IVAS_RTPDUMP
#ifdef RTP_S4_251135_CR26253_0016_REV1
            if ( ( error = IVAS_RTP_READER_Init( &ivasRtp, 0, arg.inputBitstreamFilename, arg.piOutputFilename, arg.outputConfig == IVAS_AUDIO_CONFIG_EXTERNAL, arg.outputWavFilename ) ) != IVAS_ERR_OK )
#else
            if ( ( error = IVAS_RTP_READER_Init( &ivasRtp, arg.inputBitstreamFilename, arg.piOutputFilename, arg.outputConfig == IVAS_AUDIO_CONFIG_EXTERNAL, arg.outputWavFilename ) ) != IVAS_ERR_OK )
#endif
            {
                fprintf( stderr, "error in IVAS_RTP_READER_Init(): %d\n", error );
                goto cleanup;
@@ -3349,7 +3382,11 @@ static ivas_error decodeVoIP(
    {
        auPtr = au; /* might have been set to RTP packet in prev call */
#ifdef IVAS_RTPDUMP
#ifdef RTP_S4_251135_CR26253_0016_REV1
        error = IVAS_RTP_ReadNextFrame( &ivasRtp, auPtr, &auSize, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, NULL, &qBit );
#else
        error = IVAS_RTP_ReadNextFrame( &ivasRtp, auPtr, &auSize, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, &qBit );
#endif
        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 );
@@ -3533,7 +3570,11 @@ static ivas_error decodeVoIP(
            {
                auPtr = au; /* might have been set to RTP packet in prev call */
#ifdef IVAS_RTPDUMP
#ifdef RTP_S4_251135_CR26253_0016_REV1
                error = IVAS_RTP_ReadNextFrame( &ivasRtp, au, &auSize, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, NULL, &qBit );
#else
                error = IVAS_RTP_ReadNextFrame( &ivasRtp, au, &auSize, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, &qBit );
#endif

                /* IVAS RTP payload format has timescale 16000, JBM uses 1000 internally */
                rtpTimeStamp = rtpTimeStamp / 16;
@@ -3836,6 +3877,8 @@ static ivas_error decodeVoIP(
                fprintf( stderr, "\nError %s while pushing SR audio bitstream to RTP pack\n", ivas_error_to_string( error ) );
                goto cleanup;
            }
            splitRendBits->bits_written = 0;
            splitRendBits->bits_read = 0;
        }
#endif

+227 −0
Original line number Diff line number Diff line
@@ -48,6 +48,9 @@
#include "debug.h"
#endif
#include "wmc_auto.h"
#ifdef RTP_S4_251135_CR26253_0016_REV1
#include "ivas_rtp_file.h"
#endif


#define WMC_TOOL_SKIP
@@ -78,6 +81,9 @@ static

typedef struct
{
#ifdef RTP_S4_251135_CR26253_0016_REV1
    bool srRtp;
#endif
    IVAS_AUDIO_CONFIG audioConfig;
    int32_t inputChannelIndex;
    float gain_dB;
@@ -99,6 +105,9 @@ typedef struct
    char executableName[POST_REND_MAX_CLI_ARG_LENGTH];
    char inputFilePath[POST_REND_MAX_CLI_ARG_LENGTH];
    char outputFilePath[POST_REND_MAX_CLI_ARG_LENGTH];
#ifdef RTP_S4_251135_CR26253_0016_REV1
    char srParamsFilePath[POST_REND_MAX_CLI_ARG_LENGTH];
#endif
    int32_t sampleRate;
    InputConfig inConfig;
    OutputConfig outConfig;
@@ -128,6 +137,9 @@ typedef enum
    CmdLnOptionId_listFormats,
    CmdLnOptionId_SplitRendBFIFile,
    CmdLnOptionId_framing,
#ifdef RTP_S4_251135_CR26253_0016_REV1
    CmdLnOptionId_srParamsFile,
#endif
} CmdLnOptionId;

static const CmdLnParser_Option cliOptions[] = {
@@ -203,6 +215,14 @@ static const CmdLnParser_Option cliOptions[] = {
        .matchShort = "fr",
        .description = "Set Render audio framing.",
    },
#ifdef RTP_S4_251135_CR26253_0016_REV1
    {
        .id = CmdLnOptionId_srParamsFile,
        .match = "sr_params",
        .matchShort = "s",
        .description = "Path to the split rendering init params file",
    },
#endif
};


@@ -214,7 +234,11 @@ static const int32_t numCliOptions = sizeof( cliOptions ) / sizeof( CmdLnParser_

static void printSupportedAudioConfigs( void );

#ifdef RTP_S4_251135_CR26253_0016_REV1
static IVAS_AUDIO_CONFIG parseAudioConfig( const char *configString, bool *srRtp );
#else
static IVAS_AUDIO_CONFIG parseAudioConfig( const char *configString );
#endif

static void convertOutputBuffer( const float *floatBuffer, const int16_t numSamplesPerChannel, const int16_t numChannels, int16_t *intBuffer );

@@ -302,12 +326,20 @@ static bool parseInConfig(
    }

    /* Check for single-format inputs. The given string should map to a member of AUDIO_CONFIG enum. */
#ifdef RTP_S4_251135_CR26253_0016_REV1
    bool srRtp = false;
    IVAS_AUDIO_CONFIG audioConfig = parseAudioConfig( inFormatStr, &srRtp );
#else
    IVAS_AUDIO_CONFIG audioConfig = parseAudioConfig( inFormatStr );
#endif
    switch ( audioConfig )
    {
        case IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED:
        case IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM:
            inConfig->numBinBuses = 1;
#ifdef RTP_S4_251135_CR26253_0016_REV1
            inConfig->binBuses[0].srRtp = srRtp;
#endif
            inConfig->binBuses[0].audioConfig = audioConfig;
            inConfig->binBuses[0].inputChannelIndex = 0;
            inConfig->binBuses[0].gain_dB = 0.0f;
@@ -358,11 +390,19 @@ static bool parseRenderFramesize(


static IVAS_AUDIO_CONFIG parseAudioConfig(
#ifdef RTP_S4_251135_CR26253_0016_REV1
    const char *configString,
    bool *srRtp )
#else
    const char *configString )
#endif
{
    char charBuf[25];
    charBuf[24] = '\0';

#ifdef RTP_S4_251135_CR26253_0016_REV1
    *srRtp = false;
#endif
    strncpy( charBuf, configString, sizeof( charBuf ) - 1 );
    charBuf[sizeof( charBuf ) - 1] = '\0';
    to_upper( charBuf );
@@ -379,6 +419,13 @@ static IVAS_AUDIO_CONFIG parseAudioConfig(
    {
        return IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED;
    }
#ifdef RTP_S4_251135_CR26253_0016_REV1
    if ( strcmp( charBuf, "RTPDUMP" ) == 0 )
    {
        *srRtp = true;
        return IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED;
    }
#endif
    return IVAS_AUDIO_CONFIG_INVALID;
}

@@ -435,6 +482,9 @@ static CmdlnArgs defaultArgs(
    strncpy( args.executableName, executableName, POST_REND_MAX_CLI_ARG_LENGTH );
    clearString( args.inputFilePath );
    clearString( args.outputFilePath );
#ifdef RTP_S4_251135_CR26253_0016_REV1
    clearString( args.srParamsFilePath );
#endif
    args.sampleRate = 0;

    args.outConfig.audioConfig = IVAS_AUDIO_CONFIG_INVALID;
@@ -542,6 +592,12 @@ static void parseOption(
            }

            break;
#ifdef RTP_S4_251135_CR26253_0016_REV1
        case CmdLnOptionId_srParamsFile:
            assert( numOptionValues == 1 );
            strncpy( args->srParamsFilePath, optionValues[0], POST_REND_MAX_CLI_ARG_LENGTH - 1 );
            break;
#endif
        default:
            assert( 0 && "This should be unreachable - all command line options should be explicitly handled." );
            break;
@@ -578,6 +634,9 @@ static void printSupportedAudioConfigs( void )
        "BINAURAL (output only)",
        "BINAURAL_SPLIT_PCM",
        "BINAURAL_SPLIT_CODED",
#ifdef RTP_S4_251135_CR26253_0016_REV1
        "RTPDUMP",
#endif
    };

    fprintf( stdout, "Supported audio formats:\n" );
@@ -670,6 +729,96 @@ static void convertOutputBuffer(
    return;
}

#ifdef RTP_S4_251135_CR26253_0016_REV1
static void trim( char *str )
{
    char c;
    int r = 0, w = 0;
    while ( ( c = str[r] ) != 0 && ( c == ' ' || c == '\t' || c == ';' ) )
    {
        r++;
    }

    while ( ( c = str[r] ) != 0 && ( c != ' ' && c != '\t' && c != ';' ) )
    {
        str[w++] = c;
        r++;
    }
    str[w] = 0;
}

static ivas_error parseSRParamsFile(
    const char *srParamsFilePath,
    ISAR_SPLIT_REND_CODEC *codec,
    ISAR_SPLIT_REND_POSE_CORRECTION_MODE *poseCorrection,
    int16_t *codec_frame_size_ms,
    int16_t *isar_frame_size_ms,
    int16_t *lc3plusHighRes )
{
    FILE *fParamSR = fopen( srParamsFilePath, "r" );
    if ( NULL == fParamSR )
    {
        fprintf( stderr, "error in opening srParams File %s)\n", srParamsFilePath );
        return IVAS_ERR_FAILED_FILE_OPEN;
    }

    *codec = ISAR_SPLIT_REND_CODEC_NONE;
    *poseCorrection = ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE;
    *codec_frame_size_ms = 5;
    *lc3plusHighRes = 0;

    while ( !feof( fParamSR ) )
    {
        char key[16], value[16];
        if ( 2 == fscanf( fParamSR, "%15s = %15s", key, value ) )
        {
            trim( key );
            trim( value );

            if ( 0 == strncmp( key, "CODEC", 5 ) )
            {
                *codec = ( 0 == strncmp( value, "LCLD", 4 ) ) ? ISAR_SPLIT_REND_CODEC_LCLD : *codec;
                *codec = ( 0 == strncmp( value, "LC3PLUS", 7 ) ) ? ISAR_SPLIT_REND_CODEC_LC3PLUS : *codec;
            }
            else if ( 0 == strncmp( key, "DOF", 3 ) )
            {
                int val = atoi( value );
                if ( val == 0 || val == 1 )
                {
                    *poseCorrection = ( val == 0 ) ? ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE : ISAR_SPLIT_REND_POSE_CORRECTION_MODE_CLDFB;
                }
            }
            else if ( 0 == strncmp( key, "FRAMESIZE", 9 ) )
            {
                int val = atoi( value );
                if ( val == 5 || val == 10 || val == 20 )
                {
                    *codec_frame_size_ms = (int16_t) val;
                }
            }
            else if ( 0 == strncmp( key, "RENDERSIZE", 9 ) )
            {
                int val = atoi( value );
                if ( val == 5 || val == 10 || val == 20 )
                {
                    *isar_frame_size_ms = (int16_t) val;
                }
            }
            else if ( 0 == strncmp( key, "LC3PLUS_HIGHRES", 15 ) )
            {
                int val = atoi( value );
                if ( val == 0 || val == 1 )
                {
                    *lc3plusHighRes = (int16_t) val;
                }
            }
        }
    }

    fclose( fParamSR );
    return IVAS_ERR_OK;
}
#endif

/*------------------------------------------------------------------------------------------*
 * main()
@@ -710,6 +859,9 @@ int main(
    int16_t i, numChannels;
    ivas_error error = IVAS_ERR_OK;
    bool splitBinNeedsNewFrame = true;
#ifdef RTP_S4_251135_CR26253_0016_REV1
    IVAS_RTP srRTP = { 0 };
#endif

#ifdef WMOPS
    reset_wmops();
@@ -736,6 +888,9 @@ int main(
    convert_backslash( args.inputFilePath );
    convert_backslash( args.outputFilePath );
    convert_backslash( args.headRotationFilePath );
#ifdef RTP_S4_251135_CR26253_0016_REV1
    convert_backslash( args.srParamsFilePath );
#endif

    /*------------------------------------------------------------------------------------------*
     * Open head-rotation file
@@ -790,8 +945,34 @@ int main(
        }
    }

#ifdef RTP_S4_251135_CR26253_0016_REV1
    if ( ( args.inConfig.numBinBuses > 0 ) && ( args.inConfig.binBuses[0].srRtp ) )
    {
        error = parseSRParamsFile( args.srParamsFilePath,
                                   &bitsBuffer.config.codec,
                                   &bitsBuffer.config.poseCorrection,
                                   &bitsBuffer.config.codec_frame_size_ms,
                                   &bitsBuffer.config.isar_frame_size_ms,
                                   &bitsBuffer.config.lc3plusHighRes );
        if ( error != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nCould not open split rend params file %s\n", args.srParamsFilePath );
            goto cleanup;
        }

        if ( ( error = IVAS_RTP_READER_Init( &srRTP, (uint32_t) bitsBuffer.config.codec_frame_size_ms, args.inputFilePath, NULL, false, NULL ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "error in IVAS_RTP_READER_Init(): %d\n", error );
            goto cleanup;
        }
        audioReader = NULL;
    }
    /*if split renderer is running in post renderer mode*/
    else if ( ( args.inConfig.numBinBuses > 0 ) && ( args.inConfig.binBuses[0].audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) )
#else
    /*if split renderer is running in post renderer mode*/
    if ( ( args.inConfig.numBinBuses > 0 ) && ( args.inConfig.binBuses[0].audioConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) )
#endif
    {
        error = split_rend_reader_open( &hSplitRendFileReadWrite,
                                        args.inputFilePath,
@@ -991,7 +1172,53 @@ int main(
        num_in_channels = inBuffer.config.numChannels;

        numSamplesRead = 0;
#ifdef RTP_S4_251135_CR26253_0016_REV1
        if ( srRTP.hRtpFile && splitBinNeedsNewFrame )
        {
            IVAS_RTP_SR_INFO srInfo = { 0 };
            uint32_t rtpTimeStamp = 0, nextPacketRcvTime_ms = 0;
            uint16_t rtpSequenceNumber = 0;
            int16_t auSizeBits = 0;
            bool qBit = false;
            uint8_t *bitBuffer = bitsBuffer.bits;
            int16_t frameMS = 0;

            numSamplesRead = (int16_t) inBufferSize;
            bitsBuffer.config.bitsRead = 0;
            bitsBuffer.config.bitsWritten = 0;

            while ( frameMS < bitsBuffer.config.isar_frame_size_ms )
            {
                error = IVAS_RTP_ReadNextFrame( &srRTP, bitBuffer, &auSizeBits, &rtpTimeStamp, &rtpSequenceNumber, &nextPacketRcvTime_ms, &srInfo, &qBit );
                if ( error != IVAS_ERR_OK )
                {
                    if ( error == IVAS_ERR_END_OF_FILE )
                    {
                        numSamplesRead = 0;
                    }
                    else
                    {
                        fprintf( stderr, "\nUnable to read from bitstream file!\n" );
                        goto cleanup;
                    }
                }
                /* Ensure a SR RTP stream was received */
                if ( !srInfo.valid )
                {
                    fprintf( stderr, "\nNon-SR RTP stream detected !\n" );
                    goto cleanup;
                }

                bitBuffer += ( auSizeBits + 7 ) / 8;
                bitsBuffer.config.bitsWritten += auSizeBits;
                bitsBuffer.config.codec = srInfo.codec == IVAS_SR_TRANSPORT_LC3PLUS ? ISAR_SPLIT_REND_CODEC_LC3PLUS : ISAR_SPLIT_REND_CODEC_LCLD;
                frameMS += bitsBuffer.config.codec_frame_size_ms;
            }
        }
        else if ( ( hSplitRendFileReadWrite != NULL ) && splitBinNeedsNewFrame )
#else
        if ( ( hSplitRendFileReadWrite != NULL ) && splitBinNeedsNewFrame )
#endif
        {
            ivas_error error_tmp;

+3 −0
Original line number Diff line number Diff line
@@ -407,6 +407,9 @@ typedef struct IVAS_RTP_UNPACK *IVAS_RTP_UNPACK_HANDLE; /* rtp unpacker handle t
typedef struct
{
    uint32_t maxFramesPerPacket; /* maximum no of frame per packet expected during the session */
#ifdef RTP_S4_251135_CR26253_0016_REV1
    uint32_t srCodecFrameSizeMs; /* split rendering transport codec frame size in ms (5/10/20) set by sdp negotiation */
#endif
} IVAS_RTP_UNPACK_CONFIG;

/* Open an instance of the RTP unpacker and return a handle to rtp unpacker on success
+15 −2
Original line number Diff line number Diff line
@@ -694,6 +694,9 @@ ivas_error IVAS_RTP_WRITER_Init(

ivas_error IVAS_RTP_READER_Init(
    IVAS_RTP *rtp, /* i/o : IVAS RTP File reader handle  */
#ifdef RTP_S4_251135_CR26253_0016_REV1
    uint32_t srCodecFrameSizeMs, /* i   : SR Codec Framesize in ms */
#endif
    const char *inputBitstreamFilename, /* i   : Input rtpdump filename       */
    const char *piOutputFilename,       /* i   : Output PI data json filename */
    bool isExtOutput,                   /* i   : External output mode         */
@@ -705,6 +708,7 @@ ivas_error IVAS_RTP_READER_Init(
    memset( rtp, 0, sizeof( IVAS_RTP ) );

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

@@ -824,6 +828,9 @@ ivas_error IVAS_RTP_ReadNextFrame(
    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 */
#ifdef RTP_S4_251135_CR26253_0016_REV1
    IVAS_RTP_SR_INFO *srInfo, /* o   : Split Rendering info if SR RTP frame unpacked     */
#endif
    bool *qBit /* o   : AMRWB Q bite as indicated in the RTP packet       */
)
{
@@ -902,6 +909,12 @@ ivas_error IVAS_RTP_ReadNextFrame(
        rtp->isAMRWB_IOmode = isAMRWB_IOmode;
    }

#ifdef RTP_S4_251135_CR26253_0016_REV1
    if ( srInfo != NULL )
    {
        *srInfo = rtp->srInfo;
    }
#endif
    *qBit = !rtp->speechLostIndicated;
    rtp->numFramesInPacket--;
    rtp->numFramesProduced++;
+6 −1
Original line number Diff line number Diff line
@@ -71,14 +71,19 @@ typedef struct
} IVAS_RTP;

ivas_error IVAS_RTP_WRITER_Init( IVAS_RTP *rtp, const char *outputBitstreamFilename, uint32_t numFramesPerPacket );
#ifdef RTP_S4_251135_CR26253_0016_REV1
ivas_error IVAS_RTP_READER_Init( IVAS_RTP *rtp, uint32_t srCodecFrameSizeMs, const char *inputBitstreamFilename, const char *piOutputFilename, bool isExtOutput, const char *outputWavFilename );
#else
ivas_error IVAS_RTP_READER_Init( IVAS_RTP *rtp, const char *inputBitstreamFilename, const char *piOutputFilename, bool isExtOutput, const char *outputWavFilename );
#endif
void IVAS_RTP_Term( IVAS_RTP *rtp );
#ifdef RTP_S4_251135_CR26253_0016_REV1
ivas_error IVAS_RTP_WriteNextFrame( IVAS_RTP *rtp, uint8_t *au, const IVAS_RTP_SR_INFO *srInfo, int16_t auSizeBits, bool isMono, bool forcePacket );
ivas_error IVAS_RTP_ReadNextFrame( IVAS_RTP *rtp, uint8_t *au, int16_t *auSizeBits, uint32_t *rtpTimeStamp, uint16_t *rtpSequenceNumber, uint32_t *nextPacketRcvTime_ms, IVAS_RTP_SR_INFO *srInfo, bool *qBit );
#else
ivas_error IVAS_RTP_WriteNextFrame( IVAS_RTP *rtp, uint8_t *au, int16_t auSizeBits, bool isMono, bool forcePacket );
#endif
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 );
#endif
void IVAS_RTP_LogPiData( FILE *f_piDataOut, const PIDATA_TS *piData, uint32_t nPiDataPresent );
void IVAS_RTP_WriteExtPiData( FILE *f_piDataOut, const PIDATA_TS *piData, uint32_t nPiDataPresent, uint16_t numObj );
const char *IVAS_RTP_GetExtPiFilePath( IVAS_RTP *rtp );
Loading