diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3e97e863bb4376a4323a0e859a221e7307980a10..13df7886bcdd1678d0be052d206f90b1832ce253 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1076,29 +1076,17 @@ check-first-frame-is-sid: script: - *print-common-info - *update-ltv-repo - # Temporary fix to test only SID start config files in this job + # this rm makes check-for-testvectors only check for the signals we actually need in this test - rm scripts/config/ci_linux_ltv.json scripts/config/ci_linux.json - *check-for-testvectors - - cmake . - - make -j - - - exit_code_no_sba=0 - - exit_code_hoa=0 - - exit_code_foa=0 - - # run all modes and cut bitstream to start with an SID. Use stereo output to limit runtime, test is only about decoding - - 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" - - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep -vE "FOA|HOA" ) - - scripts/runIvasCodec.py -z console -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 200 -U 0:20 --oc stereo $ism_md_cmd --timeout 10 || exit_code_no_sba=$? - - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep -E "HOA") - - scripts/runIvasCodec.py -z console -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 100 -U 70:80 --oc stereo --timeout 10 || exit_code_hoa=$? - - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep "FOA") - - scripts/runIvasCodec.py -z console -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 100 -U 75:110 --oc stereo --timeout 10 || exit_code_foa=$? + - bash ci/run-first-frame-is-sid-test.sh - - if [ $exit_code_no_sba -ne 0 ] || [ $exit_code_hoa -ne 0 ] || [ $exit_code_foa -ne 0 ]; then exit 1; fi artifacts: paths: - - out/logs + - logs_enc + - logs_dec_msan + - logs_dec_asan + - logs_dec_usan when: always name: "$CI_JOB_NAME--$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--sidstart" expose_as: "logs-sidstart" diff --git a/ci/run-first-frame-is-sid-test.sh b/ci/run-first-frame-is-sid-test.sh new file mode 100755 index 0000000000000000000000000000000000000000..fb18eec5ccdb52aa89213678dcd0263d022d8ff6 --- /dev/null +++ b/ci/run-first-frame-is-sid-test.sh @@ -0,0 +1,56 @@ +#! /usr/bin/bash + +# build encoder without sanitizers for faster runtime +make clean +make -j IVAS_cod +mv IVAS_cod IVAS_cod_nosan + +# run all modes and cut bitstream to start with an SID. Use mono output to limit runtime, test is only about decoding the first frame +modes_no_sba=$(scripts/runIvasCodec.py -l | grep dtx | grep -vE "FOA|HOA" ) +modes_hoa=$(scripts/runIvasCodec.py -l | grep dtx | grep -E "HOA") +modes_foa=$(scripts/runIvasCodec.py -l | grep dtx | grep "FOA") + +# config vars +testcase_timeout=20 +bitstream_cut_length=5 +common_args="-z console -p scripts/config/ci_linux_sidstart_test.json -s --oc mono --timeout $testcase_timeout --bs_length $bitstream_cut_length" + +# first encoder + MSAN decoder +# hack to use the encoder with no sanitizers +mkdir CLANG1 +make clean +make IVAS_dec -j CLANG=1 +cp IVAS_dec CLANG1/IVAS_dec +cp IVAS_cod_nosan CLANG1/IVAS_cod + +exit_code_msan=0 +echo "-------------- 1. Encoder + Msan decoder -------------- " +echo "-------------- 1.1 all DTX modes except SBA -------------- " +scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_no_sba -U 0:20 $common_args || exit_code_msan=$? +echo "-------------- 1.2 HOA2 + HOA3 DTX modes -------------- " +scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_hoa -U 70:80 $common_args || exit_code_msan=$? +echo "-------------- 1.3 FOA DTX modes -------------- " +scripts/IvasBuildAndRunChecks.py --checks CLANG1 -m $modes_foa -U 75:110 $common_args || exit_code_msan=$? +# archive encoder logs separately +mkdir logs_enc logs_dec_msan +mv CLANG1/logs/*.enc.txt logs_enc/ +mv CLANG1/logs/*.dec*.txt logs_dec_msan/ + +# ASAN and USAN can be done in one go and decoder only +# copy encoder output from CLANG1 dir +mkdir CLANG2 CLANG3 +cp -r CLANG1/enc CLANG2/enc +cp -r CLANG1/enc CLANG3/enc + +exit_code_asan_usan=0 +echo "-------------- 2. Asan + Usan decoder -------------- " +echo "-------------- 2.1 all DTX modes except SBA -------------- " +scripts/IvasBuildAndRunChecks.py --checks CLANG2 CLANG3 --decoder_only -m $modes_no_sba -U 0:20 $common_args || exit_code_asan_usan=$? +echo "-------------- 2.2 HOA2 + HOA3 DTX modes -------------- " +scripts/IvasBuildAndRunChecks.py --checks CLANG2 CLANG3 --decoder_only -m $modes_hoa -U 70:80 $common_args || exit_code_asan_usan=$? +echo "-------------- 2.3 FOA DTX modes -------------- " +scripts/IvasBuildAndRunChecks.py --checks CLANG2 CLANG3 --decoder_only -m $modes_foa -U 75:110 $common_args || exit_code_asan_usan=$? +mv CLANG2/logs logs_dec_asan +mv CLANG3/logs logs_dec_usan + +if [ $exit_code_msan -ne 0 ] || [ $exit_code_asan_usan -ne 0 ]; then echo "There was either a crash or a sanitizer error encountered when decoding a bitstream that starts with an SID. Check the artifacts for the logfiles."; exit 1; fi