Skip to content
Commits on Source (645)
variables:
# note: GitLab cannot reference variables defined by users in the include ref:, we need to use a YAML anchor for this
# see https://docs.gitlab.com/ci/yaml/includes/#use-variables-with-include for more information
IVAS_CODEC_CI_REF: &IVAS_CODEC_CI_REF 4eb4c0dfbdc845280a9994b5f7540f69c737537b
IVAS_CODEC_CI_REF: &IVAS_CODEC_CI_REF main
include:
- local: .gitlab-ci/variables.yml
......@@ -352,6 +352,13 @@ build-codec-instrumented-linux:
- bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh
- ./scripts/prepare_instrumentation.sh
- make -j -C scripts/c-code_instrument
artifacts:
when: always
access: all
expire_in: "30 days"
paths:
- wmc_tool_output.txt
# make sure that the codec builds with msan, asan and usan
build-codec-sanitizers-linux:
......@@ -419,7 +426,7 @@ codec-smoke-test:
- 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"
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
expire_in: 1 week
when: always
paths:
......@@ -477,7 +484,7 @@ pytest-compare-20ms-and-5ms-rendering:
needs: ["build-codec-linux-cmake", "build-codec-linux-make", "build-codec-instrumented-linux", "build-codec-sanitizers-linux"]
script:
- bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh
- bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/float/disable-limiter.sh
- bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/disable-limiter.sh
- make clean
- make -j
### prepare pytest
......@@ -501,7 +508,7 @@ pytest-compare-20ms-and-5ms-rendering:
- if [ $exit_code10 -ne 0 ]; then echo "Non-bitexact cases encountered with 10ms rendering!"; exit_code=1; fi
- if [ $exit_code -ne 0 ]; then exit $EXIT_CODE_FAIL; fi
artifacts:
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--stage-$CI_JOB_STAGE--results"
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
expire_in: 1 week
when: always
expose_as: "pytest 5ms and 10ms vs 20ms results"
......@@ -537,81 +544,69 @@ renderer-smoke-test:
junit:
- report-junit.xml
# test renderer executable with cmake + asan
renderer-asan:
.renderer-sanitizer-job:
extends:
- .test-job-linux
- .rules-merge-request-to-main
needs: ["build-codec-linux-cmake"]
stage: test
script:
- cmake -B cmake-build -G "Unix Makefiles" -DCLANG=asan -DCOPY_EXECUTABLES_FROM_BUILD_DIR=true
- cmake --build cmake-build -- -j
- testcase_timeout=180
- python3 -m pytest -q -n auto -rA --junit-xml=report-junit.xml tests/renderer/test_renderer.py --testcase_timeout=$testcase_timeout
timeout: "1 hour"
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
expose_as: "renderer asan pytest results"
- report.html
reports:
junit:
- report-junit.xml
before_script:
- cmake -B cmake-build -G "Unix Makefiles" -DCLANG=$SANITIZER_BUILD_STRING -DCOPY_EXECUTABLES_FROM_BUILD_DIR=true
- cmake --build cmake-build -- -j
# rename files to fit naming convention
# en- and decoder needed because of split rendering testcases
- mv IVAS_cod IVAS_cod_ref
- mv IVAS_dec IVAS_dec_ref
- mv IVAS_rend IVAS_rend_ref
- mv ISAR_post_rend ISAR_post_rend_ref
- testcase_timeout=180
# test renderer executable with cmake + asan
renderer-asan:
extends:
- .renderer-sanitizer-job
variables:
SANITIZER_BUILD_STRING: "asan"
script:
- 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 --create_ref --testcase_timeout=$testcase_timeout
artifacts:
expose_as: "renderer asan result"
# test renderer executable with cmake + msan
renderer-msan:
extends:
- .test-job-linux
- .rules-merge-request-to-main
needs: ["build-codec-linux-cmake"]
stage: test
- .renderer-sanitizer-job
variables:
SANITIZER_BUILD_STRING: "msan"
script:
- cmake -B cmake-build -G "Unix Makefiles" -DCLANG=msan -DCOPY_EXECUTABLES_FROM_BUILD_DIR=true
- cmake --build cmake-build -- -j
- testcase_timeout=180
- python3 -m pytest -q -n auto -rA --junit-xml=report-junit.xml tests/renderer/test_renderer.py --testcase_timeout=$testcase_timeout
- 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 --create_ref --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
expose_as: "renderer msan pytest results"
reports:
junit:
- report-junit.xml
expose_as: "renderer msan result"
# test renderer executable with cmake + usan
renderer-usan:
extends:
- .test-job-linux
- .rules-merge-request-to-main
needs: ["build-codec-linux-cmake"]
stage: test
- .renderer-sanitizer-job
variables:
SANITIZER_BUILD_STRING: "usan"
script:
- cmake -B cmake-build -G "Unix Makefiles" -DCLANG=usan -DCOPY_EXECUTABLES_FROM_BUILD_DIR=true
- cmake --build cmake-build -- -j
- testcase_timeout=180
- UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,log_path=usan_log_catchall python3 -m pytest -q -n auto -rA --junit-xml=report-junit.xml tests/renderer/test_renderer.py --testcase_timeout=$testcase_timeout
- grep_exit_code=0
- touch usan_log_empty # Creates an empty file, this is to avoid "grep: usan_log_*: No such file or directory" in case no USAN failures are reported from pytest
- grep UndefinedBehaviorSanitizer usan_log_* || grep_exit_code=$?
- if [ $grep_exit_code != 1 ] ; then echo "Run errors in test_renderer.py with Clang undefined-behavior-sanitizer"; exit 1; fi
- 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 --create_ref --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
expose_as: "renderer usan pytest results"
reports:
junit:
- report-junit.xml
expose_as: "renderer usan result"
# compare renderer bitexactness between target and source branch
renderer-pytest-on-merge-request:
......@@ -730,6 +725,7 @@ split-rendering-pytest-on-merge-request:
- mv IVAS_cod IVAS_cod_ref
- mv IVAS_dec IVAS_dec_ref
- mv IVAS_rend IVAS_rend_ref
- mv ISAR_post_rend ISAR_post_rend_ref
### If ref_using_main is not set, checkout the source branch to use scripts and input from there
- if [ $ref_using_main == 0 ]; then git restore lib_com/options.h; fi # Revert changes back before checking out another branch to avoid conflicts
......@@ -777,6 +773,12 @@ ivas-pytest-on-merge-request:
stage: compare
needs: ["build-codec-linux-cmake", "codec-smoke-test"]
timeout: "14 minutes"
parallel:
matrix:
# note: keep in sync with list in $TESTS_DIR_CODEC_BE_ON_MR
- PYTEST_SCRIPT:
- test_param_file.py
- test_sba.py
script:
- bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh
- commits_behind_count="$(bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/get-commits-behind-count.sh)"
......@@ -794,7 +796,7 @@ ivas-pytest-on-merge-request:
### prepare pytest
# create references
- python3 -m pytest $TESTS_DIR_CODEC_BE_ON_MR -v --update_ref 1
- python3 -m pytest "$TESTS_DIR_CODEC_BE_ON_MR"/"$PYTEST_SCRIPT" -v --update_ref 1
### Run test using branch scripts and input
- if [ $ref_using_main == 1 ]; then git checkout $source_branch_commit_sha; fi
......@@ -802,7 +804,7 @@ ivas-pytest-on-merge-request:
### run pytest
- exit_code=0
- testcase_timeout=60
- python3 -m pytest $TESTS_DIR_CODEC_BE_ON_MR -v --html=report.html --self-contained-html --junit-xml=report-junit.xml --testcase_timeout=$testcase_timeout || exit_code=$?
- python3 -m pytest "$TESTS_DIR_CODEC_BE_ON_MR"/"$PYTEST_SCRIPT" -v --html=report.html --self-contained-html --junit-xml=report-junit.xml --testcase_timeout=$testcase_timeout || exit_code=$?
- zero_errors=$(cat report-junit.xml | grep -c 'errors="0"') || true
- *merge-request-comparison-check
......@@ -811,7 +813,7 @@ ivas-pytest-on-merge-request:
exit_codes:
- 123
artifacts:
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--stage-$CI_JOB_STAGE--results"
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
expire_in: 1 week
when: always
paths:
......@@ -862,7 +864,7 @@ ivas-interop-on-merge-request:
exit_codes:
- 123
artifacts:
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--stage-$CI_JOB_STAGE--results"
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
expire_in: 1 week
when: always
paths:
......@@ -914,7 +916,7 @@ evs-pytest-on-merge-request:
exit_codes:
- 123
artifacts:
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--stage-$CI_JOB_STAGE--results"
name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
expire_in: 1 week
when: always
paths:
......@@ -1010,7 +1012,7 @@ check-first-frame-is-sid:
expose_as: "logs-sidstart"
expire_in: "5 days"
.lc3plus-ensure-no-code-changes:
lc3plus-ensure-no-code-changes:
extends:
- .test-job-linux
- .rules-merge-request-to-main
......@@ -1022,7 +1024,7 @@ check-first-frame-is-sid:
- ./scripts/lc3plus_lib_setup/get_lc3plus.sh
# Ensure git reports no changes
- modified_files=$(git status -s)
- modified_files=$(git status -su lib_lc3plus)
- if [[ $modified_files ]]; then printf 'LC3plus codebase was modified!\n\n'"$modified_files"'\n\n'; exit $EXIT_CODE_FAIL; fi
check-bitexactness-hrtf-rom-and-file:
......@@ -1196,7 +1198,7 @@ codec-comparison-on-main-push:
exit_codes:
- 123
artifacts:
name: "main-push--sha-$CI_COMMIT_SHORT_SHA--stage-$CI_JOB_STAGE--results"
name: "main-push--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results"
expire_in: 1 week
when: always
paths:
......@@ -1255,6 +1257,7 @@ ivas-conformance:
- cp -force IVAS_cod.exe IVAS_cod_ref.exe
- cp -force IVAS_dec.exe IVAS_dec_ref.exe
- cp -force IVAS_rend.exe IVAS_rend_ref.exe
- cp -force ISAR_post_rend.exe ISAR_post_rend_ref.exe
# Reference creation
- python scripts/prepare_combined_format_inputs.py
......@@ -1320,6 +1323,7 @@ ivas-conformance:
expire_in: 1 week
when: always
paths:
- report_cmd.html
- report-junit.xml
- report.html
- Readme_IVAS_dec.txt
......@@ -1348,6 +1352,7 @@ ivas-conformance-linux:
- cp IVAS_cod IVAS_cod_ref
- cp IVAS_dec IVAS_dec_ref
- cp IVAS_rend IVAS_rend_ref
- cp ISAR_post_rend ISAR_post_rend_ref
# Reference creation
- python3 scripts/prepare_combined_format_inputs.py
......
......@@ -106,7 +106,6 @@
<ClCompile Include="..\lib_lc3plus\apply_global_gain.c" />
<ClCompile Include="..\lib_lc3plus\ari_codec.c" />
<ClCompile Include="..\lib_lc3plus\attack_detector.c" />
<ClCompile Include="..\lib_lc3plus\plc_compute_stab_fac.c" />
<ClCompile Include="..\lib_lc3plus\constants.c" />
<ClCompile Include="..\lib_lc3plus\cutoff_bandwidth.c" />
<ClCompile Include="..\lib_lc3plus\dct4.c" />
......@@ -116,13 +115,13 @@
<ClCompile Include="..\lib_lc3plus\enc_entropy.c" />
<ClCompile Include="..\lib_lc3plus\enc_lc3_fl.c" />
<ClCompile Include="..\lib_lc3plus\estimate_global_gain.c" />
<ClCompile Include="..\lib_lc3plus\lc3plus_fft.c" />
<ClCompile Include="..\lib_lc3plus\imdct.c" />
<ClCompile Include="..\lib_lc3plus\lc3.c" />
<ClCompile Include="..\lib_lc3plus\lc3plus_fft.c" />
<ClCompile Include="..\lib_lc3plus\lc3plus.c" />
<ClCompile Include="..\lib_lc3plus\ltpf_coder.c" />
<ClCompile Include="..\lib_lc3plus\ltpf_decoder.c" />
<ClCompile Include="..\lib_lc3plus\mdct.c" />
<ClCompile Include="..\lib_lc3plus\mdct_shaping.c" />
<ClCompile Include="..\lib_lc3plus\mdct.c" />
<ClCompile Include="..\lib_lc3plus\near_nyquist_detector.c" />
<ClCompile Include="..\lib_lc3plus\noise_factor.c" />
<ClCompile Include="..\lib_lc3plus\noise_filling.c" />
......@@ -133,35 +132,36 @@
<ClCompile Include="..\lib_lc3plus\pc_update.c" />
<ClCompile Include="..\lib_lc3plus\per_band_energy.c" />
<ClCompile Include="..\lib_lc3plus\plc_classify.c" />
<ClCompile Include="..\lib_lc3plus\plc_compute_stab_fac.c" />
<ClCompile Include="..\lib_lc3plus\plc_damping_scrambling.c" />
<ClCompile Include="..\lib_lc3plus\plc_main.c" />
<ClCompile Include="..\lib_lc3plus\plc_noise_substitution.c" />
<ClCompile Include="..\lib_lc3plus\plc_tdc_tdac.c" />
<ClCompile Include="..\lib_lc3plus\plc_update.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_f0_refine_first.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_fec_hq.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_hq_ecu.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_lf_peak_analysis.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_rec_frame.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_setf0hz.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_subst_spec.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_spec_ana.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_subst_spec.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_tba_per_band_gain.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_tba_spect_Xavg.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_tba_trans_dect_gains.c" />
<ClCompile Include="..\lib_lc3plus\plc_phecu_trans_burst_ana_sub.c" />
<ClCompile Include="..\lib_lc3plus\plc_tdc_tdac.c" />
<ClCompile Include="..\lib_lc3plus\plc_tdc.c" />
<ClCompile Include="..\lib_lc3plus\plc_update.c" />
<ClCompile Include="..\lib_lc3plus\quantize_spec.c" />
<ClCompile Include="..\lib_lc3plus\reorder_bitstream.c" />
<ClCompile Include="..\lib_lc3plus\resamp12k8.c" />
<ClCompile Include="..\lib_lc3plus\residual_coding.c" />
<ClCompile Include="..\lib_lc3plus\residual_decoding.c" />
<ClCompile Include="..\lib_lc3plus\setup_dec_lc3.c" />
<ClCompile Include="..\lib_lc3plus\setup_enc_lc3.c" />
<ClCompile Include="..\lib_lc3plus\setup_com_lc3.c" />
<ClCompile Include="..\lib_lc3plus\setup_com_lc3plus.c" />
<ClCompile Include="..\lib_lc3plus\setup_dec_lc3plus.c" />
<ClCompile Include="..\lib_lc3plus\setup_enc_lc3plus.c" />
<ClCompile Include="..\lib_lc3plus\sns_compute_scf.c" />
<ClCompile Include="..\lib_lc3plus\sns_interpolate_scf.c" />
<ClCompile Include="..\lib_lc3plus\sns_quantize_scf.c" />
<ClCompile Include="..\lib_lc3plus\plc_tdc.c" />
<ClCompile Include="..\lib_lc3plus\tns_coder.c" />
<ClCompile Include="..\lib_lc3plus\tns_decoder.c" />
</ItemGroup>
......@@ -169,14 +169,12 @@
<ClInclude Include="..\lib_lc3plus\clib.h" />
<ClInclude Include="..\lib_lc3plus\constants.h" />
<ClInclude Include="..\lib_lc3plus\defines.h" />
<ClInclude Include="..\lib_lc3plus\file_io.h" />
<ClInclude Include="..\lib_lc3plus\functions.h" />
<ClInclude Include="..\lib_lc3plus\lc3.h" />
<ClInclude Include="..\lib_lc3plus\setup_dec_lc3.h" />
<ClInclude Include="..\lib_lc3plus\setup_enc_lc3.h" />
<ClInclude Include="..\lib_lc3plus\lc3plus.h" />
<ClInclude Include="..\lib_lc3plus\license.h" />
<ClInclude Include="..\lib_lc3plus\setup_dec_lc3plus.h" />
<ClInclude Include="..\lib_lc3plus\setup_enc_lc3plus.h" />
<ClInclude Include="..\lib_lc3plus\structs.h" />
<ClInclude Include="..\lib_lc3plus\tinywavein_c.h" />
<ClInclude Include="..\lib_lc3plus\tinywaveout_c.h" />
<ClInclude Include="..\lib_lc3plus\util.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
......
......@@ -175,6 +175,7 @@
<ClCompile Include="..\lib_rend\ivas_rom_rend.c" />
<ClCompile Include="..\lib_rend\ivas_shoebox.c" />
<ClCompile Include="..\lib_rend\ivas_td_decorr.c" />
<ClCompile Include="..\lib_rend\ivas_td_ring_buffer.c" />
<ClCompile Include="..\lib_rend\ivas_vbap.c" />
<ClCompile Include="..\lib_rend\lib_rend.c" />
</ItemGroup>
......
......@@ -32,30 +32,12 @@
<ClCompile Include="..\lib_rend\ivas_hrtf.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_lc3plus_common.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_lc3plus_dec.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_lc3plus_enc.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_limiter.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_masa_merge.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_mcmasa_ana.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_MSPred.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_NoiseGen.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_objectRenderer.c">
<Filter>rend_c</Filter>
</ClCompile>
......@@ -83,15 +65,6 @@
<ClCompile Include="..\lib_rend\ivas_output_init.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_PerceptualModel.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_PredDecoder.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_PredEncoder.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_render_config.c">
<Filter>rend_c</Filter>
</ClCompile>
......@@ -113,9 +86,6 @@
<ClCompile Include="..\lib_rend\ivas_reverb_utils.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_RMSEnvGrouping.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_rom_binaural_crend_head.c">
<Filter>rend_c</Filter>
</ClCompile>
......@@ -134,24 +104,6 @@
<ClCompile Include="..\lib_rend\ivas_sba_rendering.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_splitRend_lcld_dec.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_splitRend_lcld_enc.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_splitRenderer_utils.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_splitRendererPLC.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_splitRendererPost.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_splitRendererPre.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_shoebox.c">
<Filter>rend_c</Filter>
</ClCompile>
......@@ -161,30 +113,15 @@
<ClCompile Include="..\lib_rend\ivas_vbap.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_lcld_rom_tables.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_lcld_decoder.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_lcld_encoder.c">
<ClCompile Include="..\lib_rend\ivas_td_decorr.c">
<Filter>rend_c</Filter>
</ClCompile>
<ClCompile Include="..\lib_rend\ivas_td_decorr.c">
<ClCompile Include="..\lib_rend\ivas_td_ring_buffer.c">
<Filter>rend_c</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\lib_rend\lib_rend.h" />
<ClInclude Include="..\lib_rend\ivas_lc3plus_common.h">
<Filter>rend_h</Filter>
</ClInclude>
<ClInclude Include="..\lib_rend\ivas_lc3plus_enc.h">
<Filter>rend_h</Filter>
</ClInclude>
<ClInclude Include="..\lib_rend\ivas_lc3plus_dec.h">
<Filter>rend_h</Filter>
</ClInclude>
<ClInclude Include="..\lib_rend\ivas_prot_rend.h">
<Filter>rend_h</Filter>
</ClInclude>
......@@ -203,12 +140,6 @@
<ClInclude Include="..\lib_rend\ivas_rom_TdBinauralRenderer.h">
<Filter>rend_h</Filter>
</ClInclude>
<ClInclude Include="..\lib_rend\ivas_lcld_prot.h">
<Filter>rend_h</Filter>
</ClInclude>
<ClInclude Include="..\lib_rend\ivas_lcld_rom_tables.h">
<Filter>rend_h</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="rend_h">
......
......@@ -1617,6 +1617,18 @@ static bool parseCmdlIVAS_dec(
return false;
}
#ifdef SUPPORT_JBM_TRACEFILE
/* Validate options that depend on other options */
if ( arg->jbmTraceFilename != NULL && arg->delayCompensationEnabled
/* This decMode check should be removed once timestamp sync issues between JBM trace and audio are fixed in EVS */
&& arg->decMode != IVAS_DEC_MODE_EVS )
{
fprintf( stderr, "Error: Writing to a JBM trace file requires delay compensation to be disabled with -no_delay_cmp\n\n" );
usage_dec();
return false;
}
#endif
return true;
}
......@@ -1653,7 +1665,8 @@ static void usage_dec( void )
fprintf( stdout, " EVS RTP Payload Format. The SDP parameter hf_only is required.\n" );
fprintf( stdout, " Reading RFC4867 AMR/AMR-WB RTP payload format is not supported.\n" );
#ifdef SUPPORT_JBM_TRACEFILE
fprintf( stdout, "-Tracefile TF : VoIP mode: Generate trace file named TF\n" );
fprintf( stdout, "-Tracefile TF : VoIP mode: Generate trace file named TF. Requires -no_delay_cmp to\n" );
fprintf( stdout, " be enabled so that trace contents remain in sync with audio output.\n" );
#endif
#ifdef DEBUGGING
#ifdef VARIABLE_SPEED_DECODING
......@@ -1858,13 +1871,13 @@ static ivas_error initOnFirstGoodFrame(
return error;
}
int16_t *zeroBuf = malloc( pcmFrameSize * sizeof( int16_t ) );
/* 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;
}
memset( zeroBuf, 0, pcmFrameSize * sizeof( int16_t ) );
for ( int16_t i = 0; i < numInitialBadFrames; ++i )
{
......@@ -1888,7 +1901,6 @@ static ivas_error initOnFirstGoodFrame(
}
else
{
if ( *pRemainingDelayNumSamples < *numOutSamples )
{
if ( ( error = AudioFileWriter_write( *ppAfWriter, zeroBuf, *numOutSamples * *pNumOutChannels - ( *pRemainingDelayNumSamples * *pNumOutChannels ) ) ) != IVAS_ERR_OK )
......
......@@ -15,6 +15,7 @@
the software. This notice grants no license of any kind, including but not limited to patent
license, nor is any license granted by implication, estoppel or otherwise.
Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
contributions.
......
......@@ -681,6 +681,7 @@ int main(
int argc,
char **argv )
{
bool mainFailed = true; /* Assume main failed until cleanup is reached without errors */
ISAR_POST_REND_HANDLE hIsarPostRend = NULL;
RotFileReader *headRotReader = NULL;
RotFileReader *externalOrientationFileReader = NULL;
......@@ -1222,6 +1223,8 @@ int main(
* Close files and deallocate resources
*------------------------------------------------------------------------------------------*/
mainFailed = false; /* This will stay set to true if cleanup is reached via a goto due to an error */
cleanup:
free( inpInt16Buffer );
......@@ -1252,7 +1255,7 @@ cleanup:
print_mem( NULL );
#endif
return 0;
return mainFailed ? -1 : 0;
}
......
This diff is collapsed.
......@@ -5,6 +5,10 @@
<body>
<h1>Ivas BASOP code Development</h1>
<h2>Regression tracking</h2>
<li><a href="long_term_regression.html">Long term regression</a></li>
<h2>Daily long testvector tests</h2>
<ul>
......
......@@ -53,7 +53,7 @@ fi
# Replace only the first occurrence, as "basop" may be present in the later description
# If the format is correct, then before "_basop", only numbers can occur
float_ref_branchname="${branchname/basop/ref}"
git_result=$(git branch -av)
git_result=$(git branch -a)
# If the branch does not exist, default to "float-pc"
if [[ "$git_result" =~ "$float_ref_branchname" ]]; then
......
import os
import pandas as pd
import argparse
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
def read_csv_files(root_dir):
"""Read csv files as dictionary of panda dataframes."""
csv_data = {}
for subdir, dirs, files in os.walk(root_dir):
for file in files:
if file.endswith(".csv"):
file_path = os.path.join(subdir, file)
try:
df = pd.read_csv(file_path)
csv_data[file_path] = df
except Exception as e:
print(f"Failed to read {file_path}: {e}")
exit(-1)
return csv_data
def parse_csv_data(csv_data):
"""keep 'testcase', 'format', 'MLD', 'MAX_ABS_DIFF' and add
'date' column."""
cols_to_keep = ["testcase", "format", "MLD", "MAX_ABS_DIFF"]
parsed_data = {}
for key, df in csv_data.items():
cols = [col for col in cols_to_keep if col in df.columns]
date = os.path.basename(os.path.dirname(key))
new_df = df[cols].copy()
new_df["date"] = date
parsed_data[key] = new_df
# concatenate all dataframe in the dictionary
concat_df = pd.concat(parsed_data.values(), ignore_index=True)
return concat_df
def plot_data(df, output_filename):
"""plot max values for 'MLD' and 'MAX_ABS_DIFF' data and save
to html file."""
# Convert 'date' to datetime
df["date"] = pd.to_datetime(df["date"], errors="coerce")
df["MLD"] = pd.to_numeric(df["MLD"], errors="coerce")
df["MAX_ABS_DIFF"] = pd.to_numeric(df["MAX_ABS_DIFF"], errors="coerce")
# Drop rows with NaT and NaN
clean_df = df.dropna(subset=["date", "MLD", "MAX_ABS_DIFF"])
# Group by 'format' and 'date' to get rows with max 'MLD' per group
max_mld = (
clean_df.groupby(["format", "date"])
.apply(lambda x: x.loc[x["MLD"].idxmax()])
.reset_index(drop=True)
)
# Group by 'format' and 'date' to get rows with max 'MAX_ABS_DIFF' per
# group
max_abs_diff = (
clean_df.groupby(["format", "date"])
.apply(lambda x: x.loc[x["MAX_ABS_DIFF"].idxmax()])
.reset_index(drop=True)
)
formats = sorted(clean_df["format"].unique())
fig = make_subplots(
rows=5,
cols=2,
specs=[[{"secondary_y": True}] * 2] * 5,
subplot_titles=[f"{i}" for i in formats],
shared_xaxes="columns",
)
for i, fmt in enumerate(formats):
row = i // 2 + 1
col = i % 2 + 1
data_mld = max_mld[max_mld["format"] == fmt].sort_values("date")
data_diff = max_abs_diff[max_abs_diff["format"]
== fmt].sort_values("date")
# Add max 'MLD' to primary y-axis
fig.add_trace(
go.Scatter(
x=data_mld["date"],
y=data_mld["MLD"],
mode="lines+markers",
name=f" {fmt} - Max MLD",
hovertext=[
f"Testcase: {tc}<br>MLD: {mld:.4f}<br>MAX_ABS_DIFF:"
f"{abs_diff}<br>Format:"
f" {format}<br>Date: {date.date()}"
for tc, mld, abs_diff, format, date in zip(
data_mld["testcase"],
data_mld["MLD"],
data_mld["MAX_ABS_DIFF"],
data_mld["format"],
data_mld["date"],
)
],
hoverinfo="text",
),
row=row,
col=col,
secondary_y=False,
)
# Add max 'MAX_ABS_DIFF' to secondary y-axis
fig.add_trace(
go.Scatter(
x=data_diff["date"],
y=data_diff["MAX_ABS_DIFF"],
mode="lines+markers",
name=f"{fmt} - Max MAX_ABS_DIFF",
hovertext=[
f"Testcase: {tc}<br>MLD: {mld:.4f}<br>MAX_ABS_DIFF:"
f" {abs_diff:.4f}<br>Format:"
f" {format}<br>Date: {date.date()}"
for tc, mld, abs_diff, format, date in zip(
data_diff["testcase"],
data_diff["MLD"],
data_diff["MAX_ABS_DIFF"],
data_diff["format"],
data_diff["date"],
)
],
hoverinfo="text",
),
row=row,
col=col,
secondary_y=True,
)
fig.update_layout(
title_text="Long-term regression: max MLD and max MAX_ABS_DIFF",
legend=dict(x=1, y=1, orientation="v"),
hovermode="x unified",
)
fig.update_xaxes(automargin=True)
fig.update_yaxes(automargin=True)
# Update y-axes titles per subplot
for i in range(10):
yaxis_num = i * 2 + 1
yaxis2_num = yaxis_num + 1
fig["layout"][f"yaxis{yaxis_num}"].update(
title="Max MLD", titlefont=dict(color="blue"), tickfont=dict(color="blue")
)
fig["layout"][f"yaxis{yaxis2_num}"].update(
title="Max MAX_ABS_DIFF",
titlefont=dict(color="green"),
tickfont=dict(color="green"),
)
# Save to html
fig.write_html(output_filename)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Plot long term logs")
parser.add_argument(
"root_dir",
type=str,
help="Root directory containing subdirectories" " with CSV log files",
)
parser.add_argument(
"output_filename",
type=str,
help="Filename of the generated plot. e.g" ". long_term_regression.html",
)
args = parser.parse_args()
csv_data = read_csv_files(args.root_dir)
data = parse_csv_data(csv_data)
plot_data(data, args.output_filename)
......@@ -104,8 +104,9 @@ TESTCASES_MAIN_PC = [
"Multi-channel 5_1 bitrate switching from 13.2 kbps to 512 kbps, 48kHz in, 16kHz out, BINAURAL_ROOM_REVERB out",
"OSBA 2OA 2ISM bitrate switching, 32kHz in, 48kHz out, BINAURAL_ROOM_REVERB out, JBM Prof 5",
]
TESTCASES_MAIN_PC_REENABLE = [
"4 ISM with extended metadata at 128 kbps, 48 kHz in, 48 kHz out, BINAURAL_ROOM_REVERB out, rendconf dir w id",
]
def remove_testcases(cfg: Path, testcases: list):
"""
Go through file line by line and copy all testcases except the given ones
......@@ -136,7 +137,11 @@ if __name__ == "__main__":
testcases = TESTCASES_MAIN
if args.use_main_pc_set:
# Add further unsupported test cases
testcases.extend(TESTCASES_MAIN_PC)
# Re-enable test cases that are now supported
for case in TESTCASES_MAIN_PC_REENABLE:
testcases.remove(case)
for f in args.cfg_files:
remove_testcases(f, testcases)
......@@ -69,6 +69,7 @@ JOBS_BASOP_REPO = {
"complexity-stereo-in-stereo-out": "Stereo in, Stereo out",
# "timeless" jobs (not complexity)
"coverage-test-on-main-scheduled": "Coverage",
"ivas-long-term-job-logs-overview": "Long term logs",
}
JOBS_FOR_PROJECT_ID = {
......
......@@ -52,7 +52,6 @@ else
usage
fi
cfg=./scripts/config/ci_linux.json
dly_profile=./scripts/dly_error_profiles/dly_error_profile_10_smoke_test.dat
ism_md_cmd="--ism_metadata_files /usr/local/ltv/ltvISM1.csv /usr/local/ltv/ltvISM2.csv /usr/local/ltv/ltvISM3.csv /usr/local/ltv/ltvISM4.csv"
......@@ -77,10 +76,6 @@ if [ $BUILD -eq 1 ];then
fi
# prepare combined format test signals
echo -e "\n======================= 0. preparing combined format test inputs =======================\n\n"
./scripts/prepare_combined_format_inputs.py
# run all modes vanilla-fashion
# treat ISM modes separately because passing the metadata files to MASA modes causes crashes
readarray -t ism_modes < <(./scripts/runIvasCodec.py -l | grep ISM)
......
......@@ -61,10 +61,6 @@ duration_arg=""
complexity_cmd="--checks COMPLEXITY --create_complexity_tables"
max_num_workers="--max_workers $MAX_CORES"
# prepare combined format test signals
echo "\n======================= 0. preparing combined format test inputs =======================\n\n"
./scripts/prepare_combined_format_inputs.py
# Modes
mono_modes=$(./scripts/IvasBuildAndRunChecks.py -l | grep ^mono)
FOA_modes=$(./scripts/IvasBuildAndRunChecks.py -l | grep ^FOA)
......@@ -91,7 +87,6 @@ ISM_plus2_modes=$(./scripts/IvasBuildAndRunChecks.py -l | grep ^ISM+2)
ISM_plus3_modes=$(./scripts/IvasBuildAndRunChecks.py -l | grep ^ISM+3)
ISM_plus4_modes=$(./scripts/IvasBuildAndRunChecks.py -l | grep ^ISM+4)
echo "\n======================= 1. Mono =======================\n\n"
./scripts/IvasBuildAndRunChecks.py $complexity_cmd ltv_complexity_mono_no_fec -m $mono_modes -p $cfg $duration_arg $max_num_workers | tee smoke_test_output_mono.txt
rm -r ./COMPLEXITY/dec/
......
......@@ -552,7 +552,6 @@ ivas_error config_acelp1(
const int16_t tdm_lp_reuse_flag, /* i : LPC reuse flag (can be 1 only with secondary channel */
const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */
const int16_t idchan, /* i : stereo channel ID */
const int16_t active_cnt, /* i : Active frame counter */
const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag*/
const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */
const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */
......@@ -770,7 +769,7 @@ ivas_error config_acelp1(
bits -= acelp_cfg->mid_lsf_bits;
}
else if ( tdm_lp_reuse_flag == 1 && idchan == 1 && active_cnt != 1 )
else if ( tdm_lp_reuse_flag == 1 && idchan == 1 )
{
bits -= TDM_IC_LSF_PRED_BITS;
}
......
This diff is collapsed.
......@@ -524,6 +524,7 @@ enum
#define ACELP_TCX_TRANS_NS 1250000 /* Duration of the ACELP->TCX overlap - 1.25 ms */
#define L_FRAME_MAX L_FRAME48k /* Max 20ms frame size @48kHz */
#define L_FRAME_PLUS 1200 /* Max frame size (long TCX frame) */
#define L_FRAME_PLUS_INTERNAL 800 /* Max frame size (long TCX frame) at maximum internal sampling rate */
#define L_MDCT_OVLP_MAX NS2SA( 48000, ACELP_LOOK_NS ) /* = Max mdct overlap */
#define N_TCX10_MAX 480 /* Max size of TCX10 MDCT spectrum */
#define BITS_TEC 1 /* number of bits for TEC */
......
......@@ -50,8 +50,7 @@
#define IVAS_MAX_BITS_PER_FRAME ( 512000 / IVAS_NUM_FRAMES_PER_SEC ) /* maximum bits per frame; corresponds to maximum bitrate of 512 kbps */
#define IVAS_MAX_NUM_OBJECTS 4
#define IVAS_MAX_INPUT_CHANNELS 16
#define IVAS_MAX_OUTPUT_CHANNELS 16 /* Note: there is an exception for OSBA and EXT otuput where it can be 20 (HOA3 + 4 ISM channels) */
#define IVAS_MAX_LS_CHANNELS 16
#define IVAS_CLDFB_NO_COL_MAX 16
#define IVAS_CLDFB_NO_CHANNELS_MAX 60
......@@ -190,10 +189,10 @@ typedef struct ivas_LS_setup_custom IVAS_LSSETUP_CUSTOM_STRUCT;
typedef struct _IVAS_LS_CUSTOM_LAYOUT
{
int16_t num_spk;
float azimuth[IVAS_MAX_OUTPUT_CHANNELS];
float elevation[IVAS_MAX_OUTPUT_CHANNELS];
float azimuth[IVAS_MAX_LS_CHANNELS];
float elevation[IVAS_MAX_LS_CHANNELS];
int16_t num_lfe;
int16_t lfe_idx[IVAS_MAX_OUTPUT_CHANNELS];
int16_t lfe_idx[IVAS_MAX_LS_CHANNELS];
} IVAS_CUSTOM_LS_DATA;
......