From 275140002cc994c25e094b57232e7e3419f00ed9 Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 2 Jun 2023 16:48:51 +0200 Subject: [PATCH 01/21] deactivate MR jobs temporarily for faster testing --- .gitlab-ci.yml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d4eea1ab7d..703c928181 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -219,7 +219,7 @@ uninterruptible: # Validation jobs # --------------------------------------------------------------- -check-if-branch-is-up-to-date-with-main: +.check-if-branch-is-up-to-date-with-main: extends: - .rules-merge-request stage: validate @@ -238,7 +238,7 @@ check-if-branch-is-up-to-date-with-main: # Build jobs # --------------------------------------------------------------- -build-codec-linux-make: +.build-codec-linux-make: extends: - .build-job-with-check-for-warnings - .rules-basis @@ -248,7 +248,7 @@ build-codec-linux-make: # need to use the "|| exit $?" suffix to get the allowed_failure return code, otherwise the job fails with code 1...< - ci/check_for_warnings.py $BUILD_OUTPUT || exit $? -build-codec-linux-cmake: +.build-codec-linux-cmake: extends: - .build-job-with-check-for-warnings - .rules-basis @@ -262,7 +262,7 @@ build-codec-linux-cmake: # need to use the "|| exit $?" suffix to get the allowed_failure return code, otherwise the job fails with code 1...< - ci/check_for_warnings.py $BUILD_OUTPUT || exit $? -build-codec-instrumented-linux: +.build-codec-instrumented-linux: extends: - .build-job-linux - .rules-basis @@ -272,7 +272,7 @@ build-codec-instrumented-linux: - bash ci/build_codec_instrumented_linux.sh # make sure that the codec builds with msan, asan and usan -build-codec-sanitizers-linux: +.build-codec-sanitizers-linux: extends: - .build-job-linux - .rules-basis @@ -280,7 +280,7 @@ build-codec-sanitizers-linux: - *print-common-info - bash ci/build_codec_sanitizers_linux.sh -build-codec-windows-cmake: +.build-codec-windows-cmake: extends: - .build-job-windows-with-check-for-warnings - .rules-basis @@ -293,7 +293,7 @@ build-codec-windows-cmake: - ("& python ci/check_for_warnings.py '$BUILD_OUTPUT'") | Invoke-Expression - ("exit $LASTEXITCODE") | Invoke-Expression -build-codec-windows-msbuild: +.build-codec-windows-msbuild: extends: - .build-job-windows-with-check-for-warnings - .rules-basis @@ -310,7 +310,7 @@ build-codec-windows-msbuild: # --------------------------------------------------------------- # test that runs all modes with 1s input signals -codec-smoke-test: +.codec-smoke-test: extends: - .test-job-linux-needs-testv-dir - .rules-merge-request @@ -336,7 +336,7 @@ codec-smoke-test: expose_as: "Smoke test results" # code selftest testvectors with memory-sanitizer binaries -codec-msan: +.codec-msan: extends: - .test-job-linux - .rules-merge-request @@ -359,7 +359,7 @@ codec-msan: expose_as: "msan selftest results" # code selftest testvectors with address-sanitizer binaries -codec-asan: +.codec-asan: extends: - .test-job-linux - .rules-merge-request @@ -382,7 +382,7 @@ codec-asan: expose_as: "asan selftest results" # test renderer executable -renderer-smoke-test: +.renderer-smoke-test: extends: - .test-job-linux - .rules-merge-request @@ -403,7 +403,7 @@ renderer-smoke-test: - report-junit.xml # test renderer executable with cmake + asan -renderer-asan: +.renderer-asan: extends: - .test-job-linux - .rules-merge-request @@ -427,7 +427,7 @@ renderer-asan: - report-junit.xml # test renderer executable with cmake + msan -renderer-msan: +.renderer-msan: extends: - .test-job-linux - .rules-merge-request @@ -451,7 +451,7 @@ renderer-msan: - report-junit.xml # compare renderer bitexactness between target and source branch -renderer-pytest-on-merge-request: +.renderer-pytest-on-merge-request: extends: - .test-job-linux - .rules-merge-request @@ -506,7 +506,7 @@ renderer-pytest-on-merge-request: - report-junit.xml # compare bit exactness between target and source branch -ivas-pytest-on-merge-request: +.ivas-pytest-on-merge-request: extends: - .test-job-linux - .rules-merge-request @@ -556,7 +556,7 @@ ivas-pytest-on-merge-request: junit: - report-junit.xml -evs-pytest-on-merge-request: +.evs-pytest-on-merge-request: extends: - .test-job-linux - .rules-merge-request @@ -603,7 +603,7 @@ evs-pytest-on-merge-request: junit: - report-junit-evs.xml -voip-be-on-merge-request: +.voip-be-on-merge-request: extends: - .test-job-linux-needs-testv-dir - .rules-merge-request -- GitLab From 400690ef9f49939b1567c871f984a7e9a94a2130 Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 2 Jun 2023 17:20:04 +0200 Subject: [PATCH 02/21] add check for testvectors being present --- .gitlab-ci.yml | 5 ++++- tests/test_vectors_available.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 tests/test_vectors_available.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 703c928181..8415d1326c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -69,7 +69,9 @@ stages: # 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 + - python3 -m pytest tests/test_vectors_available.py .merge-request-comparison-setup-codec: &merge-request-comparison-setup-codec ### build test binaries, initial clean for paranoia reasons @@ -671,6 +673,7 @@ clang-format-check: script: - *print-common-info - *update-ltv-repo + - *check-for-testvectors - cmake . - make -j diff --git a/tests/test_vectors_available.py b/tests/test_vectors_available.py new file mode 100644 index 0000000000..437dd5690a --- /dev/null +++ b/tests/test_vectors_available.py @@ -0,0 +1,19 @@ +import pytest +import pathlib +import json +import itertools + +TEST_CONFIG_DIR = pathlib.Path(__file__).parent.parent.joinpath("scripts/config") +TEST_CONFIGS = [f for f in TEST_CONFIG_DIR.iterdir() if f.name.startswith("ci_linux")] + +def get_testvectors_from_config(config) -> list: + with open(config) as f: + cfg = json.load(f) + return list(cfg["inpaths"].values()) + +TESTVECTORS = sorted(set(itertools.chain(*[get_testvectors_from_config(cfg) for cfg in TEST_CONFIGS]))) + +@pytest.mark.parametrize("testvector", TESTVECTORS) +def test_vectors_available(testvector): + if not pathlib.Path(testvector).exists(): + raise FileNotFoundError(f"Testvector {testvector} can not be found") \ No newline at end of file -- GitLab From 0aee8567d8de8e515eaf7da4db1788fab7c88cc7 Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 2 Jun 2023 17:22:24 +0200 Subject: [PATCH 03/21] deactivate more jobs --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8415d1326c..1b4130da4e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -693,7 +693,7 @@ clang-format-check: # --------------------------------------------------------------- # check bitexactness to EVS windows binaries -be-2-evs-windows: +.be-2-evs-windows: extends: - .rules-main-push tags: @@ -717,7 +717,7 @@ be-2-evs-windows: - python ../ci/run_evs_be_win_test.py # check bitexactness to EVS -be-2-evs-linux: +.be-2-evs-linux: extends: - .test-job-linux - .rules-main-push @@ -743,7 +743,7 @@ be-2-evs-linux: - cd evs_be_test - python3 ../ci/run_evs_be_test.py -codec-comparison-on-main-push: +.codec-comparison-on-main-push: extends: - .test-job-linux - .rules-main-push -- GitLab From 94b304dd105cec52fed66bb8924f65198530b6bd Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 2 Jun 2023 17:23:01 +0200 Subject: [PATCH 04/21] activate check-first-frame-is-sid job --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b4130da4e..1422cb7218 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -662,7 +662,7 @@ clang-format-check: expose_as: 'formatting patch' # check for crashes if first received frame on decoder side is an SID -.check-first-frame-is-sid: +check-first-frame-is-sid: extends: - .test-job-linux-needs-testv-dir - .rules-merge-request -- GitLab From eec50d626e2befb6b67c8ebf4386784daa635662 Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 2 Jun 2023 17:23:41 +0200 Subject: [PATCH 05/21] fix yaml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1422cb7218..b6f8545314 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -669,7 +669,7 @@ check-first-frame-is-sid: tags: - ivas-linux stage: test - needs: ["build-codec-linux-cmake"] + # needs: ["build-codec-linux-cmake"] script: - *print-common-info - *update-ltv-repo -- GitLab From 0675ea4f962e4c6576e682b45cf62440d64a957d Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 2 Jun 2023 17:29:03 +0200 Subject: [PATCH 06/21] macke separate checks on all the linux runners --- .gitlab-ci.yml | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b6f8545314..5c311f60cd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -661,8 +661,49 @@ clang-format-check: name: "$ARTIFACT_BASE_NAME" expose_as: 'formatting patch' +# TEMPORARY: run the check for testvectors on all runners +check-testvectors-fhg1: + extends: + - .rules-merge-request + - .test-job-linux-needs-testv-dir + tags: + - test-fhg-linux-runner1 + stage: test + script: + - *check-for-testvectors + +check-testvectors-fhg2: + extends: + - .rules-merge-request + - .test-job-linux-needs-testv-dir + tags: + - test-fhg-linux-runner2 + stage: test + script: + - *check-for-testvectors + +check-testvectors-ericsson: + extends: + - .rules-merge-request + - .test-job-linux-needs-testv-dir + tags: + - test-ericsson-linux-runner + stage: test + script: + - *check-for-testvectors + +check-testvectors-nokia: + extends: + - .rules-merge-request + - .test-job-linux-needs-testv-dir + tags: + - test-nokia-linux-runner + stage: test + script: + - *check-for-testvectors + # check for crashes if first received frame on decoder side is an SID -check-first-frame-is-sid: +.check-first-frame-is-sid: extends: - .test-job-linux-needs-testv-dir - .rules-merge-request -- GitLab From 17c72a2d576e4309ccbc36834278b1263ffab86b Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 1 Jun 2023 16:23:20 +0200 Subject: [PATCH 07/21] use correct files in config for sidstart test --- scripts/config/ci_linux_sidstart_test.json | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/scripts/config/ci_linux_sidstart_test.json b/scripts/config/ci_linux_sidstart_test.json index 3436d9eaea..be3915efd8 100644 --- a/scripts/config/ci_linux_sidstart_test.json +++ b/scripts/config/ci_linux_sidstart_test.json @@ -2,24 +2,24 @@ "afspPath": "not_needed", "utilPath": "/tools", "inpaths": { - "MONO": "/usr/local/testv/test_mono.wav", - "STEREO": "/usr/local/testv/test_stereo.wav", + "MONO": "/usr/local/testv/stv48n.wav", + "STEREO": "/usr/local/testv/stvST48n.wav", "FOA": "/usr/local/ltv/ltv48_FOA.wav", "HOA2": "/usr/local/ltv/ltv48_HOA2.wav", "HOA3": "/usr/local/ltv/ltv48_HOA3.wav", "SBA": "/usr/local/ltv/ltv48_HOA3.wav", - "MASA1TC1DIR": "/usr/local/testv/test_MASA_1dir1TC.wav", - "MASA1TC2DIR": "/usr/local/testv/test_MASA_2dir1TC.wav", - "MASA2TC1DIR": "/usr/local/testv/test_MASA_1dir2TC.wav", - "MASA2TC2DIR": "/usr/local/testv/test_MASA_2dir2TC.wav", - "5_1": "/usr/local/testv/test_MC51.wav", - "5_1_2": "/usr/local/testv/test_MC51p2.wav", - "5_1_4": "/usr/local/testv/test_MC51p4.wav", - "7_1": "/usr/local/testv/test_MC71.wav", - "7_1_4": "/usr/local/testv/test_MC71p4.wav", - "ISM1": "/usr/local/testv/test_mono.wav", - "ISM2": "/usr/local/testv/test_ISM_2obj.wav", - "ISM3": "/usr/local/testv/test_ISM_3obj.wav", - "ISM4": "/usr/local/testv/test_ISM_4obj.wav" + "MASA1TC1DIR": "/usr/local/testv/stv1MASA1TC48n.wav", + "MASA1TC2DIR": "/usr/local/testv/stv2MASA1TC48c.wav", + "MASA2TC1DIR": "/usr/local/testv/stv1MASA2TC48n.wav", + "MASA2TC2DIR": "/usr/local/testv/stv2MASA2TC48c.wav", + "5_1": "/usr/local/testv/stv51MC48c.wav", + "5_1_2": "/usr/local/testv/stv512MC48c.wav", + "5_1_4": "/usr/local/testv/stv514MC48c.wav", + "7_1": "/usr/local/testv/stv71MC48c.wav", + "7_1_4": "/usr/local/testv/stv714MC48c.wav", + "ISM1": "/usr/local/testv/stv1ISM48s.wav", + "ISM2": "/usr/local/testv/stv2ISM48s.wav", + "ISM3": "/usr/local/testv/stv3ISM48s.wav", + "ISM4": "/usr/local/testv/stv4ISM48s.wav" } } -- GitLab From 789224d6fb04cdd73b32a60c6b5b874a25255f1c Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 2 Jun 2023 17:46:50 +0200 Subject: [PATCH 08/21] Revert "macke separate checks on all the linux runners" This reverts commit 0675ea4f962e4c6576e682b45cf62440d64a957d. --- .gitlab-ci.yml | 43 +------------------------------------------ 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5c311f60cd..b6f8545314 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -661,49 +661,8 @@ clang-format-check: name: "$ARTIFACT_BASE_NAME" expose_as: 'formatting patch' -# TEMPORARY: run the check for testvectors on all runners -check-testvectors-fhg1: - extends: - - .rules-merge-request - - .test-job-linux-needs-testv-dir - tags: - - test-fhg-linux-runner1 - stage: test - script: - - *check-for-testvectors - -check-testvectors-fhg2: - extends: - - .rules-merge-request - - .test-job-linux-needs-testv-dir - tags: - - test-fhg-linux-runner2 - stage: test - script: - - *check-for-testvectors - -check-testvectors-ericsson: - extends: - - .rules-merge-request - - .test-job-linux-needs-testv-dir - tags: - - test-ericsson-linux-runner - stage: test - script: - - *check-for-testvectors - -check-testvectors-nokia: - extends: - - .rules-merge-request - - .test-job-linux-needs-testv-dir - tags: - - test-nokia-linux-runner - stage: test - script: - - *check-for-testvectors - # check for crashes if first received frame on decoder side is an SID -.check-first-frame-is-sid: +check-first-frame-is-sid: extends: - .test-job-linux-needs-testv-dir - .rules-merge-request -- GitLab From b2a56a6d754318f1fc966bb9173228d2673d9bf1 Mon Sep 17 00:00:00 2001 From: vaclav Date: Thu, 1 Jun 2023 15:54:12 +0200 Subject: [PATCH 09/21] fix ISM decoder crash if first received frame is an SID; under FIX_522_ISM_FIRST_SID --- lib_com/ivas_prot.h | 3 +-- lib_com/options.h | 2 ++ lib_dec/ivas_init_dec.c | 38 +++++++++++++++++++++++++++++++++ lib_dec/ivas_ism_dec.c | 17 ++++----------- lib_dec/ivas_ism_metadata_dec.c | 31 +++++++++++++++------------ 5 files changed, 62 insertions(+), 29 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index f455c552a5..562aa97076 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -1019,8 +1019,7 @@ ivas_error ivas_ism_enc_config( ); ivas_error ivas_ism_dec_config( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ - , + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const ISM_MODE last_ism_mode /* i/o: last ISM mode */ #ifdef JBM_TSM_ON_TCS , diff --git a/lib_com/options.h b/lib_com/options.h index d7f39aab3d..0178fa7c1d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -233,6 +233,8 @@ #define FIX_TODO_NON_DIEGETIC_PAN_NOT_IMPLELENTED_IN_RENDERER /* ..\apps\renderer.c(240): .... (todo: implementation)",*/ #define REMOVE_OBS_CODE /* FhG: Remove unnecessary assignement after LFE cleanup (Issue #451)*/ +#define FIX_522_ISM_FIRST_SID /* VA: fix ISM decoder crash if first received frame is an SID */ + #define ENHANCED_STEREO_DMX /* Orange : Contribution 48 - Enhanced stereo downmix. */ diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 2452b34edb..7ddac809ea 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -309,6 +309,44 @@ ivas_error ivas_dec_setup( st_ivas->hDecoderConfig->ivas_total_brate = ivas_total_brate; } } + +#ifdef FIX_522_ISM_FIRST_SID + if ( st_ivas->ini_frame == 0 && st_ivas->ivas_format == ISM_FORMAT ) + { + /* read the number of objects */ + st_ivas->nchan_transport = 1; + nchan_ism = 1; + k = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - 1 ) - SID_FORMAT_NBITS; + while ( st_ivas->bit_stream[k] && nchan_ism < MAX_NUM_OBJECTS ) + { + nchan_ism++; + k--; + } + k--; + + st_ivas->nchan_ism = nchan_ism; + + /* read ism_mode */ + if ( nchan_ism > 2 ) + { + k -= nchan_ism; /* SID metadata flags */ + idx = st_ivas->bit_stream[k]; + st_ivas->ism_mode = (ISM_MODE) ( idx + 1 ); + } + +#ifdef JBM_TSM_ON_TCS + if ( ( error = ivas_ism_dec_config( st_ivas, st_ivas->ism_mode, nSamplesRendered, data ) ) != IVAS_ERR_OK ) + { + return error; + } +#else + if ( ( error = ivas_ism_dec_config( st_ivas, st_ivas->ism_mode ) ) != IVAS_ERR_OK ) + { + return error; + } +#endif + } +#endif } /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index fe98ca0dcb..186dc29f7f 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -55,7 +55,7 @@ static ivas_error ivas_ism_bitrate_switching( #ifdef JBM_TSM_ON_TCS , uint16_t *nSamplesRendered, /* o : number of samples rendered */ - int16_t *data /* o : rendered samples */ + int16_t *data /* o : flushed PCM samples */ #endif ) { @@ -74,7 +74,6 @@ static ivas_error ivas_ism_bitrate_switching( #endif error = IVAS_ERR_OK; - nCPE_old = st_ivas->nCPE; nSCE_old = st_ivas->nSCE; @@ -225,12 +224,7 @@ static ivas_error ivas_ism_bitrate_switching( ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); /* Open Crend Binaural renderer */ - if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), - st_ivas->intern_config, - st_ivas->hOutSetup.output_config, - st_ivas->hRenderConfig, - st_ivas->hSetOfHRTF, - st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) { return error; } @@ -389,13 +383,12 @@ static ivas_error ivas_ism_bitrate_switching( *-------------------------------------------------------------------------*/ ivas_error ivas_ism_dec_config( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ - , + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const ISM_MODE last_ism_mode /* i/o: last ISM mode */ #ifdef JBM_TSM_ON_TCS , uint16_t *nSamplesRendered, /* o : number of samples flushed when the renderer granularity changes */ - int16_t *data + int16_t *data /* o : flushed PCM samples */ #endif ) { @@ -404,10 +397,8 @@ ivas_error ivas_ism_dec_config( int16_t nchan_transport_old; error = IVAS_ERR_OK; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - /* Assumes that num of input objects are constant */ nchan_transport_old = st_ivas->nchan_ism; diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index a39c496ab6..e275055768 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -138,18 +138,18 @@ static void ism_metadata_smooth( *-------------------------------------------------------------------------*/ ivas_error ivas_ism_metadata_dec( - const int32_t ism_total_brate, /* i : ISM total bitrate */ - const int16_t nchan_ism, /* i : number of ISM channels */ - int16_t *nchan_transport, /* o : number of transport channels */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder handles */ - const int16_t bfi, /* i : bfi flag */ - int16_t nb_bits_metadata[], /* o : number of metadata bits */ - ISM_MODE ism_mode, /* i : ISM mode */ - ISM_DTX_DATA_DEC hISMDTX, /* i/o: ISM DTX structure */ - const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Config Handle */ - int16_t *ism_extmeta_active, /* i/o: Extended metadata active in renderer*/ - int16_t *ism_extmeta_cnt /* i/o: Number of change frames observed*/ + const int32_t ism_total_brate, /* i : ISM total bitrate */ + const int16_t nchan_ism, /* i : number of ISM channels */ + int16_t *nchan_transport, /* o : number of transport channels */ + ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ + SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder handles */ + const int16_t bfi, /* i : bfi flag */ + int16_t nb_bits_metadata[], /* o : number of metadata bits */ + ISM_MODE ism_mode, /* i : ISM mode */ + ISM_DTX_DATA_DEC hISMDTX, /* i/o: ISM DTX structure */ + const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Config Handle */ + int16_t *ism_extmeta_active, /* i/o: Extended metadata active in renderer */ + int16_t *ism_extmeta_cnt /* i/o: Number of change frames observed */ ) { int16_t ch, nb_bits_start = 0, last_bit_pos; @@ -176,7 +176,6 @@ ivas_error ivas_ism_metadata_dec( push_wmops( "ism_meta_dec" ); - /* initialization */ st0 = hSCE[0]->hCoreCoder[0]; ism_metadata_flag_global = 0; @@ -579,6 +578,10 @@ ivas_error ivas_ism_metadata_dec_create( st_ivas->hIsmMetaData[ch]->last_true_azimuth = 0; st_ivas->hIsmMetaData[ch]->last_true_elevation = 0; +#ifdef FIX_522_ISM_FIRST_SID + st_ivas->hIsmMetaData[ch]->last_azimuth = 0; + st_ivas->hIsmMetaData[ch]->last_elevation = 0; +#endif ivas_ism_reset_metadata( st_ivas->hIsmMetaData[ch] ); } @@ -604,7 +607,7 @@ static void decode_angle_indices( DEC_CORE_HANDLE st0, /* i/o: bitstream handle */ ISM_METADATA_ANGLE_HANDLE angle, /* i/o: angle handle */ const int16_t non_diegetic_flag, /* i : Non diegetic flag */ - int16_t *flag_abs_angle1 /* o : Azimuth/yaw encoding mode */ + int16_t *flag_abs_angle1 /* o : Azimuth/yaw encoding mode */ ) { int16_t idx_angle1, nbits_diff_angle1, diff, sgn; -- GitLab From e3033137b3dea611c667d7db0df393c4e3bee7df Mon Sep 17 00:00:00 2001 From: knj Date: Tue, 6 Jun 2023 10:17:14 +0200 Subject: [PATCH 10/21] use ltv ISM signals for sidstart test --- scripts/config/ci_linux_sidstart_test.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/config/ci_linux_sidstart_test.json b/scripts/config/ci_linux_sidstart_test.json index be3915efd8..6a7276e252 100644 --- a/scripts/config/ci_linux_sidstart_test.json +++ b/scripts/config/ci_linux_sidstart_test.json @@ -17,9 +17,9 @@ "5_1_4": "/usr/local/testv/stv514MC48c.wav", "7_1": "/usr/local/testv/stv71MC48c.wav", "7_1_4": "/usr/local/testv/stv714MC48c.wav", - "ISM1": "/usr/local/testv/stv1ISM48s.wav", - "ISM2": "/usr/local/testv/stv2ISM48s.wav", - "ISM3": "/usr/local/testv/stv3ISM48s.wav", - "ISM4": "/usr/local/testv/stv4ISM48s.wav" + "ISM1": "/usr/local/ltv/ltv48_1ISM.wav", + "ISM2": "/usr/local/ltv/ltv48_2ISM.wav", + "ISM3": "/usr/local/ltv/ltv48_3ISM.wav", + "ISM4": "/usr/local/ltv/ltv48_4ISM.wav" } } -- GitLab From 589bbd6fa964eb9b2163d076aba35f5a3c2b328a Mon Sep 17 00:00:00 2001 From: kiene Date: Tue, 6 Jun 2023 12:23:38 +0200 Subject: [PATCH 11/21] use different testvectors for sidstart test --- scripts/config/ci_linux_sidstart_test.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/config/ci_linux_sidstart_test.json b/scripts/config/ci_linux_sidstart_test.json index 6a7276e252..f3a564ab31 100644 --- a/scripts/config/ci_linux_sidstart_test.json +++ b/scripts/config/ci_linux_sidstart_test.json @@ -3,7 +3,7 @@ "utilPath": "/tools", "inpaths": { "MONO": "/usr/local/testv/stv48n.wav", - "STEREO": "/usr/local/testv/stvST48n.wav", + "STEREO": "/usr/local/ltv/ltv48_STEREO.wav", "FOA": "/usr/local/ltv/ltv48_FOA.wav", "HOA2": "/usr/local/ltv/ltv48_HOA2.wav", "HOA3": "/usr/local/ltv/ltv48_HOA3.wav", -- GitLab From 0c0ac004139acbc2e17b3fde26daecc0738e9d27 Mon Sep 17 00:00:00 2001 From: kiene Date: Tue, 6 Jun 2023 12:24:50 +0200 Subject: [PATCH 12/21] limit input length to 20 s --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f681f9d586..d5bc647c81 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -680,13 +680,14 @@ check-first-frame-is-sid: # TODO: for some MASA modes, we currently do not have testvectors that actually trigger DTX - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep -v MASA) - echo $modes - - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 + - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 20 artifacts: paths: - out/logs when: on_failure name: "$CI_JOB_NAME--$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--sidstart" expose_as: "logs-sidstart" + expire_in: "5 days" # --------------------------------------------------------------- # Test jobs for main branch -- GitLab From 03c35485cbb6cdbfc09ab3b6681956183e3041e3 Mon Sep 17 00:00:00 2001 From: knj Date: Tue, 6 Jun 2023 13:29:44 +0200 Subject: [PATCH 13/21] adjust lengths and run SBA separately --- .gitlab-ci.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d5bc647c81..d7d21f7769 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -678,9 +678,12 @@ check-first-frame-is-sid: - make -j # TODO: for some MASA modes, we currently do not have testvectors that actually trigger DTX - - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep -v MASA) - - echo $modes - - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 20 + # SBA is run separately to use shorter part of file + - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep -v MASA | grep -v SBA) + - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 10:20 || exit_code_no_sba=$? + - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep SBA) + - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 70:80 || exit_code_sba=$? + - if [ $exit_code_no_sba != 0 || $exit_code_sba != 0]; exit 1; fi artifacts: paths: - out/logs -- GitLab From be0bb7d06057fd3cc8262275dcbbddcef55cfcf8 Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 15 Jun 2023 12:37:20 +0200 Subject: [PATCH 14/21] change limits for non-SBA modes again --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d7d21f7769..0d85e3b69e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -680,7 +680,7 @@ check-first-frame-is-sid: # TODO: for some MASA modes, we currently do not have testvectors that actually trigger DTX # SBA is run separately to use shorter part of file - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep -v MASA | grep -v SBA) - - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 10:20 || exit_code_no_sba=$? + - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 0:20 || exit_code_no_sba=$? - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep SBA) - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 70:80 || exit_code_sba=$? - if [ $exit_code_no_sba != 0 || $exit_code_sba != 0]; exit 1; fi -- GitLab From 1bdb5aaa6b40a2f2400ee7161595146c774c22b8 Mon Sep 17 00:00:00 2001 From: kiene Date: Thu, 15 Jun 2023 12:38:25 +0200 Subject: [PATCH 15/21] fix cutting --- scripts/pyivastest/IvasModeRunner.py | 13 +++++++------ scripts/pyivastest/IvasScriptsCommon.py | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/scripts/pyivastest/IvasModeRunner.py b/scripts/pyivastest/IvasModeRunner.py index cabf7d424b..85515e824d 100644 --- a/scripts/pyivastest/IvasModeRunner.py +++ b/scripts/pyivastest/IvasModeRunner.py @@ -182,7 +182,7 @@ class IvasModeRunner(IvasModeCollector.IvasModeCollector): self.max_workers = max_workers self.flat_output_structure = flat_output_structure self.limit_duration = False - self.max_duration = 0.0 + self.end_time = 0.0 self.start_time = 0.0 self.encoder_cmdline_options = [] self.decoder_cmdline_options = [] @@ -542,7 +542,7 @@ class IvasModeRunner(IvasModeCollector.IvasModeCollector): str(sample_rate_in), "_", config["cmd"]["in_config"].upper(), - "_L{}-{}s".format("_".join(str(self.start_time).split(".")), "_".join(str(self.max_duration).split("."))), + "_L{}-{}s".format("_".join(str(self.start_time).split(".")), "_".join(str(self.end_time).split("."))), ".pcm", ] ) @@ -613,13 +613,14 @@ class IvasModeRunner(IvasModeCollector.IvasModeCollector): if start_time_samples >= in_len: raise RuntimeError("Signal is shorter than given start time") - cut_len_samples = int(float(self.max_duration) * fs) + end_time_samples = int(float(self.end_time) * fs) + cut_len_samples = end_time_samples - start_time_samples if cut_len_samples + start_time_samples < in_len or start_time_samples > 0: - out_len = min(cut_len_samples, in_len - start_time_samples) - sig = ar.cut(sig, (start_time_samples, out_len)) + end_time_samples = min(end_time_samples, in_len) + sig = ar.cut(sig, (start_time_samples, end_time_samples)) - pcm_log.write("Limit signal length to {}:{} samples".format(start_time_samples, out_len)) + pcm_log.write("Limit signal length to {}:{} samples".format(start_time_samples, end_time_samples)) af.writefile(pcm_name_cpy_transformed, sig, fs) resamp_in_path = pcm_name_cpy_transformed diff --git a/scripts/pyivastest/IvasScriptsCommon.py b/scripts/pyivastest/IvasScriptsCommon.py index ec501d0154..987ce9727a 100644 --- a/scripts/pyivastest/IvasScriptsCommon.py +++ b/scripts/pyivastest/IvasScriptsCommon.py @@ -563,7 +563,7 @@ def runner_setup(runner, args): except ValueError: raise ValueError(f"Given duration string {arg} is invalid") - runner.max_duration = end + runner.end_time = end runner.start_time = start if "fer_file" in args.keys() or "ber_file" in args.keys(): -- GitLab From 08638f6fd063d4b2abe903d9dafd28f2b1b5329c Mon Sep 17 00:00:00 2001 From: vaclav Date: Thu, 15 Jun 2023 16:44:15 +0200 Subject: [PATCH 16/21] fix FIX_522_ISM_FIRST_SID --- lib_com/options.h | 3 +++ lib_dec/ivas_init_dec.c | 7 ------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 0a966bc252..bd152a1463 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -158,6 +158,9 @@ #define IGF_TUNING_96 /* FhG: Issue 546: slight tuning of IGF config used in 96 kbps stereo, 128 kbps SBA and others */ +#define FIX_522_ISM_FIRST_SID /* VA: fix ISM decoder crash if first received frame is an SID */ + + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index b06c044646..00b8d49d0c 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -307,17 +307,10 @@ ivas_error ivas_dec_setup( st_ivas->ism_mode = (ISM_MODE) ( idx + 1 ); } -#ifdef JBM_TSM_ON_TCS if ( ( error = ivas_ism_dec_config( st_ivas, st_ivas->ism_mode, nSamplesRendered, data ) ) != IVAS_ERR_OK ) { return error; } -#else - if ( ( error = ivas_ism_dec_config( st_ivas, st_ivas->ism_mode ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif } #endif } -- GitLab From fdbc105d983ae9580e699e8f3c64b089f0f6b1eb Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 16 Jun 2023 10:53:58 +0200 Subject: [PATCH 17/21] Revert "deactivate more jobs" This reverts commit 0aee8567d8de8e515eaf7da4db1788fab7c88cc7. --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3bcd659915..db0a49aaa9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -721,7 +721,7 @@ check-first-frame-is-sid: - python ../ci/run_evs_be_win_test.py # check bitexactness to EVS -.be-2-evs-linux: +be-2-evs-linux: extends: - .test-job-linux - .rules-main-push @@ -747,7 +747,7 @@ check-first-frame-is-sid: - cd evs_be_test - python3 ../ci/run_evs_be_test.py -.codec-comparison-on-main-push: +codec-comparison-on-main-push: extends: - .test-job-linux - .rules-main-push -- GitLab From 56fd29b20d73443bcabd621df06e05c4b942161a Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 16 Jun 2023 10:54:15 +0200 Subject: [PATCH 18/21] Revert "deactivate MR jobs temporarily for faster testing" This reverts commit 275140002cc994c25e094b57232e7e3419f00ed9. --- .gitlab-ci.yml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index db0a49aaa9..2c41a770a2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -221,7 +221,7 @@ uninterruptible: # Validation jobs # --------------------------------------------------------------- -.check-if-branch-is-up-to-date-with-main: +check-if-branch-is-up-to-date-with-main: extends: - .rules-merge-request stage: validate @@ -240,7 +240,7 @@ uninterruptible: # Build jobs # --------------------------------------------------------------- -.build-codec-linux-make: +build-codec-linux-make: extends: - .build-job-with-check-for-warnings - .rules-basis @@ -250,7 +250,7 @@ uninterruptible: # need to use the "|| exit $?" suffix to get the allowed_failure return code, otherwise the job fails with code 1...< - ci/check_for_warnings.py $BUILD_OUTPUT || exit $? -.build-codec-linux-cmake: +build-codec-linux-cmake: extends: - .build-job-with-check-for-warnings - .rules-basis @@ -264,7 +264,7 @@ uninterruptible: # need to use the "|| exit $?" suffix to get the allowed_failure return code, otherwise the job fails with code 1...< - ci/check_for_warnings.py $BUILD_OUTPUT || exit $? -.build-codec-instrumented-linux: +build-codec-instrumented-linux: extends: - .build-job-linux - .rules-basis @@ -274,7 +274,7 @@ uninterruptible: - bash ci/build_codec_instrumented_linux.sh # make sure that the codec builds with msan, asan and usan -.build-codec-sanitizers-linux: +build-codec-sanitizers-linux: extends: - .build-job-linux - .rules-basis @@ -282,7 +282,7 @@ uninterruptible: - *print-common-info - bash ci/build_codec_sanitizers_linux.sh -.build-codec-windows-cmake: +build-codec-windows-cmake: extends: - .build-job-windows-with-check-for-warnings - .rules-basis @@ -295,7 +295,7 @@ uninterruptible: - ("& python ci/check_for_warnings.py '$BUILD_OUTPUT'") | Invoke-Expression - ("exit $LASTEXITCODE") | Invoke-Expression -.build-codec-windows-msbuild: +build-codec-windows-msbuild: extends: - .build-job-windows-with-check-for-warnings - .rules-basis @@ -312,7 +312,7 @@ uninterruptible: # --------------------------------------------------------------- # test that runs all modes with 1s input signals -.codec-smoke-test: +codec-smoke-test: extends: - .test-job-linux-needs-testv-dir - .rules-merge-request @@ -338,7 +338,7 @@ uninterruptible: expose_as: "Smoke test results" # code selftest testvectors with memory-sanitizer binaries -.codec-msan: +codec-msan: extends: - .test-job-linux - .rules-merge-request @@ -361,7 +361,7 @@ uninterruptible: expose_as: "msan selftest results" # code selftest testvectors with address-sanitizer binaries -.codec-asan: +codec-asan: extends: - .test-job-linux - .rules-merge-request @@ -384,7 +384,7 @@ uninterruptible: expose_as: "asan selftest results" # test renderer executable -.renderer-smoke-test: +renderer-smoke-test: extends: - .test-job-linux - .rules-merge-request @@ -405,7 +405,7 @@ uninterruptible: - report-junit.xml # test renderer executable with cmake + asan -.renderer-asan: +renderer-asan: extends: - .test-job-linux - .rules-merge-request @@ -429,7 +429,7 @@ uninterruptible: - report-junit.xml # test renderer executable with cmake + msan -.renderer-msan: +renderer-msan: extends: - .test-job-linux - .rules-merge-request @@ -453,7 +453,7 @@ uninterruptible: - report-junit.xml # compare renderer bitexactness between target and source branch -.renderer-pytest-on-merge-request: +renderer-pytest-on-merge-request: extends: - .test-job-linux - .rules-merge-request @@ -508,7 +508,7 @@ uninterruptible: - report-junit.xml # compare bit exactness between target and source branch -.ivas-pytest-on-merge-request: +ivas-pytest-on-merge-request: extends: - .test-job-linux - .rules-merge-request @@ -558,7 +558,7 @@ uninterruptible: junit: - report-junit.xml -.evs-pytest-on-merge-request: +evs-pytest-on-merge-request: extends: - .test-job-linux - .rules-merge-request @@ -605,7 +605,7 @@ uninterruptible: junit: - report-junit-evs.xml -.voip-be-on-merge-request: +voip-be-on-merge-request: extends: - .test-job-linux-needs-testv-dir - .rules-merge-request -- GitLab From aec57400440fd8eaaf9cec0fa7b6ef5d259cab47 Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 16 Jun 2023 12:06:01 +0200 Subject: [PATCH 19/21] fix if in ci file --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2c41a770a2..c79cbcede6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -683,7 +683,7 @@ check-first-frame-is-sid: - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 0:20 || exit_code_no_sba=$? - modes=$(scripts/runIvasCodec.py -l | grep dtx | grep SBA) - scripts/runIvasCodec.py -p scripts/config/ci_linux_sidstart_test.json -m $modes -s --bs_length 500 -U 70:80 || exit_code_sba=$? - - if [ $exit_code_no_sba != 0 || $exit_code_sba != 0]; exit 1; fi + - if [ $exit_code_no_sba != 0 || $exit_code_sba != 0]; then exit 1; fi artifacts: paths: - out/logs -- GitLab From d32a799a0469b0bba2cacf61403eebf748cee177 Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 16 Jun 2023 12:10:05 +0200 Subject: [PATCH 20/21] move file for tet for available binaries --- .gitlab-ci.yml | 2 +- tests/{ => ci}/test_vectors_available.py | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename tests/{ => ci}/test_vectors_available.py (100%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c79cbcede6..d824b11f3e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -71,7 +71,7 @@ stages: .check-for-testvectors: &check-for-testvectors # check if the testvector files specified in scripts/config/ci_linux*.json are present - - python3 -m pytest tests/test_vectors_available.py + - python3 -m pytest tests/ci/test_vectors_available.py .merge-request-comparison-setup-codec: &merge-request-comparison-setup-codec ### build test binaries, initial clean for paranoia reasons diff --git a/tests/test_vectors_available.py b/tests/ci/test_vectors_available.py similarity index 100% rename from tests/test_vectors_available.py rename to tests/ci/test_vectors_available.py -- GitLab From c0e00ab7795e74030548d8cc3ad74b984c834134 Mon Sep 17 00:00:00 2001 From: knj Date: Fri, 16 Jun 2023 12:16:33 +0200 Subject: [PATCH 21/21] fix path to testvectors --- tests/ci/test_vectors_available.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ci/test_vectors_available.py b/tests/ci/test_vectors_available.py index 437dd5690a..42a9945d82 100644 --- a/tests/ci/test_vectors_available.py +++ b/tests/ci/test_vectors_available.py @@ -3,7 +3,7 @@ import pathlib import json import itertools -TEST_CONFIG_DIR = pathlib.Path(__file__).parent.parent.joinpath("scripts/config") +TEST_CONFIG_DIR = pathlib.Path(__file__).parent.parent.parent.joinpath("scripts/config") TEST_CONFIGS = [f for f in TEST_CONFIG_DIR.iterdir() if f.name.startswith("ci_linux")] def get_testvectors_from_config(config) -> list: @@ -16,4 +16,4 @@ TESTVECTORS = sorted(set(itertools.chain(*[get_testvectors_from_config(cfg) for @pytest.mark.parametrize("testvector", TESTVECTORS) def test_vectors_available(testvector): if not pathlib.Path(testvector).exists(): - raise FileNotFoundError(f"Testvector {testvector} can not be found") \ No newline at end of file + raise FileNotFoundError(f"Testvector {testvector} can not be found") -- GitLab