Commit b0d92cd2 authored by Lauros Pajunen's avatar Lauros Pajunen
Browse files

Merge origin/main

parents f9b37f80 5f3b64ec
Loading
Loading
Loading
Loading
+21 −24
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ workflow:
    - make clean
    - make -j CLANG=$CLANG_NUM
    - testcase_timeout=$SELFTEST_SANITY_TIMEOUT
    - export UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1
    - export UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1

    - exit_code20=0
    - exit_code10=0
@@ -608,7 +608,7 @@ renderer-usan:
  variables:
    SANITIZER_BUILD_STRING: "usan"
  script:
    - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1 python3 -m pytest -q --tb=no -n auto --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer/test_renderer.py tests/split_rendering/test_split_rendering.py --testcase_timeout=$testcase_timeout
    - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1 python3 -m pytest -q --tb=no -n auto --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer/test_renderer.py tests/split_rendering/test_split_rendering.py --testcase_timeout=$testcase_timeout
  artifacts:
    expose_as: "renderer usan result"

@@ -716,14 +716,15 @@ rtpdump-test:
  stage: test
  script:
    - make -j
    - testcase_timeout=30
    - python3 -m pytest -q -n auto -rA --junit-xml=report-junit.xml tests/rtp/test_rtp.py --testcase_timeout=$testcase_timeout
    - testcase_timeout=15
    - python3 -m pytest -q --tb=no -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/rtp/test_rtp.py --testcase_timeout=$testcase_timeout
  artifacts:
    name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
    expire_in: 1 week
    when: always
    paths:
      - report-junit.xml
      - report.html
    expose_as: "rtpdump pytest results"
    reports:
      junit:
@@ -1306,11 +1307,8 @@ ivas-conformance:

    # Reference creation
    - python scripts/prepare_combined_format_inputs.py
    - $TEST_SET = "tests/codec_be_on_mr_nonselection", "tests/renderer/test_renderer.py", "tests/split_rendering/test_split_rendering.py"
    - python -m pytest $TEST_SET -v -n auto --update_ref 1 --create_ref --keep_files

    # Output creation
    - python -m pytest $TEST_SET -v -n auto --keep_files --create_cut --html=report_cmd.html --self-contained-html
    - $TEST_SET = "tests/codec_be_on_mr_nonselection", "tests/renderer_short/test_renderer.py", "tests/split_rendering/test_split_rendering.py"
    - python -m pytest -q $TEST_SET -v -n auto --update_ref 1 --create_ref --keep_files --html=report_cmd.html --self-contained-html
    - python scripts/parse_commands.py report_cmd.html Readme_IVAS.txt

    # Copy input data and output ref data
@@ -1324,7 +1322,7 @@ ivas-conformance:
    - mkdir testvec
    - mkdir testvec/binauralRenderer_interface
    - mkdir testvec/testv
    - mkdir testvec/testv/renderer
    - mkdir testvec/testv/renderer_short
    - mkdir testvec/testv/split_rendering
    - mkdir testvec/bin
    - cp    -force -ErrorAction Ignore scripts/testv/* testvec/testv
@@ -1334,9 +1332,8 @@ ivas-conformance:
    - cp -r -force -ErrorAction Ignore scripts/trajectories testvec
    - cp -r -force -ErrorAction Ignore scripts/binauralRenderer_interface/binaural_renderers_hrtf_data testvec/binauralRenderer_interface
    - cp -r -force -ErrorAction Ignore tests/ref testvec/testv/ref
    - cp -r -force -ErrorAction Ignore tests/dut/* testvec/testv/ref
    - cp -r -force -ErrorAction Ignore tests/renderer/cut testvec/testv/renderer/ref
    - cp -r -force -ErrorAction Ignore tests/split_rendering/cut testvec/testv/split_rendering/ref
    - cp -r -force -ErrorAction Ignore tests/renderer_short/ref testvec/testv/renderer_short/ref
    - cp -r -force -ErrorAction Ignore tests/split_rendering/ref testvec/testv/split_rendering/ref
    - cp -r -force -ErrorAction Ignore tests/split_rendering/renderer_configs testvec/testv/split_rendering/renderer_configs
    - cp -r -force -ErrorAction Ignore tests/split_rendering/error_patterns testvec/testv/split_rendering/error_patterns

@@ -1406,11 +1403,8 @@ ivas-conformance-linux:

    # Reference creation
    - python3 scripts/prepare_combined_format_inputs.py
    - TEST_SET="tests/codec_be_on_mr_nonselection tests/renderer/test_renderer.py tests/split_rendering/test_split_rendering.py"
    - python3 -m pytest -q $TEST_SET -v -n auto --update_ref 1 --create_ref --keep_files

    # Output creation
    - python3 -m pytest -q $TEST_SET -v -n auto --keep_files --create_cut --html=report_cmd.html --self-contained-html
    - TEST_SET="tests/codec_be_on_mr_nonselection tests/renderer_short/test_renderer.py tests/split_rendering/test_split_rendering.py"
    - python3 -m pytest -q $TEST_SET -v -n auto --update_ref 1 --create_ref --keep_files --html=report_cmd.html --self-contained-html
    - python3 scripts/parse_commands.py report_cmd.html Readme_IVAS.txt

    # Copy input data and output ref data
@@ -1418,7 +1412,7 @@ ivas-conformance-linux:
    - mkdir testvec
    - mkdir testvec/binauralRenderer_interface
    - mkdir testvec/testv
    - mkdir testvec/testv/renderer
    - mkdir testvec/testv/renderer_short
    - mkdir testvec/testv/split_rendering
    - mkdir testvec/bin
    - cp -r scripts/testv/* testvec/testv
@@ -1428,9 +1422,8 @@ ivas-conformance-linux:
    - cp -r scripts/trajectories testvec
    - cp -r scripts/binauralRenderer_interface/binaural_renderers_hrtf_data testvec/binauralRenderer_interface
    - cp -r tests/ref testvec/testv/ref
    - cp -r tests/dut/* testvec/testv/ref
    - cp -r tests/renderer/cut testvec/testv/renderer/ref
    - cp -r tests/split_rendering/cut testvec/testv/split_rendering/ref
    - cp -r tests/renderer_short/ref testvec/testv/renderer_short/ref
    - cp -r tests/split_rendering/ref testvec/testv/split_rendering/ref
    - cp -r tests/split_rendering/renderer_configs testvec/testv/split_rendering/renderer_configs
    - cp -r tests/split_rendering/error_patterns testvec/testv/split_rendering/error_patterns

@@ -1495,6 +1488,8 @@ test-long-self-test:
  stage: compare
  resource_group: ivas-long-self-test-resource
  timeout: "50 minutes"
  tags:
    - ivas-linux-fast
  rules:
    - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'test-long-self-test'
  allow_failure:
@@ -2217,7 +2212,7 @@ sanitizer-test-osba-planar-hoa3-ism4:
  rules:
    - if: $COVERAGE_TEST
    - if: $MANUAL_PIPELINE_TYPE == "coverage"
  timeout: 3 hours
  timeout: 6 hours
  before_script:
    - !reference [.job-linux, before_script]
    - set -e
@@ -2241,7 +2236,9 @@ sanitizer-test-osba-planar-hoa3-ism4:
    expire_in: 1 week

coverage-merge:
  extends: .rules-main-scheduled
  extends:
    - .rules-main-scheduled
    - .test-job-linux-needs-testv-dir
  tags:
    - ivas-linux-fast
  stage: test
+4 −1
Original line number Diff line number Diff line
@@ -72,6 +72,9 @@ LDLIBS += -lm

# Clang sanitizer compiler options
CCCLANG = clang
ifeq "$(CLANG)" "0"
CC       = $(CCCLANG)
endif
ifeq "$(CLANG)" "1"
CC       = $(CCCLANG)
CFLAGS  += -fsanitize=memory
@@ -168,7 +171,7 @@ DEPS = $(addprefix $(OBJDIR)/,$(SRCS_LIBCOM:.c=.P) $(SRCS_LIBDEBUG:.c=.P) $(SRCS

.PHONY: all clean

all: $(CLI_APIENC) $(CLI_APIENC_FMTSW) $(CLI_APIDEC) $(CLI_APIREND) $(CLI_APIPOSTREND)
all: $(CLI_APIENC) $(CLI_APIENC_FMTSW) $(CLI_APIDEC) $(CLI_APIREND) $(CLI_APIPOSTREND) $(CLI_AMBICONVERT)

$(OBJDIR):
	$(QUIET)mkdir -p $(OBJDIR)
+1 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@
    <ClCompile Include="..\lib_lc3plus\ari_codec.c" />
    <ClCompile Include="..\lib_lc3plus\attack_detector.c" />
    <ClCompile Include="..\lib_lc3plus\constants.c" />
    <ClCompile Include="..\lib_lc3plus\com_entropy.c" />
    <ClCompile Include="..\lib_lc3plus\cutoff_bandwidth.c" />
    <ClCompile Include="..\lib_lc3plus\dct4.c" />
    <ClCompile Include="..\lib_lc3plus\dec_entropy.c" />
+2 −2
Original line number Diff line number Diff line
@@ -78,8 +78,8 @@ int main( int argc, char *argv[] )
    if ( argc != 5 )
    {
        printf( "----------------------------------------------------------------------------------\n" );
        printf( "Usage:\n" );
        printf( "./ambi_converter input_file output_file input_convention output_convention\n" );
        printf( "\n" );
        printf( "Usage: ambi_converter input_file output_file input_convention output_convention\n" );
        printf( "\n" );
        printf( "input_convention and output convention must be an integer number in [0,5]\n" );
        printf( "the following conventions are supported:\n" );
+199 −8
Original line number Diff line number Diff line
@@ -63,6 +63,9 @@
#include "flp_debug.h"
#endif

#ifdef FIXED_RTP_SEQUENCE_NUM
#define RANDOM_INITSEED_DEC ( 0xFEEDFADE )
#endif

#define WMC_TOOL_SKIP

@@ -135,6 +138,7 @@ typedef struct
#ifdef IVAS_RTPDUMP
    bool applyPiData;
    char *piOutputFilename;
    bool rtpOutSR;
#endif
#ifdef DEBUGGING
#ifdef DEBUG_FOA_AGC
@@ -479,6 +483,9 @@ int main(
    asked_frame_size = arg.renderFramesize;
    uint16_t aeID = arg.aeSequence.count > 0 ? arg.aeSequence.pID[0] : 65535;

#ifdef IVAS_RTPDUMP
    arg.enableHeadRotation = arg.enableHeadRotation || arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM;
#endif
    if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.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 )
@@ -517,7 +524,9 @@ int main(
            goto cleanup;
        }

#ifndef IVAS_RTPDUMP
        arg.enableHeadRotation = true;
#endif
    }

    /*------------------------------------------------------------------------------------------*
@@ -1018,6 +1027,7 @@ static bool parseCmdlIVAS_dec(
#ifdef IVAS_RTPDUMP
    arg->applyPiData = false;
    arg->piOutputFilename = NULL;
    arg->rtpOutSR = false;
#endif

#ifdef SUPPORT_JBM_TRACEFILE
@@ -1123,6 +1133,11 @@ static bool parseCmdlIVAS_dec(
            arg->applyPiData = true;
            i++;
        }
        else if ( strcmp( argv_to_upper, "-RTPOUTSR" ) == 0 )
        {
            arg->rtpOutSR = true;
            i++;
        }
#endif
#ifdef SUPPORT_JBM_TRACEFILE
        else if ( strcmp( argv_to_upper, "-TRACEFILE" ) == 0 )
@@ -1716,6 +1731,7 @@ static void usage_dec( void )
    fprintf( stdout, "                      Reading RFC4867 AMR/AMR-WB RTP payload format is not supported.\n" );
    fprintf( stdout, "-PiDataFile PF        Log the timestampped PI data.\n" );
    fprintf( stdout, "-ApplyPiData          Apply the PI data found in the rtp packet.\n" );
    fprintf( stdout, "-rtpOutSR           : Split Rendering bitstream RTPDump output \n" );
#else
    fprintf( stdout, "-VOIP_hf_only=1     : VoIP mode: EVS RTP Payload Format hf_only=1 in rtpdump\n" );
    fprintf( stdout, "                      The decoder may read rtpdump files containing TS26.445 Annex A.2.2\n" );
@@ -1824,6 +1840,9 @@ static ivas_error initOnFirstGoodFrame(
    IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS], /* o  : */
    int16_t *pNumOutChannels,                        /* o  : */
    uint16_t *pNumObj,                               /* o  : */
#ifdef IVAS_RTPDUMP
    IVAS_RTP *srRtp, /* o  : */
#endif
    SplitFileReadWrite **splitRendWriter )
{
    int16_t isSplitRend, isSplitCoded;
@@ -1875,6 +1894,14 @@ static ivas_error initOnFirstGoodFrame(
        ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrection;
        int16_t splitRendIsarFrameSizeMs;
        int16_t lc3plusHighRes;
#ifdef FIXED_RTP_SEQUENCE_NUM
        /* Ideally ssrc is negotiated via SDP and sequence number is radomized but we
        use fixed seed for random num generator for regression based tests. Any realtime
        application should implement this initialization seperately */
        srand( RANDOM_INITSEED_DEC );
        uint32_t ssrc = ( (uint32_t) rand() & 0x0000FFFF ) | ( (uint32_t) rand() << 16 );
        uint16_t seqNumInitVal = (uint16_t) ( rand() & 0xFFFF );
#endif

        if ( ( error = IVAS_DEC_GetDelay( hIvasDec, delayNumSamples_temp, &delayTimeScale_temp ) ) != IVAS_ERR_OK )
        {
@@ -1888,7 +1915,45 @@ static ivas_error initOnFirstGoodFrame(
            return error;
        }

#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 */
#ifdef FIXED_RTP_SEQUENCE_NUM
            if ( ( error = IVAS_RTP_WRITER_Init( srRtp, arg.outputWavFilename, 1000 / ( IVAS_NUM_FRAMES_PER_SEC * splitRendCodecFrameSizeMs ), ssrc, seqNumInitVal ) ) != IVAS_ERR_OK )
#else
            if ( ( error = IVAS_RTP_WRITER_Init( srRtp, arg.outputWavFilename, 1000 / ( IVAS_NUM_FRAMES_PER_SEC * splitRendCodecFrameSizeMs ) ) ) != IVAS_ERR_OK )
#endif
            {
                fprintf( stderr, "\nError: Can't open SR output bitstream file for RTP output %s \n\n", arg.outputWavFilename );
                return error;
            }
        }
        else if ( isSplitCoded )
#else
        if ( isSplitCoded )
#endif
        {
            if ( ( error = split_rend_writer_open( splitRendWriter, arg.outputWavFilename, delayNumSamples_temp[0], delayTimeScale_temp, splitRendCodec, poseCorrection, splitRendCodecFrameSizeMs, splitRendIsarFrameSizeMs, arg.output_Fs, lc3plusHighRes ) ) != IVAS_ERR_OK )
            {
@@ -1922,6 +1987,74 @@ static ivas_error initOnFirstGoodFrame(
        }
    }

#ifdef IVAS_RTPDUMP
    if ( !arg.rtpOutSR )
    {
        int16_t pcmFrameSize;
        if ( ( error = IVAS_DEC_GetOutputBufferSize( hIvasDec, &pcmFrameSize ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nError in IVAS_DEC_GetOutputBufferSize, error code: %d\n", error );
            return error;
        }

        /* Write zeros to the output audio buffer */
        int16_t *zeroBuf = calloc( pcmFrameSize, sizeof( int16_t ) );
        if ( zeroBuf == NULL )
        {
            fprintf( stdout, "Error: Unable to allocate memory for output buffer.\n" );
            return IVAS_ERR_FAILED_ALLOC;
        }

        for ( int16_t i = 0; i < numInitialBadFrames; ++i )
        {
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
            if ( isSplitRend )
#else
            if ( *splitRendWriter != NULL )
#endif
            {
                ISAR_SPLIT_REND_BITS_DATA splitRendBitsZero;
                splitRendBitsZero.bits_buf = NULL;
                splitRendBitsZero.bits_read = 0;
                splitRendBitsZero.bits_written = 0;
                splitRendBitsZero.buf_len = 0;
                splitRendBitsZero.codec = ISAR_SPLIT_REND_CODEC_DEFAULT;
                splitRendBitsZero.pose_correction = ISAR_SPLIT_REND_POSE_CORRECTION_MODE_NONE;
                splitRendBitsZero.codec_frame_size_ms = 0;
                splitRendBitsZero.isar_frame_size_ms = 20;

                if ( split_rend_write_bitstream_to_file( *splitRendWriter, splitRendBitsZero.bits_buf, &splitRendBitsZero.bits_read, &splitRendBitsZero.bits_written ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nUnable to write to bitstream file!\n" );
                    return error;
                }
            }

#ifdef FIX_1119_SPLIT_RENDERING_VOIP
            if ( !isSplitCoded )
#else
            else
#endif
            {
                if ( *pRemainingDelayNumSamples < *numOutSamples )
                {
                    if ( ( error = AudioFileWriter_write( *ppAfWriter, zeroBuf, *numOutSamples * *pNumOutChannels - ( *pRemainingDelayNumSamples * *pNumOutChannels ) ) ) != IVAS_ERR_OK )
                    {
                        fprintf( stderr, "\nOutput audio file writer error\n" );
                        return error;
                    }
                    *pRemainingDelayNumSamples = 0;
                }
                else
                {
                    *pRemainingDelayNumSamples -= *numOutSamples;
                }
            }
        }

        free( zeroBuf );
    }
#else
    int16_t pcmFrameSize;
    if ( ( error = IVAS_DEC_GetOutputBufferSize( hIvasDec, &pcmFrameSize ) ) != IVAS_ERR_OK )
    {
@@ -1986,6 +2119,8 @@ static ivas_error initOnFirstGoodFrame(

    free( zeroBuf );

#endif

    /* Open other output files if EXT output config - now details about ISM or MASA are known */
    if ( arg.outputConfig == IVAS_AUDIO_CONFIG_EXTERNAL )
    {
@@ -2078,7 +2213,11 @@ static ivas_error initOnFirstGoodFrame(
        }
    }

#ifdef IVAS_RTPDUMP
    if ( arg.rtpOutSR || *splitRendWriter != NULL )
#else
    if ( *splitRendWriter != NULL )
#endif
    {
        if ( numOutSamples == NULL || vec_pos_len == NULL )
        {
@@ -2654,7 +2793,11 @@ static ivas_error decodeG192(
            /* Once good frame decoded, catch up */
            if ( decodedGoodFrame )
            {
#ifdef IVAS_RTPDUMP
                if ( ( error = initOnFirstGoodFrame( hIvasDec, arg, numInitialBadFrames, &nOutSamples, &vec_pos_len, delayNumSamples_orig, &delayNumSamples, &delayTimeScale, &bsFormat, &afWriter, &masaWriter, ismWriters, &nOutChannels, &numObj, NULL, &splitRendWriter ) ) != IVAS_ERR_OK )
#else
                if ( ( error = initOnFirstGoodFrame( hIvasDec, arg, numInitialBadFrames, &nOutSamples, &vec_pos_len, delayNumSamples_orig, &delayNumSamples, &delayTimeScale, &bsFormat, &afWriter, &masaWriter, ismWriters, &nOutChannels, &numObj, &splitRendWriter ) ) != IVAS_ERR_OK )
#endif
                {
                    goto cleanup;
                }
@@ -3021,7 +3164,11 @@ static ivas_error printBitstreamInfoVoip(
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP:
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF:
#ifdef IVAS_RTPDUMP
            if ( ( error = IVAS_RTP_READER_Init( &ivasRtp, arg.inputBitstreamFilename, arg.piOutputFilename ) ) != IVAS_ERR_OK )
#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;
@@ -3063,7 +3210,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
@@ -3176,8 +3327,9 @@ static ivas_error decodeVoIP(
#endif
#ifdef IVAS_RTPDUMP
    IVAS_RTP ivasRtp = { 0 };
    IVAS_RTP srRtp = { 0 };
    IVAS_RTP_SR_INFO srInfo = { true, false, 0, IVAS_SR_TRANSPORT_LCLD };
    int32_t initialTsOffsetSystemAndRTP = 0;
    uint32_t nProcPiData = 0;
#else
    FILE *f_rtpstream = NULL;
    EVS_RTPDUMP_DEPACKER rtpdumpDepacker;
@@ -3256,7 +3408,11 @@ static ivas_error decodeVoIP(
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP:
        case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF:
#ifdef IVAS_RTPDUMP
            if ( ( error = IVAS_RTP_READER_Init( &ivasRtp, arg.inputBitstreamFilename, arg.piOutputFilename ) ) != IVAS_ERR_OK )
#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;
@@ -3319,7 +3475,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 );
@@ -3524,7 +3684,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;
@@ -3576,19 +3740,19 @@ static ivas_error decodeVoIP(
                uint32_t piTs = systemTime_ms * 16 + initialTsOffsetSystemAndRTP;
                uint32_t numPiData = 0;

                while ( nProcPiData + numPiData < ivasRtp.nReadPiData &&
                        ivasRtp.piData[nProcPiData + numPiData].timestamp <= piTs )
                while ( ivasRtp.nProcPiData + numPiData < ivasRtp.nReadPiData &&
                        ivasRtp.piData[ivasRtp.nProcPiData + numPiData].timestamp <= piTs )
                {
                    numPiData++;
                }

                if ( ( error = IVAS_RTP_ApplyPiData( hIvasDec, &ivasRtp.piData[nProcPiData], numPiData ) ) != IVAS_ERR_OK )
                if ( ( error = IVAS_RTP_FeedPiDataToDecoder( hIvasDec, &ivasRtp.piData[ivasRtp.nProcPiData], numPiData ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nError in IVAS_DEC_VoIP_GetSamples: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                    goto cleanup;
                }

                nProcPiData += numPiData;
                ivasRtp.nProcPiData += numPiData;
            }
#endif
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
@@ -3732,7 +3896,11 @@ static ivas_error decodeVoIP(
#else
                if ( ( error = initOnFirstGoodFrame( hIvasDec, arg, numInitialBadFrames, &nOutSamples, NULL, delayNumSamples_orig, &delayNumSamples, &delayTimeScale,
#endif
#ifdef IVAS_RTPDUMP
                                                     &bsFormat, &afWriter, &masaWriter, ismWriters, &nOutChannels, &numObj, &srRtp, &splitRendWriter ) ) != IVAS_ERR_OK )
#else
                                                     &bsFormat, &afWriter, &masaWriter, ismWriters, &nOutChannels, &numObj, &splitRendWriter ) ) != IVAS_ERR_OK )
#endif
                {
                    fprintf( stderr, "Error in initOnFirstGoodFrame(): %s\n", IVAS_DEC_GetErrorMessage( error ) );
                    goto cleanup;
@@ -3745,7 +3913,11 @@ static ivas_error decodeVoIP(
        }

        /* Write current frame */
#ifdef IVAS_RTPDUMP
        if ( !srRtp.hPack && decodedGoodFrame )
#else
        if ( decodedGoodFrame )
#endif
        {
#ifdef FIX_1119_SPLIT_RENDERING_VOIP
            if ( isSplitRend )
@@ -3830,12 +4002,26 @@ static ivas_error decodeVoIP(
                        goto cleanup;
                    }
                }

                IVAS_RTP_WriteExtPiData( ivasRtp.f_piExtOut, ivasRtp.piData, ivasRtp.nReadPiData, numObj );
            }
        }
#ifdef IVAS_RTPDUMP
        IVAS_DEC_resetExternalOrientations( hIvasDec );
        else if ( decodedGoodFrame )
        {
            srInfo.bitrateKbps = splitRendBits->bits_written * 1000 / splitRendBits->codec_frame_size_ms;
            srInfo.codec = ( splitRendBits->codec == ISAR_SPLIT_REND_CODEC_LC3PLUS ) ? IVAS_SR_TRANSPORT_LC3PLUS : IVAS_SR_TRANSPORT_LCLD;
            if ( ( error = IVAS_RTP_WriteNextFrame( &srRtp, splitRendBits->bits_buf, &srInfo, (int16_t) splitRendBits->bits_written, false, false ) ) != IVAS_ERR_OK )
            {
                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


        vec_pos_update = ( vec_pos_update + 1 ) % vec_pos_len;
        if ( vec_pos_update == 0 )
        {
@@ -3933,6 +4119,8 @@ static ivas_error decodeVoIP(
                    goto cleanup;
                }
            }

            IVAS_RTP_WriteExtPiData( ivasRtp.f_piExtOut, ivasRtp.piData, ivasRtp.nReadPiData, numObj );
        }
    }

@@ -3986,6 +4174,8 @@ static ivas_error decodeVoIP(
        {
            fprintf( stdout, "\nOutput MASA metadata file:   %s\n", MasaFileWriter_getFilePath( masaWriter ) );
        }

        fprintf( stdout, "\nOutput PI data file:   %s\n", IVAS_RTP_GetExtPiFilePath( &ivasRtp ) );
    }

    /*------------------------------------------------------------------------------------------*
@@ -3997,6 +4187,7 @@ static ivas_error decodeVoIP(
cleanup:

#ifdef IVAS_RTPDUMP
    IVAS_RTP_Term( &srRtp );
    IVAS_RTP_Term( &ivasRtp );
#else
    EVS_RTPDUMP_DEPACKER_close( &rtpdumpDepacker );
Loading