Commit b58f0a07 authored by Ke Zhao's avatar Ke Zhao
Browse files

Add split rendering full-chain OSBA BE tests

parent 730b1cbe
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -130,6 +130,18 @@ FORMAT_TO_FILE_COMPARETEST = {
    "ISM4": TESTV_DIR.joinpath("stv4ISM48s.wav"),
    "MASA1": TESTV_DIR.joinpath("stv1MASA1TC48c.wav"),
    "MASA2": TESTV_DIR.joinpath("stv2MASA2TC48c.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"),
    "OSBA_2_1": TESTV_DIR.joinpath("stvOSBA_2ISM_FOA48c.wav"),
    "OSBA_2_2": TESTV_DIR.joinpath("stvOSBA_2ISM_2OA48c.wav"),
    "OSBA_2_3": TESTV_DIR.joinpath("stvOSBA_2ISM_3OA48c.wav"),
    "OSBA_3_1": TESTV_DIR.joinpath("stvOSBA_3ISM_FOA48c.wav"),
    "OSBA_3_2": TESTV_DIR.joinpath("stvOSBA_3ISM_2OA48c.wav"),
    "OSBA_3_3": TESTV_DIR.joinpath("stvOSBA_3ISM_3OA48c.wav"),
    "OSBA_4_1": TESTV_DIR.joinpath("stvOSBA_4ISM_FOA48c.wav"),
    "OSBA_4_2": TESTV_DIR.joinpath("stvOSBA_4ISM_2OA48c.wav"),
    "OSBA_4_3": TESTV_DIR.joinpath("stvOSBA_4ISM_3OA48c.wav"),
    "META": TEST_VECTOR_DIR.joinpath("mixed_scene.txt"),
    "16ch_8+4+4": TESTV_DIR.joinpath("stv3OA48c.wav"),
    "4d4": TESTV_DIR.joinpath("stv71MC48c.wav"),
+4 −1
Original line number Diff line number Diff line
@@ -41,18 +41,21 @@ The tests cover the following IVAS formats:
* Multi-Channel
* ISM
* MASA
* OSBA

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

Note: MASA format only supports the full chain split rendering mode.
Note: OSBA format only supports 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
* Trajectory file
* Encoder/decoder bitrate (only for full-chain split rendering mode)

Some PLC and BINAURAL_SPLIT_PCM tests are also implemented.

## Directory Structure

```
+20 −19
Original line number Diff line number Diff line
@@ -82,6 +82,9 @@ RENDERER_CONFIGS_TO_TEST_ISM = (
RENDERER_CONFIGS_TO_TEST_MASA = (
    RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC
)
RENDERER_CONFIGS_TO_TEST_OSBA = (
    RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC
)
RENDERER_CONFIGS_TO_TEST_PLC = RENDERER_CONFIGS_FASTCONV_RENDERER

""" Trajectories """
@@ -107,36 +110,34 @@ FORMAT_TO_IVAS_COD_FORMAT = {
    "HOA3": ["-sba", "3"],
    "MASA1": ["-masa", "1"],
    "MASA2": ["-masa", "2"],
}

FORMAT_TO_NCHAN = {
    "MONO": 1,
    "STEREO": 2,
    "ISM1": 1,
    "ISM2": 2,
    "ISM3": 3,
    "ISM4": 4,
    "5_1": 6,
    "5_1_2": 8,
    "5_1_4": 10,
    "7_1": 8,
    "7_1_4": 12,
    "FOA": 4,
    "HOA2": 9,
    "HOA3": 16,
    "MASA1": 1,
    "MASA2": 2,
    "OSBA_1_1": ["-ism_sba", "1", "1"],
    "OSBA_1_2": ["-ism_sba", "1", "2"],
    "OSBA_1_3": ["-ism_sba", "1", "3"],
    "OSBA_2_1": ["-ism_sba", "2", "1"],
    "OSBA_2_2": ["-ism_sba", "2", "2"],
    "OSBA_2_3": ["-ism_sba", "2", "3"],
    "OSBA_3_1": ["-ism_sba", "3", "1"],
    "OSBA_3_2": ["-ism_sba", "3", "2"],
    "OSBA_3_3": ["-ism_sba", "3", "3"],
    "OSBA_4_1": ["-ism_sba", "4", "1"],
    "OSBA_4_2": ["-ism_sba", "4", "2"],
    "OSBA_4_3": ["-ism_sba", "4", "3"],
}

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 = ["MASA2"]
INPUT_FORMATS_OSBA_SPLIT_REND = [
    "OSBA_1_1",
    "OSBA_4_3",
]  # number of ISM objects, then SBA order

IVAS_BITRATES_AMBI = ["80000", "512000"]
IVAS_BITRATES_MC = ["128000", "160000", "384000"]
IVAS_BITRATES_ISM = ["128000"]
IVAS_BITRATES_MASA = ["24400", "128000"]
IVAS_BITRATES_OSBA = ["256000", "512000"]

IVAS_MAX_ISM_BITRATE = {
    "1": "128000",
+6 −2
Original line number Diff line number Diff line
@@ -41,9 +41,13 @@ def check_xfail(test_info, in_fmt, render_config, bitrate=None):
        and "0dof" in render_config
        and (
            "lc3plus" in render_config
            or (in_fmt in INPUT_FORMATS_ISM_SPLIT_REND or in_fmt in INPUT_FORMATS_MC_SPLIT_REND)
            or (
                "external_split" in test_info.node.name and in_fmt in INPUT_FORMATS_AMBI_SPLIT_REND
                in_fmt in INPUT_FORMATS_ISM_SPLIT_REND
                or in_fmt in INPUT_FORMATS_MC_SPLIT_REND
            )
            or (
                "external_split" in test_info.node.name
                and in_fmt in INPUT_FORMATS_AMBI_SPLIT_REND
            )  # CREND for external renderer ambisonics rendering uses LC3plus by default
        )
    ):
+23 −0
Original line number Diff line number Diff line
@@ -185,6 +185,29 @@ def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajec
    )


""" OSBA """


@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST)
@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_OSBA)
@pytest.mark.parametrize("bitrate", IVAS_BITRATES_OSBA)
@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_OSBA_SPLIT_REND)
def test_osba_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")

    compare_full_chain_split_args(
        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,
    )


""" PLC """


Loading