Loading .gitignore +3 −3 Original line number Diff line number Diff line Loading @@ -52,9 +52,9 @@ scripts/testv/stvOMASA_*.csv scripts/testv/stvOMASA_2ISM_1MASA1TC48c.wav scripts/testv/stvOMASA_3ISM_1MASA1TC48c.wav # default reference binary name IVAS_cod_ref IVAS_dec_ref IVAS_rend_ref IVAS_cod_ref* IVAS_dec_ref* IVAS_rend_ref* # Python files that pop up when running scripts __pycache__/ Loading .gitlab-ci.yml +83 −39 Original line number Diff line number Diff line Loading @@ -12,6 +12,13 @@ variables: EXIT_CODE_FAIL: 1 PROCESSING_SCRIPTS_BIN_DIR: "/test-bin" TESTS_DIR_CODEC_BE_ON_MR: "tests/codec_be_on_mr_nonselection" MANUAL_PIPELINE_TYPE: description: "Type for the manual pipeline run. Use 'test-be-release' to run BE test against release codec." value: 'default' options: - 'default' - 'test-be-release' default: interruptible: true # Make all jobs by default interruptible Loading Loading @@ -68,12 +75,12 @@ stages: # needed when depth is lower than the number of commits in the branch - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME .mr-get-target-commit: &mr-get-target-commit # compare to last target branch commit before pipeline was created .mr-get-target-commit: &mr-get-target-commit # compare to last target branch commit before pipeline was created - target_commit=$(git log $CI_MERGE_REQUEST_TARGET_BRANCH_NAME -1 --oneline --before=${CI_PIPELINE_CREATED_AT} --format=%H) .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present - python3 -m pytest ci/test_vectors_available.py .merge-request-comparison-setup-codec: Loading Loading @@ -143,6 +150,8 @@ stages: when: never - if: $CI_PIPELINE_SOURCE == 'trigger' # Don't run triggered pipeline by default when: never - if: $MANUAL_PIPELINE_TYPE == 'test-be-release' # Skip all the normal jobs when testing manually against release codec when: never - when: on_success .rules-merge-request: Loading @@ -162,7 +171,6 @@ stages: rules: - if: $CI_PIPELINE_SOURCE == 'schedule' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # templates to define stages and platforms .test-job-linux: tags: Loading Loading @@ -202,7 +210,6 @@ stages: exit_codes: - 123 # --------------------------------------------------------------- # .pre jobs for setting up things # --------------------------------------------------------------- Loading @@ -225,8 +232,6 @@ uninterruptible: tags: - ivas-linux # --------------------------------------------------------------- # Validation jobs # --------------------------------------------------------------- Loading @@ -245,7 +250,6 @@ check-if-branch-is-up-to-date-with-main: - echo $commits_behind_count - if [ $commits_behind_count -eq 0 ]; then exit 0; else exit 1; fi; # --------------------------------------------------------------- # Build jobs # --------------------------------------------------------------- Loading Loading @@ -331,15 +335,20 @@ codec-smoke-test: - .rules-merge-request timeout: "10 minutes" stage: test needs: ["build-codec-linux-cmake"] needs: ["build-codec-linux-cmake", "build-codec-linux-make", "build-codec-instrumented-linux", "build-codec-sanitizers-linux"] script: - *print-common-info # LTV update needed as ltv ISM metadata files are used - *update-ltv-repo - bash ci/smoke_test.sh ### analyze for failures - if cat smoke_test_output.txt | grep -c "failed"; then echo "Smoke test without PLC failed"; exit 1; fi - if cat smoke_test_output_plc.txt | grep -c "failed"; then echo "Smoke test with PLC failed"; exit 1; fi - if cat smoke_test_output_jbm_noEXT.txt | grep -c "failed"; then echo "Smoke test JBM part failed"; exit 1; fi - if cat smoke_test_output_hrtf.txt | grep -c "failed"; then echo "Smoke test with external hrtf files failed"; exit 1; fi - if ! [ -s smoke_test_output.txt ] || ! [ -s smoke_test_output_plc.txt ] || ! [ -s smoke_test_output_jbm_noEXT.txt ] || ! [ -s smoke_test_output_hrtf.txt ]; then echo "Error in smoke test"; exit 1; fi - ret_val=0 - if cat smoke_test_output.txt | grep -c "failed"; then echo "Smoke test without PLC failed"; ret_val=1; fi - if cat smoke_test_output_plc.txt | grep -c "failed"; then echo "Smoke test with PLC failed"; ret_val=1; fi - if cat smoke_test_output_jbm_noEXT.txt | grep -c "failed"; then echo "Smoke test JBM part failed"; ret_val=1; fi - if cat smoke_test_output_hrtf.txt | grep -c "failed"; then echo "Smoke test with external hrtf files failed"; ret_val=1; fi - exit $ret_val artifacts: name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--stage-$CI_JOB_STAGE--results" expire_in: 1 week Loading Loading @@ -526,8 +535,7 @@ renderer-pytest-on-merge-request: # write to temporary file as workaround for failures observed with piping echo - echo $CI_MERGE_REQUEST_TITLE > tmp.txt - non_be_flag=$(grep -c --ignore-case "\[rend\(erer\)*[ -]*non[ -]*be\]" tmp.txt) || true # TODO: needs splitting the test between reference and cut generation #- ref_using_main=$(echo $CI_MERGE_REQUEST_TITLE | grep -c --ignore-case "\[ref[ -]*using[ -]*main\]") || true - ref_using_main=$(grep -c --ignore-case "\[ref[ -]*using[ -]*main\]" tmp.txt) || true # store the current commit hash - source_branch_commit_sha=$(git rev-parse HEAD) Loading @@ -545,6 +553,9 @@ renderer-pytest-on-merge-request: - make clean - make -j IVAS_rend ### Run test using scripts and input from main - if [ $ref_using_main == 1 ]; then git checkout $target_commit; fi # run test - exit_code=0 - python3 -m pytest -q --log-level ERROR -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer/test_renderer_be_comparison.py || exit_code=$? Loading Loading @@ -605,8 +616,7 @@ split-rendering-pytest-on-merge-request: # write to temporary file as workaround for failures observed with piping echo - echo $CI_MERGE_REQUEST_TITLE > tmp.txt - non_be_flag=$(grep -c --ignore-case "\[split*[ -]*non[ -]*be\]" tmp.txt) || true # TODO: needs splitting the test between reference and cut generation #- ref_using_main=$(echo $CI_MERGE_REQUEST_TITLE | grep -c --ignore-case "\[ref[ -]*using[ -]*main\]") || true - ref_using_main=$(grep -c --ignore-case "\[ref[ -]*using[ -]*main\]" tmp.txt) || true # store the current commit hash - source_branch_commit_sha=$(git rev-parse HEAD) Loading @@ -629,6 +639,9 @@ split-rendering-pytest-on-merge-request: - *enable-split-rendering - make -j INCLUDE_SPLIT=1 ### Run test using scripts and input from main - if [ $ref_using_main == 1 ]; then git checkout $target_commit; fi # run test - exit_code=0 - python3 -m pytest -q --log-level ERROR -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/split_rendering/test_split_rendering_be_comparison.py || exit_code=$? Loading Loading @@ -807,7 +820,7 @@ clang-format-check: - tmp-formatting-fix/ when: on_failure name: "$ARTIFACT_BASE_NAME" expose_as: 'formatting patch' expose_as: "formatting patch" # check for crashes if first received frame on decoder side is an SID check-first-frame-is-sid: Loading Loading @@ -898,7 +911,6 @@ lc3plus-ensure-no-code-changes: - modified_files=$(git status -s) - if [[ $modified_files ]]; then printf 'LC3plus codebase was modified!\n\n'"$modified_files"'\n\n'; exit $EXIT_CODE_FAIL; fi # --------------------------------------------------------------- # Test jobs for main branch # --------------------------------------------------------------- Loading Loading @@ -1036,6 +1048,40 @@ codec-comparison-on-main-push: reports: junit: report-junit.xml # --------------------------------------------------------------- # Manual jobs # --------------------------------------------------------------- test-be-to-release: stage: test tags: - ivas-windows resource_group: ivas-be-to-release-test-resource timeout: "20 minutes" rules: - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'test-be-release' script: - echo "$CI_COMMIT_BRANCH" - MSBuild.exe .\Workspace_msvc\Workspace_msvc.sln /property:Configuration=Debug /p:Platform=win32 /m | tee -variable winoutdata - $winoutdata | Out-File $BUILD_OUTPUT -Encoding Utf8 - ("& python ci/check_for_warnings.py '$BUILD_OUTPUT'") | Invoke-Expression - ("exit $LASTEXITCODE") | Invoke-Expression # path to release candidate refs defined in config.toml - echo "Placeholder for BE test to release script" - mkdir logs artifacts: name: "test-be-to-release--sha-$CI_COMMIT_SHORT_SHA--results" when: always expire_in: 1 week paths: - logs/ expose_as: "test-be-to-release results" # --------------------------------------------------------------- # Scheduled jobs on main # --------------------------------------------------------------- Loading @@ -1062,7 +1108,6 @@ codec-comparison-on-main-push: extends: - .sanitizer-test-template sanitizer-test-mono: extends: .sanitizer-test-schedule-A rules: Loading Loading @@ -1277,7 +1322,6 @@ sanitizer-test-ism+4: - *update-ltv-repo - python3 ci/run_scheduled_sanitizer_test.py ISM+4 $OUT_FORMATS_CHANNEL_BASED $OUT_FORMATS_SCENE_BASED $OUT_FORMATS_BINAURAL EXT --tests $SANITIZER_TESTS # GCOV/LCOV coverage analysis of self_test suite coverage-test-on-main-scheduled: extends: Loading @@ -1292,6 +1336,7 @@ coverage-test-on-main-scheduled: timeout: 2 hours script: - *print-common-info - *update-ltv-repo - make GCOV=1 -j - cp IVAS_rend IVAS_rend_ref # Copy exec to be able to run renderer script - python3 tests/create_short_testvectors.py Loading @@ -1312,13 +1357,12 @@ coverage-test-on-main-scheduled: - coverage.info - coverage # --------------------------------------------------------------- # Complexity measurement jobs # --------------------------------------------------------------- .complexity-measurements-setup: &complexity-measurements-setup # create necessary environment .complexity-measurements-setup: &complexity-measurements-setup # create necessary environment - mkdir -p wmops/logs - job_id=$(python3 ci/get_id_of_last_job_occurence.py $CI_COMMIT_REF_NAME $CI_JOB_NAME) Loading @@ -1333,8 +1377,8 @@ coverage-test-on-main-scheduled: - rm artifacts.zip - rm -rf $public_dir .complexity-measurements-prepare-artifacts: &complexity-measurements-prepare-artifacts # prepare artifacts -> move to public directory .complexity-measurements-prepare-artifacts: &complexity-measurements-prepare-artifacts # prepare artifacts -> move to public directory - public_dir="$CI_JOB_NAME-public" - mkdir $public_dir - mv -f wmops/log_*_all.txt wmops/*.js ${public_dir}/ Loading apps/decoder.c +787 −1001 File changed.Preview size limit exceeded, changes collapsed. Show changes apps/renderer.c +120 −78 Original line number Diff line number Diff line Loading @@ -777,7 +777,7 @@ int main( int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; IVAS_VECTOR3 Pos[RENDERER_HEAD_POSITIONS_PER_FRAME]; bool splitBinNeedsNewFrame = true; #ifdef WMOPS reset_wmops(); Loading Loading @@ -996,7 +996,7 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT } #endif const int16_t frameSize_smpls = (int16_t) ( 20 * args.sampleRate / 1000 ); const int16_t frameSize_smpls = (int16_t) ( ( args.framing_5ms ? 5 : 20 ) * args.sampleRate / 1000 ); IVAS_REND_InputId mcIds[RENDERER_MAX_MC_INPUTS] = { 0 }; IVAS_REND_InputId ismIds[RENDERER_MAX_ISM_INPUTS] = { 0 }; Loading @@ -1006,7 +1006,8 @@ int main( IVAS_REND_InputId splitBinIds[RENDERER_MAX_BIN_INPUTS] = { 0 }; #endif if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain, ( args.framing_5ms ) ? 1 : 4 ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error opening renderer handle: %s\n", ivas_error_to_string( error ) ); exit( -1 ); Loading Loading @@ -1408,6 +1409,9 @@ int main( bitsBuffer.config.bitsRead = 0; bitsBuffer.config.bitsWritten = 0; bitsBuffer.config.bufLenInBytes = bitsBufferSize; bitsBuffer.config.codec = IVAS_SPLIT_REND_CODEC_DEFAULT; bitsBuffer.config.poseCorrection = IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE; bitsBuffer.config.codec_frame_size_ms = 20; #else inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); outInt16Buffer = malloc( outBufferSize * sizeof( int16_t ) ); Loading Loading @@ -1437,19 +1441,23 @@ int main( fprintf( stdout, "\n\n-- Start the renderer (quiet mode) --\n\n" ); } ObjectPositionBuffer mtdBuffer; while ( 1 ) { int16_t num_in_channels; num_in_channels = inBuffer.config.numChannels; const bool isCurrentFrameMultipleOf20ms = !args.framing_5ms || frame % 4 == 0; #ifdef SPLIT_REND_WITH_HEAD_ROT numSamplesRead = 0; if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) ) if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) && splitBinNeedsNewFrame ) { ivas_error error_tmp; numSamplesRead = (int16_t) inBufferSize; error_tmp = split_rend_read_bits_from_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten, &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection ); &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection, &bitsBuffer.config.codec_frame_size_ms ); if ( error_tmp != IVAS_ERR_OK ) { if ( error_tmp == IVAS_ERR_END_OF_FILE ) Loading Loading @@ -1477,7 +1485,7 @@ int main( } #endif if ( numSamplesRead == 0 ) if ( numSamplesRead == 0 && splitBinNeedsNewFrame ) { /* end of input data */ break; Loading @@ -1491,7 +1499,11 @@ int main( #endif ); ObjectPositionBuffer mtdBuffer; int16_t num_subframes, sf_idx; num_subframes = ( args.framing_5ms ) ? 1 : IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; if ( isCurrentFrameMultipleOf20ms ) { IsmPositionProvider_getNextFrame( positionProvider, &mtdBuffer ); if ( referenceVectorReader != NULL ) Loading @@ -1511,63 +1523,62 @@ int main( /* Read from reference rotation trajectory file if specified */ if ( referenceRotReader != NULL ) { IVAS_QUATERNION quaternion; if ( ( error = HeadRotationFileReading( referenceRotReader, &quaternion, NULL ) ) != IVAS_ERR_OK ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { IVAS_QUATERNION quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; if ( ( error = HeadRotationFileReading( referenceRotReader, &quaternions[sf_idx], NULL ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in Head Rotation File Reading: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_SetReferenceRotation( hIvasRend, quaternion ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_SetReferenceRotation( hIvasRend, quaternions[sf_idx] ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Reference Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } } /* Read from head rotation trajectory file if specified */ if ( headRotReader != NULL ) { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { if ( ( error = HeadRotationFileReading( headRotReader, &quatBuffer[i], &Pos[i] ) ) != IVAS_ERR_OK ) IVAS_QUATERNION headRot; IVAS_VECTOR3 Pos; if ( ( error = HeadRotationFileReading( headRotReader, &headRot, &Pos ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in Head Rotation File Reading: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } if ( ( error = IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer, Pos if ( ( error = IVAS_REND_SetHeadRotation( hIvasRend, headRot, Pos #ifdef SPLIT_REND_WITH_HEAD_ROT , DEFAULT_AXIS #endif ) ) != IVAS_ERR_OK ) , sf_idx ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } else { error = IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL #ifdef SPLIT_REND_WITH_HEAD_ROT , DEFAULT_AXIS #endif ); if ( error != IVAS_ERR_OK && error != IVAS_ERR_INVALID_OUTPUT_FORMAT ) if ( ( error = IVAS_REND_DisableHeadRotation( hIvasRend ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); fprintf( stderr, "Error disabling head rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } #ifdef SPLIT_REND_WITH_HEAD_ROT /* Read from split renderer bfi file if specified */ if ( splitRendBFIReader != NULL ) if ( splitRendBFIReader != NULL && splitBinNeedsNewFrame ) { int16_t bfi; SplitRendBFIFileReading( splitRendBFIReader, &bfi ); Loading @@ -1578,13 +1589,12 @@ int main( /* Read from external orientation file if specified */ if ( externalOrientationFileReader != NULL ) { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; int8_t enableHeadRotation[RENDERER_HEAD_POSITIONS_PER_FRAME]; int8_t enableExternalOrientation[RENDERER_HEAD_POSITIONS_PER_FRAME]; IVAS_QUATERNION quatBuffer[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableHeadRotation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableExternalOrientation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableRotationInterpolation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int16_t numFramesToTargetOrientation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { if ( ( error = ExternalOrientationFileReading( externalOrientationFileReader, &quatBuffer[i], &enableHeadRotation[i], &enableExternalOrientation[i], &enableRotationInterpolation[i], &numFramesToTargetOrientation[i] ) ) != IVAS_ERR_OK ) { Loading @@ -1592,13 +1602,16 @@ int main( exit( -1 ); } } if ( ( error = IVAS_REND_SetExternalOrientation( hIvasRend, quatBuffer, enableHeadRotation, enableExternalOrientation, enableRotationInterpolation, numFramesToTargetOrientation ) ) != IVAS_ERR_OK ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { if ( ( error = IVAS_REND_SetExternalOrientation( hIvasRend, &quatBuffer[sf_idx], enableHeadRotation[sf_idx], enableExternalOrientation[sf_idx], enableRotationInterpolation[sf_idx], numFramesToTargetOrientation[sf_idx], sf_idx ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting External Orientation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } /* Combine external orientations and head rotation */ Loading Loading @@ -1710,6 +1723,8 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT for ( i = 0; i < args.inConfig.numBinBuses; ++i ) { if ( splitBinNeedsNewFrame ) { if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, splitBinIds[i], &numChannels ) ) != IVAS_ERR_OK ) { Loading @@ -1723,15 +1738,38 @@ int main( fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_FeedSplitBinauralBitstream( hIvasRend, splitBinIds[i], &bitsBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } #endif if ( ( error = IVAS_REND_GetSamples( hIvasRend, outBuffer #ifdef SPLIT_REND_WITH_HEAD_ROT , &bitsBuffer #if defined SPLIT_REND_WITH_HEAD_ROT if ( args.inConfig.numBinBuses != 0 ) { if ( ( error = IVAS_REND_GetSplitBinauralSamples( hIvasRend, outBuffer, &splitBinNeedsNewFrame ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } else if ( args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_SPLIT_CODED || args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) { if ( ( error = IVAS_REND_GetSplitBinauralBitstream( hIvasRend, outBuffer, &bitsBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } else { #endif ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_GetSamples( hIvasRend, outBuffer ) ) != IVAS_ERR_OK ) { #ifdef SPLIT_REND_WITH_HEAD_ROT fprintf( stderr, "Error %s\n", ivas_error_to_string( error ) ); Loading @@ -1740,6 +1778,9 @@ int main( #endif exit( -1 ); } #if defined SPLIT_REND_WITH_HEAD_ROT } #endif int16_t num_out_channels; num_out_channels = outBuffer.config.numChannels; Loading Loading @@ -1788,7 +1829,8 @@ int main( if ( ( hSplitRendFileReadWrite != NULL ) && is_split_pre_rend_mode( &args ) ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten, bitsBuffer.config.codec, bitsBuffer.config.poseCorrection ) != IVAS_ERR_OK ) bitsBuffer.config.codec, bitsBuffer.config.poseCorrection, bitsBuffer.config.codec_frame_size_ms ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); Loading Loading @@ -1929,6 +1971,7 @@ int main( } #endif if ( args.inConfig.numAudioObjects != 0 && ( args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL || args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) { fprintf( stdout, "\n\nMetadata delayed %d subframes\n\n", (int16_t) round( args.syncMdDelay / ( 1000 / IVAS_NUM_FRAMES_PER_SEC / IVAS_MAX_PARAM_SPATIAL_SUBFRAMES ) ) ); Loading Loading @@ -2695,7 +2738,6 @@ static void parseOption( args->directivityPatternId[i] = (int16_t) strtol( optionValues[i], NULL, 10 ); } break; case CmdLnOptionId_acousticEnvironmentId: assert( numOptionValues == 1 ); args->acousticEnvironmentId = (int16_t) strtol( optionValues[0], NULL, 10 ); Loading ci/run_evs_be_test.py +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ def main(): result_dict = dict() # run first part in parallel with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor: with concurrent.futures.ThreadPoolExecutor() as executor: executor.map( run_file, README_FILES_PARALLEL, BIN_PATHS, [result_dict] * len(README_FILES_PARALLEL) ) Loading Loading
.gitignore +3 −3 Original line number Diff line number Diff line Loading @@ -52,9 +52,9 @@ scripts/testv/stvOMASA_*.csv scripts/testv/stvOMASA_2ISM_1MASA1TC48c.wav scripts/testv/stvOMASA_3ISM_1MASA1TC48c.wav # default reference binary name IVAS_cod_ref IVAS_dec_ref IVAS_rend_ref IVAS_cod_ref* IVAS_dec_ref* IVAS_rend_ref* # Python files that pop up when running scripts __pycache__/ Loading
.gitlab-ci.yml +83 −39 Original line number Diff line number Diff line Loading @@ -12,6 +12,13 @@ variables: EXIT_CODE_FAIL: 1 PROCESSING_SCRIPTS_BIN_DIR: "/test-bin" TESTS_DIR_CODEC_BE_ON_MR: "tests/codec_be_on_mr_nonselection" MANUAL_PIPELINE_TYPE: description: "Type for the manual pipeline run. Use 'test-be-release' to run BE test against release codec." value: 'default' options: - 'default' - 'test-be-release' default: interruptible: true # Make all jobs by default interruptible Loading Loading @@ -68,12 +75,12 @@ stages: # needed when depth is lower than the number of commits in the branch - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME .mr-get-target-commit: &mr-get-target-commit # compare to last target branch commit before pipeline was created .mr-get-target-commit: &mr-get-target-commit # compare to last target branch commit before pipeline was created - target_commit=$(git log $CI_MERGE_REQUEST_TARGET_BRANCH_NAME -1 --oneline --before=${CI_PIPELINE_CREATED_AT} --format=%H) .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present - python3 -m pytest ci/test_vectors_available.py .merge-request-comparison-setup-codec: Loading Loading @@ -143,6 +150,8 @@ stages: when: never - if: $CI_PIPELINE_SOURCE == 'trigger' # Don't run triggered pipeline by default when: never - if: $MANUAL_PIPELINE_TYPE == 'test-be-release' # Skip all the normal jobs when testing manually against release codec when: never - when: on_success .rules-merge-request: Loading @@ -162,7 +171,6 @@ stages: rules: - if: $CI_PIPELINE_SOURCE == 'schedule' && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # templates to define stages and platforms .test-job-linux: tags: Loading Loading @@ -202,7 +210,6 @@ stages: exit_codes: - 123 # --------------------------------------------------------------- # .pre jobs for setting up things # --------------------------------------------------------------- Loading @@ -225,8 +232,6 @@ uninterruptible: tags: - ivas-linux # --------------------------------------------------------------- # Validation jobs # --------------------------------------------------------------- Loading @@ -245,7 +250,6 @@ check-if-branch-is-up-to-date-with-main: - echo $commits_behind_count - if [ $commits_behind_count -eq 0 ]; then exit 0; else exit 1; fi; # --------------------------------------------------------------- # Build jobs # --------------------------------------------------------------- Loading Loading @@ -331,15 +335,20 @@ codec-smoke-test: - .rules-merge-request timeout: "10 minutes" stage: test needs: ["build-codec-linux-cmake"] needs: ["build-codec-linux-cmake", "build-codec-linux-make", "build-codec-instrumented-linux", "build-codec-sanitizers-linux"] script: - *print-common-info # LTV update needed as ltv ISM metadata files are used - *update-ltv-repo - bash ci/smoke_test.sh ### analyze for failures - if cat smoke_test_output.txt | grep -c "failed"; then echo "Smoke test without PLC failed"; exit 1; fi - if cat smoke_test_output_plc.txt | grep -c "failed"; then echo "Smoke test with PLC failed"; exit 1; fi - if cat smoke_test_output_jbm_noEXT.txt | grep -c "failed"; then echo "Smoke test JBM part failed"; exit 1; fi - if cat smoke_test_output_hrtf.txt | grep -c "failed"; then echo "Smoke test with external hrtf files failed"; exit 1; fi - if ! [ -s smoke_test_output.txt ] || ! [ -s smoke_test_output_plc.txt ] || ! [ -s smoke_test_output_jbm_noEXT.txt ] || ! [ -s smoke_test_output_hrtf.txt ]; then echo "Error in smoke test"; exit 1; fi - ret_val=0 - if cat smoke_test_output.txt | grep -c "failed"; then echo "Smoke test without PLC failed"; ret_val=1; fi - if cat smoke_test_output_plc.txt | grep -c "failed"; then echo "Smoke test with PLC failed"; ret_val=1; fi - if cat smoke_test_output_jbm_noEXT.txt | grep -c "failed"; then echo "Smoke test JBM part failed"; ret_val=1; fi - if cat smoke_test_output_hrtf.txt | grep -c "failed"; then echo "Smoke test with external hrtf files failed"; ret_val=1; fi - exit $ret_val artifacts: name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--stage-$CI_JOB_STAGE--results" expire_in: 1 week Loading Loading @@ -526,8 +535,7 @@ renderer-pytest-on-merge-request: # write to temporary file as workaround for failures observed with piping echo - echo $CI_MERGE_REQUEST_TITLE > tmp.txt - non_be_flag=$(grep -c --ignore-case "\[rend\(erer\)*[ -]*non[ -]*be\]" tmp.txt) || true # TODO: needs splitting the test between reference and cut generation #- ref_using_main=$(echo $CI_MERGE_REQUEST_TITLE | grep -c --ignore-case "\[ref[ -]*using[ -]*main\]") || true - ref_using_main=$(grep -c --ignore-case "\[ref[ -]*using[ -]*main\]" tmp.txt) || true # store the current commit hash - source_branch_commit_sha=$(git rev-parse HEAD) Loading @@ -545,6 +553,9 @@ renderer-pytest-on-merge-request: - make clean - make -j IVAS_rend ### Run test using scripts and input from main - if [ $ref_using_main == 1 ]; then git checkout $target_commit; fi # run test - exit_code=0 - python3 -m pytest -q --log-level ERROR -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer/test_renderer_be_comparison.py || exit_code=$? Loading Loading @@ -605,8 +616,7 @@ split-rendering-pytest-on-merge-request: # write to temporary file as workaround for failures observed with piping echo - echo $CI_MERGE_REQUEST_TITLE > tmp.txt - non_be_flag=$(grep -c --ignore-case "\[split*[ -]*non[ -]*be\]" tmp.txt) || true # TODO: needs splitting the test between reference and cut generation #- ref_using_main=$(echo $CI_MERGE_REQUEST_TITLE | grep -c --ignore-case "\[ref[ -]*using[ -]*main\]") || true - ref_using_main=$(grep -c --ignore-case "\[ref[ -]*using[ -]*main\]" tmp.txt) || true # store the current commit hash - source_branch_commit_sha=$(git rev-parse HEAD) Loading @@ -629,6 +639,9 @@ split-rendering-pytest-on-merge-request: - *enable-split-rendering - make -j INCLUDE_SPLIT=1 ### Run test using scripts and input from main - if [ $ref_using_main == 1 ]; then git checkout $target_commit; fi # run test - exit_code=0 - python3 -m pytest -q --log-level ERROR -n auto -rA --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/split_rendering/test_split_rendering_be_comparison.py || exit_code=$? Loading Loading @@ -807,7 +820,7 @@ clang-format-check: - tmp-formatting-fix/ when: on_failure name: "$ARTIFACT_BASE_NAME" expose_as: 'formatting patch' expose_as: "formatting patch" # check for crashes if first received frame on decoder side is an SID check-first-frame-is-sid: Loading Loading @@ -898,7 +911,6 @@ lc3plus-ensure-no-code-changes: - modified_files=$(git status -s) - if [[ $modified_files ]]; then printf 'LC3plus codebase was modified!\n\n'"$modified_files"'\n\n'; exit $EXIT_CODE_FAIL; fi # --------------------------------------------------------------- # Test jobs for main branch # --------------------------------------------------------------- Loading Loading @@ -1036,6 +1048,40 @@ codec-comparison-on-main-push: reports: junit: report-junit.xml # --------------------------------------------------------------- # Manual jobs # --------------------------------------------------------------- test-be-to-release: stage: test tags: - ivas-windows resource_group: ivas-be-to-release-test-resource timeout: "20 minutes" rules: - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == 'test-be-release' script: - echo "$CI_COMMIT_BRANCH" - MSBuild.exe .\Workspace_msvc\Workspace_msvc.sln /property:Configuration=Debug /p:Platform=win32 /m | tee -variable winoutdata - $winoutdata | Out-File $BUILD_OUTPUT -Encoding Utf8 - ("& python ci/check_for_warnings.py '$BUILD_OUTPUT'") | Invoke-Expression - ("exit $LASTEXITCODE") | Invoke-Expression # path to release candidate refs defined in config.toml - echo "Placeholder for BE test to release script" - mkdir logs artifacts: name: "test-be-to-release--sha-$CI_COMMIT_SHORT_SHA--results" when: always expire_in: 1 week paths: - logs/ expose_as: "test-be-to-release results" # --------------------------------------------------------------- # Scheduled jobs on main # --------------------------------------------------------------- Loading @@ -1062,7 +1108,6 @@ codec-comparison-on-main-push: extends: - .sanitizer-test-template sanitizer-test-mono: extends: .sanitizer-test-schedule-A rules: Loading Loading @@ -1277,7 +1322,6 @@ sanitizer-test-ism+4: - *update-ltv-repo - python3 ci/run_scheduled_sanitizer_test.py ISM+4 $OUT_FORMATS_CHANNEL_BASED $OUT_FORMATS_SCENE_BASED $OUT_FORMATS_BINAURAL EXT --tests $SANITIZER_TESTS # GCOV/LCOV coverage analysis of self_test suite coverage-test-on-main-scheduled: extends: Loading @@ -1292,6 +1336,7 @@ coverage-test-on-main-scheduled: timeout: 2 hours script: - *print-common-info - *update-ltv-repo - make GCOV=1 -j - cp IVAS_rend IVAS_rend_ref # Copy exec to be able to run renderer script - python3 tests/create_short_testvectors.py Loading @@ -1312,13 +1357,12 @@ coverage-test-on-main-scheduled: - coverage.info - coverage # --------------------------------------------------------------- # Complexity measurement jobs # --------------------------------------------------------------- .complexity-measurements-setup: &complexity-measurements-setup # create necessary environment .complexity-measurements-setup: &complexity-measurements-setup # create necessary environment - mkdir -p wmops/logs - job_id=$(python3 ci/get_id_of_last_job_occurence.py $CI_COMMIT_REF_NAME $CI_JOB_NAME) Loading @@ -1333,8 +1377,8 @@ coverage-test-on-main-scheduled: - rm artifacts.zip - rm -rf $public_dir .complexity-measurements-prepare-artifacts: &complexity-measurements-prepare-artifacts # prepare artifacts -> move to public directory .complexity-measurements-prepare-artifacts: &complexity-measurements-prepare-artifacts # prepare artifacts -> move to public directory - public_dir="$CI_JOB_NAME-public" - mkdir $public_dir - mv -f wmops/log_*_all.txt wmops/*.js ${public_dir}/ Loading
apps/renderer.c +120 −78 Original line number Diff line number Diff line Loading @@ -777,7 +777,7 @@ int main( int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; IVAS_VECTOR3 Pos[RENDERER_HEAD_POSITIONS_PER_FRAME]; bool splitBinNeedsNewFrame = true; #ifdef WMOPS reset_wmops(); Loading Loading @@ -996,7 +996,7 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT } #endif const int16_t frameSize_smpls = (int16_t) ( 20 * args.sampleRate / 1000 ); const int16_t frameSize_smpls = (int16_t) ( ( args.framing_5ms ? 5 : 20 ) * args.sampleRate / 1000 ); IVAS_REND_InputId mcIds[RENDERER_MAX_MC_INPUTS] = { 0 }; IVAS_REND_InputId ismIds[RENDERER_MAX_ISM_INPUTS] = { 0 }; Loading @@ -1006,7 +1006,8 @@ int main( IVAS_REND_InputId splitBinIds[RENDERER_MAX_BIN_INPUTS] = { 0 }; #endif if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain, ( args.framing_5ms ) ? 1 : 4 ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error opening renderer handle: %s\n", ivas_error_to_string( error ) ); exit( -1 ); Loading Loading @@ -1408,6 +1409,9 @@ int main( bitsBuffer.config.bitsRead = 0; bitsBuffer.config.bitsWritten = 0; bitsBuffer.config.bufLenInBytes = bitsBufferSize; bitsBuffer.config.codec = IVAS_SPLIT_REND_CODEC_DEFAULT; bitsBuffer.config.poseCorrection = IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE; bitsBuffer.config.codec_frame_size_ms = 20; #else inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); outInt16Buffer = malloc( outBufferSize * sizeof( int16_t ) ); Loading Loading @@ -1437,19 +1441,23 @@ int main( fprintf( stdout, "\n\n-- Start the renderer (quiet mode) --\n\n" ); } ObjectPositionBuffer mtdBuffer; while ( 1 ) { int16_t num_in_channels; num_in_channels = inBuffer.config.numChannels; const bool isCurrentFrameMultipleOf20ms = !args.framing_5ms || frame % 4 == 0; #ifdef SPLIT_REND_WITH_HEAD_ROT numSamplesRead = 0; if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) ) if ( ( hSplitRendFileReadWrite != NULL ) && is_split_post_rend_mode( &args ) && splitBinNeedsNewFrame ) { ivas_error error_tmp; numSamplesRead = (int16_t) inBufferSize; error_tmp = split_rend_read_bits_from_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten, &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection ); &bitsBuffer.config.codec, &bitsBuffer.config.poseCorrection, &bitsBuffer.config.codec_frame_size_ms ); if ( error_tmp != IVAS_ERR_OK ) { if ( error_tmp == IVAS_ERR_END_OF_FILE ) Loading Loading @@ -1477,7 +1485,7 @@ int main( } #endif if ( numSamplesRead == 0 ) if ( numSamplesRead == 0 && splitBinNeedsNewFrame ) { /* end of input data */ break; Loading @@ -1491,7 +1499,11 @@ int main( #endif ); ObjectPositionBuffer mtdBuffer; int16_t num_subframes, sf_idx; num_subframes = ( args.framing_5ms ) ? 1 : IVAS_MAX_PARAM_SPATIAL_SUBFRAMES; if ( isCurrentFrameMultipleOf20ms ) { IsmPositionProvider_getNextFrame( positionProvider, &mtdBuffer ); if ( referenceVectorReader != NULL ) Loading @@ -1511,63 +1523,62 @@ int main( /* Read from reference rotation trajectory file if specified */ if ( referenceRotReader != NULL ) { IVAS_QUATERNION quaternion; if ( ( error = HeadRotationFileReading( referenceRotReader, &quaternion, NULL ) ) != IVAS_ERR_OK ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { IVAS_QUATERNION quaternions[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; if ( ( error = HeadRotationFileReading( referenceRotReader, &quaternions[sf_idx], NULL ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in Head Rotation File Reading: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_SetReferenceRotation( hIvasRend, quaternion ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_SetReferenceRotation( hIvasRend, quaternions[sf_idx] ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Reference Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } } /* Read from head rotation trajectory file if specified */ if ( headRotReader != NULL ) { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { if ( ( error = HeadRotationFileReading( headRotReader, &quatBuffer[i], &Pos[i] ) ) != IVAS_ERR_OK ) IVAS_QUATERNION headRot; IVAS_VECTOR3 Pos; if ( ( error = HeadRotationFileReading( headRotReader, &headRot, &Pos ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in Head Rotation File Reading: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } if ( ( error = IVAS_REND_SetHeadRotation( hIvasRend, quatBuffer, Pos if ( ( error = IVAS_REND_SetHeadRotation( hIvasRend, headRot, Pos #ifdef SPLIT_REND_WITH_HEAD_ROT , DEFAULT_AXIS #endif ) ) != IVAS_ERR_OK ) , sf_idx ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } else { error = IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL #ifdef SPLIT_REND_WITH_HEAD_ROT , DEFAULT_AXIS #endif ); if ( error != IVAS_ERR_OK && error != IVAS_ERR_INVALID_OUTPUT_FORMAT ) if ( ( error = IVAS_REND_DisableHeadRotation( hIvasRend ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting Head Rotation: %s\n", ivas_error_to_string( error ) ); fprintf( stderr, "Error disabling head rotation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } #ifdef SPLIT_REND_WITH_HEAD_ROT /* Read from split renderer bfi file if specified */ if ( splitRendBFIReader != NULL ) if ( splitRendBFIReader != NULL && splitBinNeedsNewFrame ) { int16_t bfi; SplitRendBFIFileReading( splitRendBFIReader, &bfi ); Loading @@ -1578,13 +1589,12 @@ int main( /* Read from external orientation file if specified */ if ( externalOrientationFileReader != NULL ) { IVAS_QUATERNION quatBuffer[RENDERER_HEAD_POSITIONS_PER_FRAME]; int8_t enableHeadRotation[RENDERER_HEAD_POSITIONS_PER_FRAME]; int8_t enableExternalOrientation[RENDERER_HEAD_POSITIONS_PER_FRAME]; IVAS_QUATERNION quatBuffer[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableHeadRotation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableExternalOrientation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int8_t enableRotationInterpolation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; int16_t numFramesToTargetOrientation[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES]; for ( i = 0; i < RENDERER_HEAD_POSITIONS_PER_FRAME; i++ ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { if ( ( error = ExternalOrientationFileReading( externalOrientationFileReader, &quatBuffer[i], &enableHeadRotation[i], &enableExternalOrientation[i], &enableRotationInterpolation[i], &numFramesToTargetOrientation[i] ) ) != IVAS_ERR_OK ) { Loading @@ -1592,13 +1602,16 @@ int main( exit( -1 ); } } if ( ( error = IVAS_REND_SetExternalOrientation( hIvasRend, quatBuffer, enableHeadRotation, enableExternalOrientation, enableRotationInterpolation, numFramesToTargetOrientation ) ) != IVAS_ERR_OK ) for ( sf_idx = 0; sf_idx < num_subframes; sf_idx++ ) { if ( ( error = IVAS_REND_SetExternalOrientation( hIvasRend, &quatBuffer[sf_idx], enableHeadRotation[sf_idx], enableExternalOrientation[sf_idx], enableRotationInterpolation[sf_idx], numFramesToTargetOrientation[sf_idx], sf_idx ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error setting External Orientation: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } /* Combine external orientations and head rotation */ Loading Loading @@ -1710,6 +1723,8 @@ int main( #ifdef SPLIT_REND_WITH_HEAD_ROT for ( i = 0; i < args.inConfig.numBinBuses; ++i ) { if ( splitBinNeedsNewFrame ) { if ( ( error = IVAS_REND_GetInputNumChannels( hIvasRend, splitBinIds[i], &numChannels ) ) != IVAS_ERR_OK ) { Loading @@ -1723,15 +1738,38 @@ int main( fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } if ( ( error = IVAS_REND_FeedSplitBinauralBitstream( hIvasRend, splitBinIds[i], &bitsBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } } #endif if ( ( error = IVAS_REND_GetSamples( hIvasRend, outBuffer #ifdef SPLIT_REND_WITH_HEAD_ROT , &bitsBuffer #if defined SPLIT_REND_WITH_HEAD_ROT if ( args.inConfig.numBinBuses != 0 ) { if ( ( error = IVAS_REND_GetSplitBinauralSamples( hIvasRend, outBuffer, &splitBinNeedsNewFrame ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } else if ( args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_SPLIT_CODED || args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) { if ( ( error = IVAS_REND_GetSplitBinauralBitstream( hIvasRend, outBuffer, &bitsBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } } else { #endif ) ) != IVAS_ERR_OK ) if ( ( error = IVAS_REND_GetSamples( hIvasRend, outBuffer ) ) != IVAS_ERR_OK ) { #ifdef SPLIT_REND_WITH_HEAD_ROT fprintf( stderr, "Error %s\n", ivas_error_to_string( error ) ); Loading @@ -1740,6 +1778,9 @@ int main( #endif exit( -1 ); } #if defined SPLIT_REND_WITH_HEAD_ROT } #endif int16_t num_out_channels; num_out_channels = outBuffer.config.numChannels; Loading Loading @@ -1788,7 +1829,8 @@ int main( if ( ( hSplitRendFileReadWrite != NULL ) && is_split_pre_rend_mode( &args ) ) { if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, bitsBuffer.bits, &bitsBuffer.config.bitsRead, &bitsBuffer.config.bitsWritten, bitsBuffer.config.codec, bitsBuffer.config.poseCorrection ) != IVAS_ERR_OK ) bitsBuffer.config.codec, bitsBuffer.config.poseCorrection, bitsBuffer.config.codec_frame_size_ms ) != IVAS_ERR_OK ) { fprintf( stderr, "\nUnable to write to bitstream file!\n" ); exit( -1 ); Loading Loading @@ -1929,6 +1971,7 @@ int main( } #endif if ( args.inConfig.numAudioObjects != 0 && ( args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL || args.outConfig.audioConfig == AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) { fprintf( stdout, "\n\nMetadata delayed %d subframes\n\n", (int16_t) round( args.syncMdDelay / ( 1000 / IVAS_NUM_FRAMES_PER_SEC / IVAS_MAX_PARAM_SPATIAL_SUBFRAMES ) ) ); Loading Loading @@ -2695,7 +2738,6 @@ static void parseOption( args->directivityPatternId[i] = (int16_t) strtol( optionValues[i], NULL, 10 ); } break; case CmdLnOptionId_acousticEnvironmentId: assert( numOptionValues == 1 ); args->acousticEnvironmentId = (int16_t) strtol( optionValues[0], NULL, 10 ); Loading
ci/run_evs_be_test.py +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ def main(): result_dict = dict() # run first part in parallel with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor: with concurrent.futures.ThreadPoolExecutor() as executor: executor.map( run_file, README_FILES_PARALLEL, BIN_PATHS, [result_dict] * len(README_FILES_PARALLEL) ) Loading