Commit 751b4581 authored by Jan Kiene's avatar Jan Kiene
Browse files

add fec run to script

parent cf0ba99e
Loading
Loading
Loading
Loading
+49 −10
Original line number Diff line number Diff line
#!/usr/bin/env python3

import argparse
from distutils.command.clean import clean
import sys
import subprocess
import pathlib
@@ -10,6 +11,8 @@ DURATION = "120"
CFG = "ci_linux.json"
SUPPORTED_TESTS = [ "CLANG1", "CLANG2", "CLANG3", "VALGRIND" ]
EP_FILE = "ep_015.g192"
GENPATT_CMD = f"gen-patt -tailstat -fer -g192 -gamma 0 -rate 0.15 -tol 0.001 -reset -n {int(DURATION) * 50} {EP_FILE}"
EIDXOR_CMD = "eid-xor -vbr -fer {bitstream} {ep_file} {out_file}"

SCRIPT_DIR = pathlib.Path("./scripts").resolve()

@@ -32,30 +35,66 @@ def get_modes(in_format: str) -> list:
	return [m for m in output.splitlines() if in_format in m]


def run_check(modes: list, out_formats: list, tests: list):
	cmd = [
		SCRIPT_DIR.joinpath("IvasBuildAndRunChecks.py"),
def run_check(modes: list, out_formats: list, tests: list, run_fec: bool = True):

	### always run encoder and decoder with no frameloss
	cmd_no_fec = [
		str(SCRIPT_DIR.joinpath("IvasBuildAndRunChecks.py")),
		"-U",
		DURATION,
		# DURATION,
		"1",
		"-t",
		"1",
		"-p",
		CFG,
		"--checks",
		*TESTS,
		*tests,
		"-m",
		*modes,
		# *modes,
		"stereo_b48_swb_cbr",
		"--oc",
		*out_formats
		*out_formats,
	]

	proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
	proc = subprocess.Popen(cmd_no_fec, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
	for c in iter(lambda: proc.stdout.read(1), b""):
		sys.stdout.buffer.write(c)
	proc.wait()

	if proc.returncode not in [0, 101]:
		raise IvasBuildAndRunFailed()
		raise IvasBuildAndRunFailed("Failed at first run (no PLC)")

	returncode_no_fec = proc.returncode

	if not run_fec:
		return returncode_no_fec

	### second run: decoder only with disturbed bitstream

	# generate error pattern
	subprocess.call(GENPATT_CMD.split())

	# cleanup to avoid script errors
	# we want "logs" and "dec" subfolders to be empty -> delete and recreate them
	cleanup_folders = ["logs", "dec"]
	for t in tests:
		for fol in cleanup_folders:
			for fi in pathlib.Path(t).joinpath(fol).iterdir():
				fi.unlink()

	cmd_fec = cmd_no_fec + ["--decoder_only", "-f", EP_FILE]

	proc = subprocess.Popen(cmd_fec, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
	for c in iter(lambda: proc.stdout.read(1), b""):
		sys.stdout.buffer.write(c)
	proc.wait()

	returncode_fec = proc.returncode

	if returncode_fec not in [0, 101]:
		raise IvasBuildAndRunFailed("failed at second run (PLC)")

	return proc.returncode
	return 101 if 101 in [returncode_no_fec, returncode_fec] else 0


class IvasBuildAndRunFailed(Exception):