Commit 2e87d105 authored by vaclav's avatar vaclav
Browse files

Merge remote-tracking branch 'remotes/origin/main' into 20231020_maintenance

parents 3ba2c567 5d2ac216
Loading
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1093,9 +1093,9 @@ check-first-frame-is-sid:
    - 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=$?
    - 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=$?

    - if [ $exit_code_no_sba -ne 0 ] || [ $exit_code_hoa -ne 0 ] || [ $exit_code_hoa -ne 0 ]; then exit 1; fi
    - 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
+18 −8
Original line number Diff line number Diff line
@@ -12,7 +12,16 @@ import pyaudio3dtools
import pyivastest


def cmp_pcm(file1, file2, out_config, fs, get_mld=False, mld_lim=0, abs_tol=0) -> (int, str):
def cmp_pcm(
    file1,
    file2,
    out_config,
    fs,
    get_mld=False,
    allow_differing_lengths=False,
    mld_lim=0,
    abs_tol=0,
) -> (int, str):
    """
    Compare 2 PCM files for bitexactness
    """
@@ -22,24 +31,26 @@ def cmp_pcm(file1, file2, out_config, fs, get_mld=False, mld_lim=0, abs_tol=0) -
    out_config = "MONO" if out_config == "" else out_config
    # out_config may be a string or a Path. Wrap in str() to avoid error in case it is a Path.
    if str(out_config).upper() not in pyivastest.constants.OC_TO_NCHANNELS:
        out_config_in_file_names = os.path.splitext(os.path.basename(out_config))[0]
        nchannels = (
            pyivastest.IvasScriptsCommon.IvasScript.get_n_channels_from_ls_layout(
                out_config
            )
        )
    else:
        out_config_in_file_names = out_config
        nchannels = pyivastest.constants.OC_TO_NCHANNELS[out_config.upper()]

    s1, _ = pyaudio3dtools.audiofile.readfile(file1, nchannels, fs, outdtype=np.int16)
    s2, _ = pyaudio3dtools.audiofile.readfile(file2, nchannels, fs, outdtype=np.int16)

    nchannels = s1.shape[
        1
    ]  # In case of wav input, override the nchannels with the one from the wav header
    # In case of wav input, override the nchannels with the one from the wav header
    nchannels = s1.shape[1]

    if s1.shape != s2.shape:
    if allow_differing_lengths:
        # to allow for MLD comparison, shorten longer file
        min_len = min(s1.shape[0], s2.shape[0])
        s1 = s1[:min_len, :]
        s2 = s2[:min_len, :]
    elif s1.shape != s2.shape:
        print(
            f"file size in samples: file 1 = {s1.shape[0]},",
            f"file 2 = {s2.shape[0]}",
@@ -54,7 +65,6 @@ def cmp_pcm(file1, file2, out_config, fs, get_mld=False, mld_lim=0, abs_tol=0) -
        s1, s2, fs, per_frame=False, get_mld=get_mld
    )


    output_differs = 0
    reason = "SUCCESS: Files are bitexact"

+32 −9
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import platform
from pathlib import Path
from subprocess import run
import pytest
import numpy as np

from tests.cmp_pcm import cmp_pcm
from tests.conftest import DecoderFrontend, EncoderFrontend
@@ -63,7 +64,11 @@ VALID_DEC_OUTPUT_CONF = [
    "EXT",
]

PARAM_FILE_ID = "stv" if PARAM_FILE.stem == "self_test" else PARAM_FILE.stem.replace("self_test_", "")
PARAM_FILE_ID = (
    "stv"
    if PARAM_FILE.stem == "self_test"
    else PARAM_FILE.stem.replace("self_test_", "")
)

param_file_test_dict = {}
with open(PARAM_FILE, "r", encoding="UTF-8") as fp:
@@ -277,11 +282,6 @@ def test_param_file_tests(
    else:
        output_config = ""

    output_config_name = output_config
    if "/" in output_config:
        # the output config is a file
        output_config_name = os.path.splitext(os.path.basename(output_config))[0]

    tracefile_dec = ""
    if sim_opts != "":
        assert bitstream_file_dec == "netsimoutput"
@@ -303,7 +303,7 @@ def test_param_file_tests(
    # -> construct output filename
    output_file = f"{testv_base}_{tag_str}.dec.wav"

    stdout = decode(
    decode(
        dut_decoder_frontend,
        ref_decoder_frontend,
        reference_path,
@@ -321,6 +321,24 @@ def test_param_file_tests(
    if update_ref in [0, 2]:
        dut_output_file = f"{dut_base_path}/param_file/dec/{output_file}"
        ref_output_file = f"{reference_path}/param_file/dec/{output_file}"

        # set to false per default even if this is no JBM case - makes later check for failure easier
        tracefile_last_rtp_numbers_differ = False

        if len(tracefile_dec) > 0:
            dut_tracefile_dec = f"{dut_base_path}/param_file/dec/{tracefile_dec}"
            ref_tracefile_dec = f"{reference_path}/param_file/dec/{tracefile_dec}"

            # check for same RTP sequence number in last line of tracefile
            dut_rtp_num_last = np.genfromtxt(dut_tracefile_dec, delimiter=";")[-1,0]
            ref_rtp_num_last = np.genfromtxt(ref_tracefile_dec, delimiter=";")[-1,0]
            tracefile_last_rtp_numbers_differ = dut_rtp_num_last != ref_rtp_num_last

        # same sequence number -> likely no crash, assume length difference is due to difference in TSM
        # to get MLD and abs diff values for now - even though they might be meaningless due to
        # shift differences between the two signals - cut longer signal to shorter size
        allow_differing_lengths = not tracefile_last_rtp_numbers_differ

        fs = int(sampling_rate) * 1000
        output_differs, reason = cmp_pcm(
            dut_output_file,
@@ -330,6 +348,7 @@ def test_param_file_tests(
            get_mld=get_mld,
            mld_lim=get_mld_lim,
            abs_tol=abs_tol,
            allow_differing_lengths=allow_differing_lengths,
        )
        md_out_files = get_expected_md_files(ref_output_file, enc_split, output_config)

@@ -363,7 +382,11 @@ def test_param_file_tests(
                    print("REF output metadata missing for expected file: " + md_file)
                metadata_differs = True

        if get_mld and get_mld_lim > 0:
        if tracefile_last_rtp_numbers_differ:
            pytest.fail(
                "Last RTP sequence num in tracefiles differ for JBM decoding - Not all frames were decoded in both ref and dut."
            )
        elif get_mld and get_mld_lim > 0:
            if output_differs:
                pytest.fail(reason)
        else: