Commit 445beba8 authored by Jan Kiene's avatar Jan Kiene
Browse files

add DTX cases and keep_files support

parent 2c9bc378
Loading
Loading
Loading
Loading
+125 −55
Original line number Diff line number Diff line
@@ -14,69 +14,73 @@ DTX_ON = "DTX_ON"
DTX_OFF = "DTX_OFF"


# TODO: Clarify if this should also be tested with DTX, see #1122
TESTCASES = [
# testcases where DTX is supported
TESTCASES_WITH_DTX = [
    # stereo
    ["stereo", 32000, "EXT", "DTX_OFF"],
    ["stereo", 48000, "MONO", "DTX_OFF"],
    ["stereo", 16400, "5_1", "DTX_OFF"],
    ["stereo", 256000, "7_1_4", "DTX_OFF"],
    ["stereo", 32000, "EXT"],
    ["stereo", 48000, "MONO"],
    ["stereo", 16400, "5_1"],
    ["stereo", 256000, "7_1_4"],
    # param ISM
    ["ISM4", 32000, "BINAURAL_ROOM_REVERB", "DTX_OFF"],
    ["ISM3", 24400, "STEREO", "DTX_OFF"],
    ["ISM4", 24400, "5_1_2", "DTX_OFF"],
    ["ISM3", 32000, "HOA2", "DTX_OFF"],
    ["ISM4", 32000, "BINAURAL_ROOM_REVERB"],
    ["ISM3", 24400, "STEREO"],
    ["ISM4", 24400, "5_1_2"],
    ["ISM3", 32000, "HOA2"],
    # discrete ISM
    ["ISM3", 64000, "BINAURAL", "DTX_OFF"],
    ["ISM1", 32000, "BINAURAL_ROOM_IR", "DTX_OFF"],
    ["ISM2", 96000, "7_1", "DTX_OFF"],
    ["ISM1", 80000, "MONO", "DTX_OFF"],
    ["ISM4", 128000, "FOA", "DTX_OFF"],
    ["ISM3", 64000, "BINAURAL"],
    ["ISM2", 96000, "7_1"],
    ["ISM1", 80000, "MONO"],
    ["ISM4", 128000, "FOA"],
    # MASA
    ["MASA1TC", 24400, "BINAURAL_ROOM_IR", "DTX_OFF"],
    ["MASA2TC", 80000, "stereo", "DTX_OFF"],
    ["MASA1TC", 16400, "7_1_4", "DTX_OFF"],
    ["MASA2TC", 256000, "HOA3", "DTX_OFF"],
    ["MASA1TC", 128000, "EXT", "DTX_OFF"],
    ["MASA1TC", 24400, "BINAURAL_ROOM_IR"],
    ["MASA2TC", 80000, "stereo"],
    ["MASA1TC", 16400, "7_1_4"],
    ["MASA2TC", 256000, "HOA3"],
    ["MASA1TC", 128000, "EXT"],
    # SBA
    ["HOA3", 64000, "BINAURAL"],
    ["HOA2", 80000, "EXT"],
    ["FOA", 13200, "stereo"],
]

# testcases with no DTX support
TESTCASES_NO_DTX = [
    # SBA
    ["FOA", 256000, "BINAURAL_ROOM_REVERB"],
    ["HOA3", 512000, "5_1_4"],
    # MC
    # McMasa
    ["MC_5_1", 16400, "BINAURAL_ROOM_IR", "DTX_OFF"],
    ["MC_7_1_4", 80000, "mono", "DTX_OFF"],
    ["MC_5_1_2", 24400, "EXT", "DTX_OFF"],
    ["MC_5_1", 16400, "BINAURAL_ROOM_IR"],
    ["MC_7_1_4", 80000, "mono"],
    ["MC_5_1_2", 24400, "EXT"],
    # paramMC
    ["MC_5_1_2", 48000, "BINAURAL", "DTX_OFF"],
    ["MC_7_1", 80000, "EXT", "DTX_OFF"],
    ["MC_7_1_4", 128000, "FOA", "DTX_OFF"],
    ["MC_5_1_2", 48000, "BINAURAL"],
    ["MC_7_1", 80000, "EXT"],
    ["MC_7_1_4", 128000, "FOA"],
    # paramUpmix
    ["MC_7_1_4", 160000, "stereo", "DTX_OFF"],
    ["MC_7_1_4", 160000, "stereo"],
    # discrete MC
    ["MC_5_1_2", 512000, "BINAURAL_ROOM_REVERB", "DTX_OFF"],
    ["MC_7_1", 128000, "EXT", "DTX_OFF"],
    ["MC_7_1_4", 256000, "5_1", "DTX_OFF"],
    # SBA
    ["HOA3", 64000, "BINAURAL", "DTX_OFF"],
    ["FOA", 256000, "BINAURAL_ROOM_REVERB", "DTX_OFF"],
    ["HOA2", 80000, "EXT", "DTX_OFF"],
    ["HOA3", 512000, "5_1_4", "DTX_OFF"],
    ["FOA", 80000, "stereo", "DTX_OFF"],
    ["MC_5_1_2", 512000, "BINAURAL_ROOM_REVERB"],
    ["MC_7_1", 128000, "EXT"],
    ["MC_7_1_4", 256000, "5_1"],
    # OMASA
    ["OMASA_ISM1", 512000, "BINAURAL", "DTX_OFF"],
    ["OMASA_ISM2", 24400, "MONO", "DTX_OFF"],
    ["OMASA_ISM3", 80000, "7_1_4", "DTX_OFF"],
    ["OMASA_ISM4", 64000, "HOA3", "DTX_OFF"],
    ["OMASA_ISM2", 32000, "EXT", "DTX_OFF"],
    ["OMASA_ISM1", 512000, "BINAURAL"],
    ["OMASA_ISM2", 24400, "MONO"],
    ["OMASA_ISM3", 80000, "7_1_4"],
    ["OMASA_ISM4", 64000, "HOA3"],
    ["OMASA_ISM2", 32000, "EXT"],
    # OSBA
    ["OSBA_ISM2_HOA2", 64000, "BINAURAL_ROOM_IR", "DTX_OFF"],
    ["OSBA_ISM4_FOA", 512000, "BINAURAL_ROOM_REVERB", "DTX_OFF"],
    ["OSBA_ISM3_HOA3", 128000, "EXT", "DTX_OFF"],
    ["OSBA_ISM2_HOA3", 96000, "5_1", "DTX_OFF"],
    ["OSBA_ISM1_HOA2", 32000, "mono", "DTX_OFF"],
    ["OSBA_ISM2_HOA2", 64000, "BINAURAL_ROOM_IR"],
    ["OSBA_ISM4_FOA", 512000, "BINAURAL_ROOM_REVERB"],
    ["OSBA_ISM3_HOA3", 128000, "EXT"],
    ["OSBA_ISM2_HOA3", 96000, "5_1"],
    ["OSBA_ISM1_HOA2", 32000, "mono"],
]
DLY_PROFILE = SCRIPTS_DIR.joinpath("dly_error_profiles/dly_error_profile_0.dat")
JBM_NEUTRAL_DELAY_MS = 60


def get_options(in_format, bitrate, dtx):
def get_options(in_format, dtx):
    options = list()

    if dtx:
@@ -147,19 +151,82 @@ INPUT_FILES = {
    "OSBA_ISM1_HOA2": "stvOSBA_1ISM_2OA48c.wav",
}

OUTPUT_FOLDER_IF_KEEP_FILES = pathlib.Path(__file__).parent.joinpath("output-jbm-be")
OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM = OUTPUT_FOLDER_IF_KEEP_FILES.joinpath("no-jbm")
OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL = OUTPUT_FOLDER_IF_KEEP_FILES.joinpath(
    "neutral-profile"
)


@pytest.mark.parametrize(
    "in_format,bitrate,out_format", TESTCASES_NO_DTX + TESTCASES_WITH_DTX
)
def test_be_for_jbm_neutral_dly_profile_no_dtx(
    in_format,
    bitrate,
    out_format,
    dut_encoder_frontend,
    dut_decoder_frontend,
    keep_files,
):
    run_test(
        in_format,
        bitrate,
        out_format,
        DTX_OFF,
        dut_encoder_frontend,
        dut_decoder_frontend,
        keep_files,
    )


@pytest.mark.parametrize("in_format,bitrate,out_format,dtx", TESTCASES)
def test_be_for_jbm_neutral_dly_profile(
    in_format, bitrate, out_format, dtx, dut_encoder_frontend, dut_decoder_frontend
@pytest.mark.parametrize("in_format,bitrate,out_format", TESTCASES_WITH_DTX)
def test_be_for_jbm_neutral_dly_profile_with_dtx(
    in_format,
    bitrate,
    out_format,
    dut_encoder_frontend,
    dut_decoder_frontend,
    keep_files,
):
    run_test(
        in_format,
        bitrate,
        out_format,
        DTX_ON,
        dut_encoder_frontend,
        dut_decoder_frontend,
        keep_files,
    )


def run_test(
    in_format,
    bitrate,
    out_format,
    dtx,
    dut_encoder_frontend,
    dut_decoder_frontend,
    keep_files,
):
    if keep_files:
        OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL.mkdir(exist_ok=True, parents=True)
        OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM.mkdir(exist_ok=True, parents=True)

    with TemporaryDirectory() as tmp_dir:
        tmp_dir = pathlib.Path(tmp_dir)
        output_dir_no_jbm = (
            OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM if keep_files else tmp_dir
        )
        output_dir_neutral = (
            OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL if keep_files else tmp_dir
        )

        # run encoder
        bitstream_file = tmp_dir.joinpath(f"{in_format}.192").absolute()
        sampling_rate_khz = 48
        input_file = TESTV_DIR.joinpath(INPUT_FILES[in_format])
        options = get_options(in_format, bitrate, dtx == DTX_ON)
        options = get_options(in_format, dtx == DTX_ON)
        dut_encoder_frontend.run(
            bitrate,
            sampling_rate_khz,
@@ -170,11 +237,13 @@ def test_be_for_jbm_neutral_dly_profile(
        )

        # run decoder without network simulation
        output = tmp_dir.joinpath(f"{in_format}-{bitrate}-{out_format}.wav").absolute()
        output = output_dir_no_jbm.joinpath(
            f"{in_format}-{bitrate}-{out_format}.wav"
        ).absolute()
        dut_decoder_frontend.run(out_format, sampling_rate_khz, bitstream_file, output)

        # run decoder with network simulation
        output_jbm = output.with_suffix(".jbm-0.wav")
        output_jbm = output_dir_neutral.joinpath(output.with_suffix(".jbm-0.wav").name)
        dut_decoder_frontend.run(
            out_format,
            sampling_rate_khz,
@@ -188,7 +257,6 @@ def test_be_for_jbm_neutral_dly_profile(
        x_jbm, _ = audiofile.readfile(output_jbm)

        # strip jbm delay
        # TODO: this may need to be adapted to handle variable offsets based on outcome of #1122
        cmp_result = audioarray.compare(
            x,
            x_jbm,
@@ -197,4 +265,6 @@ def test_be_for_jbm_neutral_dly_profile(
            test_start_offset_ms=JBM_NEUTRAL_DELAY_MS,
        )
        if not cmp_result["bitexact"]:
            pytest.fail(f"Difference between no jbm and zero-delay jbm decoding found! Max abs diff: {cmp_result['max_abs_diff']}")
            pytest.fail(
                f"Difference between no jbm and zero-delay jbm decoding found! Max abs diff: {cmp_result['max_abs_diff']}"
            )