Commit 5bd06c2a authored by Jouni Paulus's avatar Jouni Paulus
Browse files

add OMASA into split rendering tests

parent 7f3bfafe
Loading
Loading
Loading
Loading
+60 −0
Original line number Diff line number Diff line
@@ -114,6 +114,14 @@ FORMAT_TO_FILE_SMOKETEST = {
    "NDP_ISM4": NCHAN_TO_FILE[4],
    "MASA1": NCHAN_TO_FILE[1],
    "MASA2": NCHAN_TO_FILE[2],
    "OMASA_1_1": NCHAN_TO_FILE[2],
    "OMASA_1_2": NCHAN_TO_FILE[3],
    "OMASA_1_3": NCHAN_TO_FILE[4],
    "OMASA_1_4": NCHAN_TO_FILE[5],
    "OMASA_2_1": NCHAN_TO_FILE[3],
    "OMASA_2_2": NCHAN_TO_FILE[4],
    "OMASA_2_3": NCHAN_TO_FILE[5],
    "OMASA_2_4": NCHAN_TO_FILE[6],
    "OSBA_1_1": NCHAN_TO_FILE[5],
    "OSBA_2_1": NCHAN_TO_FILE[6],
    "OSBA_3_1": NCHAN_TO_FILE[7],
@@ -149,6 +157,14 @@ FORMAT_TO_FILE_COMPARETEST = {
    "ISM4": TESTV_DIR.joinpath("stv4ISM48s.wav"),
    "MASA1": TESTV_DIR.joinpath("stv1MASA1TC48c.wav"),
    "MASA2": TESTV_DIR.joinpath("stv2MASA2TC48c.wav"),
    "OMASA_1_1": TESTV_DIR.joinpath("stvOMASA_1ISM_1MASA1TC48c.wav"),
    "OMASA_1_2": TESTV_DIR.joinpath("stvOMASA_2ISM_2MASA1TC48c.wav"),
    "OMASA_1_3": TESTV_DIR.joinpath("stvOMASA_3ISM_1MASA1TC48c.wav"),
    "OMASA_1_4": TESTV_DIR.joinpath("stvOMASA_4ISM_2MASA1TC48c.wav"),
    "OMASA_2_1": TESTV_DIR.joinpath("stvOMASA_1ISM_1MASA2TC48c.wav"),
    "OMASA_2_2": TESTV_DIR.joinpath("stvOMASA_2ISM_2MASA2TC48c.wav"),
    "OMASA_2_3": TESTV_DIR.joinpath("stvOMASA_3ISM_1MASA2TC48c.wav"),
    "OMASA_2_4": TESTV_DIR.joinpath("stvOMASA_4ISM_2MASA2TC48c.wav"),
    "OSBA_1_1": TESTV_DIR.joinpath("stvOSBA_1ISM_FOA48c.wav"),
    "OSBA_1_2": TESTV_DIR.joinpath("stvOSBA_1ISM_2OA48c.wav"),
    "OSBA_1_3": TESTV_DIR.joinpath("stvOSBA_1ISM_3OA48c.wav"),
@@ -192,6 +208,50 @@ FORMAT_TO_METADATA_FILES = {
    ],
    "MASA1": [str(TESTV_DIR.joinpath("stv1MASA1TC48c.met"))],
    "MASA2": [str(TESTV_DIR.joinpath("stv2MASA2TC48c.met"))],
    "OMASA_1_1": [
        str(TESTV_DIR.joinpath("stvISM1.csv")),
        str(TESTV_DIR.joinpath("stvOMASA_1ISM_1MASA1TC48c.met")),
    ],
    "OMASA_1_2": [
        str(TESTV_DIR.joinpath("stvISM1.csv")),
        str(TESTV_DIR.joinpath("stvISM2.csv")),
        str(TESTV_DIR.joinpath("stvOMASA_2ISM_2MASA1TC48c.met")),
    ],
    "OMASA_1_3": [
        str(TESTV_DIR.joinpath("stvISM1.csv")),
        str(TESTV_DIR.joinpath("stvISM2.csv")),
        str(TESTV_DIR.joinpath("stvISM3.csv")),
        str(TESTV_DIR.joinpath("stvOMASA_3ISM_1MASA1TC48c.met")),
    ],
    "OMASA_1_4": [
        str(TESTV_DIR.joinpath("stvISM1.csv")),
        str(TESTV_DIR.joinpath("stvISM2.csv")),
        str(TESTV_DIR.joinpath("stvISM3.csv")),
        str(TESTV_DIR.joinpath("stvISM4.csv")),
        str(TESTV_DIR.joinpath("stvOMASA_4ISM_2MASA1TC48c.met")),
    ],
    "OMASA_2_1": [
        str(TESTV_DIR.joinpath("stvISM1.csv")),
        str(TESTV_DIR.joinpath("stvOMASA_1ISM_1MASA2TC48c.met")),
    ],
    "OMASA_2_2": [
        str(TESTV_DIR.joinpath("stvISM1.csv")),
        str(TESTV_DIR.joinpath("stvISM2.csv")),
        str(TESTV_DIR.joinpath("stvOMASA_2ISM_2MASA2TC48c.met")),
    ],
    "OMASA_2_3": [
        str(TESTV_DIR.joinpath("stvISM1.csv")),
        str(TESTV_DIR.joinpath("stvISM2.csv")),
        str(TESTV_DIR.joinpath("stvISM3.csv")),
        str(TESTV_DIR.joinpath("stvOMASA_3ISM_1MASA2TC48c.met")),
    ],
    "OMASA_2_4": [
        str(TESTV_DIR.joinpath("stvISM1.csv")),
        str(TESTV_DIR.joinpath("stvISM2.csv")),
        str(TESTV_DIR.joinpath("stvISM3.csv")),
        str(TESTV_DIR.joinpath("stvISM4.csv")),
        str(TESTV_DIR.joinpath("stvOMASA_4ISM_2MASA2TC48c.met")),
    ],
}


+3 −2
Original line number Diff line number Diff line
<!------------------------------------------------------------------------------------------------------
   (C) 2023 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
   (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
   Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
   Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
   Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
@@ -41,13 +41,14 @@ The tests cover the following IVAS formats:
* Multi-Channel
* ISM
* MASA
* OMASA
* OSBA

The tests include both split rendering operating modes:
* Full chain: encoder, decoder, external renderer
* External: external renderer only

Note: OSBA format only supports the full chain split rendering mode.
Note: OSBA and OMASA formats only support the full chain split rendering mode.

Furthermore, the tests iterate over the following parameters:
* Renderer config file which specifies DoF (degrees of freedom), split rendering bitrate, and split rendering codec
+13 −0
Original line number Diff line number Diff line
@@ -81,6 +81,9 @@ RENDERER_CONFIGS_TO_TEST_ISM = (
RENDERER_CONFIGS_TO_TEST_MASA = (
    RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC
)
RENDERER_CONFIGS_TO_TEST_OMASA = (
    RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC
)
RENDERER_CONFIGS_TO_TEST_OSBA = (
    RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC
)
@@ -109,6 +112,14 @@ FORMAT_TO_IVAS_COD_FORMAT = {
    "HOA3": ["-sba", "3"],
    "MASA1": ["-masa", "1"],
    "MASA2": ["-masa", "2"],
    "OMASA_1_1": ["-ism_masa", "1", "1"],
    "OMASA_1_2": ["-ism_masa", "2", "1"],
    "OMASA_1_3": ["-ism_masa", "3", "1"],
    "OMASA_1_4": ["-ism_masa", "4", "1"],
    "OMASA_2_1": ["-ism_masa", "1", "2"],
    "OMASA_2_2": ["-ism_masa", "2", "2"],
    "OMASA_2_3": ["-ism_masa", "3", "2"],
    "OMASA_2_4": ["-ism_masa", "4", "2"],
    "OSBA_1_1": ["-ism_sba", "1", "1"],
    "OSBA_1_2": ["-ism_sba", "1", "2"],
    "OSBA_1_3": ["-ism_sba", "1", "3"],
@@ -127,6 +138,7 @@ INPUT_FORMATS_AMBI_SPLIT_REND = ["FOA", "HOA3"]
INPUT_FORMATS_MC_SPLIT_REND = ["5_1", "7_1_4"]
INPUT_FORMATS_ISM_SPLIT_REND = ["ISM4"]
INPUT_FORMATS_MASA_SPLIT_REND = ["MASA1", "MASA2"]
INPUT_FORMATS_OMASA_SPLIT_REND = ["OMASA_1_1", "OMASA_2_4"]  # number of TCs in MASA, number of ISM objects
INPUT_FORMATS_OSBA_SPLIT_REND = [
    "OSBA_1_1",
    "OSBA_4_3",
@@ -136,6 +148,7 @@ IVAS_BITRATES_AMBI = ["80000", "512000"]
IVAS_BITRATES_MC = ["128000", "160000", "384000"]
IVAS_BITRATES_ISM = ["128000"]
IVAS_BITRATES_MASA = ["24400", "128000"]
IVAS_BITRATES_OMASA = ["16400", "32000", "96000", "384000"]  # test all underlying coding modes (here, for 4 ISM)
IVAS_BITRATES_OSBA = ["256000", "512000"]

IVAS_MAX_ISM_BITRATE = {
+24 −0
Original line number Diff line number Diff line
@@ -234,6 +234,29 @@ def test_masa_external_split(test_info, in_fmt, render_config, trajectory):
    )


""" OMASA """


@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST)
@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_OMASA)
@pytest.mark.parametrize("bitrate", IVAS_BITRATES_OMASA)
@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_OMASA_SPLIT_REND)
def test_omasa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory):
    check_xfail(test_info, in_fmt, render_config, bitrate)

    post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv")
    pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed")

    run_full_chain_split_rendering(
        test_info,
        in_fmt=in_fmt,
        bitrate=bitrate,
        render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"),
        pre_trajectory=pre_trajectory,
        post_trajectory=post_trajectory,
    )


""" OSBA """


@@ -288,6 +311,7 @@ full_chain_split_pcm_params = [
    ("7_1_4", "512000", "split_renderer_config_3dofhq_512k_lc3plus"),
    ("ISM4", "384000", "split_renderer_config_2dof_768k_default"),
    ("MASA2", "256000", "split_renderer_config_3dof_384k_lcld"),
    ("OMASA_2_4", "256000", "split_renderer_config_3dof_384k_lcld"),
]


+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ def run_full_chain_split_rendering(
        if in_fmt.upper().startswith("OSBA"):
            # use same MD as ISM
            in_meta_files = FORMAT_TO_METADATA_FILES[f"ISM{in_fmt[5]}"]
        elif in_fmt.upper().startswith("ISM") or in_fmt.upper().startswith("MASA"):
        elif in_fmt.upper().startswith("ISM") or in_fmt.upper().startswith("MASA") or in_fmt.upper().startswith("OMASA"):
            in_meta_files = FORMAT_TO_METADATA_FILES[in_fmt]
        else:
            in_meta_files = None