Commit c88d9841 authored by Jan Kiene's avatar Jan Kiene
Browse files

add ISM "special MD" testcases

parent e07bed08
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@ the United Nations Convention on Contracts on the International Sales of Goods.
DTX_ON = "DTXon"
DTX_OFF = "DTXoff"

ISM_MD_EXTENDED = "MDextended"
ISM_MD_NULL = "MDnull"

TESTVECTOR_FOR_INPUT_FORMAT = {
    "STEREO": "ltv{fs}_STEREO.wav",
    "MC_5_1": "ltv{fs}_MC51.wav",
@@ -45,6 +48,10 @@ TESTVECTOR_FOR_INPUT_FORMAT = {
    "ISM2": "ltv{fs}_2ISM.wav",
    "ISM3": "ltv{fs}_3ISM.wav",
    "ISM4": "ltv{fs}_4ISM.wav",
    "ISM1": "ltv{fs}_1ISM.wav",
    "ISM2": "ltv{fs}_2ISM.wav",
    "ISM3": "ltv{fs}_3ISM.wav",
    "ISM4": "ltv{fs}_4ISM.wav",
    # TODO: MASA, once created
}
METADATA_FOR_INPUT_FORMAT = {
@@ -113,6 +120,10 @@ BITRATES_ISM1 = BITRATES_ALL[:9]
BITRATES_ISM2 = BITRATES_ALL[1:10]
BITRATES_ISM3 = BITRATES_ALL[2:11]
BITRATES_ISM4 = BITRATES_ALL[2:]
BITRATES_ISM1_EXTENDED = [b for b in BITRATES_ISM1 if b > 64000]
BITRATES_ISM2_EXTENDED = [b for b in BITRATES_ISM2 if b > 64000]
BITRATES_ISM3_EXTENDED = [b for b in BITRATES_ISM3 if b > 64000]
BITRATES_ISM4_EXTENDED = [b for b in BITRATES_ISM4 if b > 64000]

# sampling rates
SAMPLING_RATES_ALL = [16, 32, 48]
+170 −24
Original line number Diff line number Diff line
@@ -34,66 +34,99 @@ from .constants import *
from . import TESTV_PATH, DUT_PATH, is_be_to_ref


### --------------- Helper functions ---------------


def get_testv(input_format, sampling_rate):
    testv = TESTVECTOR_FOR_INPUT_FORMAT[input_format].format(fs=sampling_rate)
    return TESTV_PATH.joinpath(testv)


def get_md(input_format):
def get_md(input_format, md_type=None):
    md_files = METADATA_FOR_INPUT_FORMAT.get(input_format, list())
    return [str(TESTV_PATH.joinpath(f)) for f in md_files]
    if md_type == ISM_MD_NULL:
        md_files = ["NULL" for f in md_files]
    else:
        md_files = [str(TESTV_PATH.joinpath(f)) for f in md_files]
    return md_files


def get_options(input_format):
    return list(CMDL_OPTIONS_FOR_INPUT_FORMAT[input_format])
def get_options(input_format, md_type=None):
    options = list(CMDL_OPTIONS_FOR_INPUT_FORMAT[input_format])
    if md_type == ISM_MD_EXTENDED:
        assert input_format in INPUT_FORMATS_OBJECT_BASED
        options[1] = f"+{options[1]}"
    return options


def run_check(
    input_format, bitrate, sampling_rate, dtx, encoder_frontend, is_ref_creation
):
def get_encoder_inputs(input_format, sampling_rate, md_type=None):
    testv = get_testv(input_format, sampling_rate)
    options = get_options(input_format)
    md_files = get_md(input_format)
    options = get_options(input_format, md_type)
    md_files = get_md(input_format, md_type)
    options.extend(md_files)
    return testv, options

    bitstream = DUT_PATH.joinpath(
        f"{testv.stem}-{input_format}-{bitrate}kbps-{sampling_rate}kHz-{dtx}.192"
    )

def run_check(
    dut_bitstream,
    bitrate,
    sampling_rate,
    testv,
    options,
    encoder_frontend,
    is_ref_creation,
    dtx_mode=False,
):
    encoder_frontend.run(
        bitrate,
        sampling_rate,
        str(testv),
        str(bitstream),
        dtx_mode=dtx == DTX_ON,
        str(dut_bitstream),
        dtx_mode=dtx_mode,
        add_option_list=options,
    )

    if not is_ref_creation:
        if not is_be_to_ref(bitstream):
        if not is_be_to_ref(dut_bitstream):
            pytest.fail(f"Bitstream file differs from reference")


### --------------- Actual testcase definitions ---------------

# "Vanilla" encoder modes

STEREO_PARAMS = list(
    product(["STEREO"], BITRATES_STEREO, SAMPLING_RATES_ALL, [False, True])
    product(["STEREO"], BITRATES_STEREO, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON])
)
MC_PARAMS = list(product(INPUT_FORMATS_MC, BITRATES_ALL, SAMPLING_RATES_ALL, [False]))
MC_PARAMS = list(product(INPUT_FORMATS_MC, BITRATES_ALL, SAMPLING_RATES_ALL, [DTX_OFF]))
SBA_PARAMS = list(
    (
        product(
            INPUT_FORMATS_SCENE_BASED,
            BITRATES_ALL[:7],
            SAMPLING_RATES_ALL,
            [False, True],
            [DTX_OFF, DTX_ON],
        )
    )
) + list(
    (product(INPUT_FORMATS_SCENE_BASED, BITRATES_ALL[7:], SAMPLING_RATES_ALL, [False]))
    (
        product(
            INPUT_FORMATS_SCENE_BASED, BITRATES_ALL[7:], SAMPLING_RATES_ALL, [DTX_OFF]
        )
    )
)
ISM1_PARAMS = list(
    product(["ISM1"], BITRATES_ISM1, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON])
)
ISM2_PARAMS = list(
    product(["ISM2"], BITRATES_ISM2, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON])
)
ISM3_PARAMS = list(
    product(["ISM3"], BITRATES_ISM3, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON])
)
ISM4_PARAMS = list(
    product(["ISM4"], BITRATES_ISM4, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON])
)
ISM1_PARAMS = list(product(["ISM1"], BITRATES_ISM1, SAMPLING_RATES_ALL, [False, True]))
ISM2_PARAMS = list(product(["ISM2"], BITRATES_ISM2, SAMPLING_RATES_ALL, [False, True]))
ISM3_PARAMS = list(product(["ISM3"], BITRATES_ISM3, SAMPLING_RATES_ALL, [False, True]))
ISM4_PARAMS = list(product(["ISM4"], BITRATES_ISM4, SAMPLING_RATES_ALL, [False, True]))
# TODO: MASA
ENCODER_PARAMS = (
    STEREO_PARAMS
@@ -115,6 +148,119 @@ def test_encoder(
    dut_encoder_frontend,
    update_ref,
):
    testv, options = get_encoder_inputs(input_format, sampling_rate)
    bitstream = DUT_PATH.joinpath(
        f"{testv.stem}-{input_format}-{bitrate}kbps-{sampling_rate}kHz-{dtx}.192"
    )
    run_check(
        input_format, bitrate, sampling_rate, dtx, dut_encoder_frontend, update_ref == 1
        bitstream,
        bitrate,
        sampling_rate,
        testv,
        options,
        dut_encoder_frontend,
        update_ref == 1,
        dtx == DTX_ON,
    )


# ISM "special" metadata cases: extended metadata and NULL

ISM1_EXTENDED_PARAMS = list(
    product(
        ["ISM1"],
        BITRATES_ISM1_EXTENDED,
        SAMPLING_RATES_ALL,
        [DTX_OFF, DTX_ON],
        [ISM_MD_EXTENDED],
    )
)
ISM2_EXTENDED_PARAMS = list(
    product(
        ["ISM2"],
        BITRATES_ISM2_EXTENDED,
        SAMPLING_RATES_ALL,
        [DTX_OFF, DTX_ON],
        [ISM_MD_EXTENDED],
    )
)
ISM3_EXTENDED_PARAMS = list(
    product(
        ["ISM3"],
        BITRATES_ISM3_EXTENDED,
        SAMPLING_RATES_ALL,
        [DTX_OFF, DTX_ON],
        [ISM_MD_EXTENDED],
    )
)
ISM4_EXTENDED_PARAMS = list(
    product(
        ["ISM4"],
        BITRATES_ISM4_EXTENDED,
        SAMPLING_RATES_ALL,
        [DTX_OFF, DTX_ON],
        [ISM_MD_EXTENDED],
    )
)
ISM1_NULL_PARAMS = list(
    product(
        ["ISM1"], BITRATES_ISM1, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON], [ISM_MD_NULL]
    )
)
ISM2_NULL_PARAMS = list(
    product(
        ["ISM2"], BITRATES_ISM2, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON], [ISM_MD_NULL]
    )
)
ISM3_NULL_PARAMS = list(
    product(
        ["ISM3"], BITRATES_ISM3, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON], [ISM_MD_NULL]
    )
)
ISM4_NULL_PARAMS = list(
    product(
        ["ISM4"], BITRATES_ISM4, SAMPLING_RATES_ALL, [DTX_OFF, DTX_ON], [ISM_MD_NULL]
    )
)
ISM_MD_SPECIAL_PARAMS = (
    ISM1_EXTENDED_PARAMS
    + ISM2_EXTENDED_PARAMS
    + ISM3_EXTENDED_PARAMS
    + ISM4_EXTENDED_PARAMS
    + ISM1_EXTENDED_PARAMS
    + ISM2_EXTENDED_PARAMS
    + ISM3_EXTENDED_PARAMS
    + ISM4_EXTENDED_PARAMS
)


@pytest.mark.parametrize(
    "input_format,bitrate,sampling_rate,dtx,md_type", ISM_MD_SPECIAL_PARAMS
)
def test_encoder_ism_MD_special(
    input_format,
    bitrate,
    sampling_rate,
    dtx,
    md_type,
    dut_encoder_frontend,
    update_ref,
):
    testv, options = get_encoder_inputs(input_format, sampling_rate, md_type)
    if md_type == ISM_MD_EXTENDED:
        input_format += "_ext_MD"
    elif md_type == ISM_MD_NULL:
        input_format += "_null_MD"
    bitstream = DUT_PATH.joinpath(
        f"{testv.stem}-{input_format}-{bitrate}kbps-{sampling_rate}kHz-{dtx}.192"
    )
    run_check(
        bitstream,
        bitrate,
        sampling_rate,
        testv,
        options,
        dut_encoder_frontend,
        update_ref == 1,
        dtx == DTX_ON,
    )