diff --git a/tests/split_rendering/constants.py b/tests/split_rendering/constants.py index aa9e3672207dd0c2af0047458d957db9112a8972..e50d916cf6f24d9455492e44cff88fb056caa40e 100644 --- a/tests/split_rendering/constants.py +++ b/tests/split_rendering/constants.py @@ -57,7 +57,14 @@ from tests.renderer.constants import ( ) """ Renderer configurations """ -RENDERER_CONFIGS_TO_TEST = [str(cfg.stem) for cfg in RENDER_CFG_DIR.glob("*.txt")] +RENDERER_CONFIGS_DEFAULT_CODEC = [str(cfg.stem) for cfg in RENDER_CFG_DIR.glob("*_default.txt")] +RENDERER_CONFIGS_LCLD_CODEC = [str(cfg.stem) for cfg in RENDER_CFG_DIR.glob("*_lcld.txt")] +RENDERER_CONFIGS_LC3PLUS_CODEC = [str(cfg.stem) for cfg in RENDER_CFG_DIR.glob("*_lc3plus.txt")] + +RENDERER_CONFIGS_TO_TEST_AMBI = RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC +RENDERER_CONFIGS_TO_TEST_MC = RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LCLD_CODEC +RENDERER_CONFIGS_TO_TEST_ISM = RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LCLD_CODEC +RENDERER_CONFIGS_TO_TEST_MASA = RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC """ IVAS specific constants """ FORMAT_TO_IVAS_COD_FORMAT = { @@ -75,8 +82,36 @@ FORMAT_TO_IVAS_COD_FORMAT = { "FOA": ["-sba", "1"], "HOA2": ["-sba", "2"], "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, } +IVAS_BITRATES_AMBI = ["96000", "512000"] +IVAS_BITRATES_MC = ["128000", "384000"] +# TODO: Enable after MC 160kbps split rendering support +# IVAS_BITRATES_MC = ["128000", "160000", "384000"] +IVAS_BITRATES_ISM = ["128000"] +# IVAS_BITRATES_MASA = ["128000"] + IVAS_MAX_ISM_BITRATE = { "1": "128000", "2": "256000", @@ -84,10 +119,12 @@ IVAS_MAX_ISM_BITRATE = { "4": "512000", } +INPUT_DURATION_SEC = 5 + """ Encoder commandline template """ SPLIT_PRE_COD_CMD = [ str(TESTS_DIR.parent.parent.joinpath("IVAS_cod")), - "512000", + "", # 1 -> bitrate "48", "", # 3 -> input file "", # 4 -> output bitstream diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_0dof_256k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_0dof_256k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_0dof_256k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_0dof_256k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_0dof_320k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_0dof_320k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_0dof_320k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_0dof_320k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_0dof_384k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_0dof_384k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_0dof_384k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_0dof_384k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_0dof_512k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_0dof_512k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_0dof_512k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_0dof_512k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_0dof_768k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_0dof_768k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_0dof_768k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_0dof_768k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_1dof_512k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_1dof_512k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_1dof_512k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_1dof_512k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_1dof_768k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_1dof_768k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_1dof_768k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_1dof_768k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_2dof_512k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_2dof_512k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_2dof_512k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_2dof_512k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_2dof_768k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_2dof_768k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_2dof_768k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_2dof_768k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dof_384k_lc3plus.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_384k_lc3plus.txt new file mode 100644 index 0000000000000000000000000000000000000000..2a726e8470664caa0df11fc334fa5e71cb837772 --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_384k_lc3plus.txt @@ -0,0 +1,5 @@ +[SPLITREND] +BITRATE = 384000; +DOF = 3; +HQMODE = 0; +CODEC = LC3PLUS; diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dof_384k_lcld.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_384k_lcld.txt new file mode 100644 index 0000000000000000000000000000000000000000..c2172074d4d72dcd70784277db2c3e5713348631 --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_384k_lcld.txt @@ -0,0 +1,5 @@ +[SPLITREND] +BITRATE = 384000; +DOF = 3; +HQMODE = 0; +CODEC = LCLD; diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dof_512k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_512k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_3dof_512k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_3dof_512k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_lc3plus.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_lc3plus.txt new file mode 100644 index 0000000000000000000000000000000000000000..0caa653c0d48a0770e291c1f75418a4a79684c7c --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_lc3plus.txt @@ -0,0 +1,5 @@ +[SPLITREND] +BITRATE = 768000; +DOF = 3; +HQMODE = 0; +CODEC = LC3PLUS; diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_lcld.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_lcld.txt new file mode 100644 index 0000000000000000000000000000000000000000..825543d57fdeb31d79072ce07d9b9d8b53a270c2 --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_lcld.txt @@ -0,0 +1,5 @@ +[SPLITREND] +BITRATE = 768000; +DOF = 3; +HQMODE = 0; +CODEC = LCLD; diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k_lc3plus.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k_lc3plus.txt new file mode 100644 index 0000000000000000000000000000000000000000..378cca9c25b15ef7dc228ca173e863d2472eba3a --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k_lc3plus.txt @@ -0,0 +1,5 @@ +[SPLITREND] +BITRATE = 512000; +DOF = 3; +HQMODE = 1; +CODEC = LC3PLUS; diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k_lcld.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k_lcld.txt new file mode 100644 index 0000000000000000000000000000000000000000..226600ab0631e0bcf66f72f37bad3b984ba904b5 --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_512k_lcld.txt @@ -0,0 +1,5 @@ +[SPLITREND] +BITRATE = 512000; +DOF = 3; +HQMODE = 1; +CODEC = LCLD; diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k_default.txt similarity index 100% rename from tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k.txt rename to tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k_default.txt diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k_lc3plus.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k_lc3plus.txt new file mode 100644 index 0000000000000000000000000000000000000000..d9df2f2254f9642de056fe93d4b31c36e99f305d --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k_lc3plus.txt @@ -0,0 +1,5 @@ +[SPLITREND] +BITRATE = 768000; +DOF = 3; +HQMODE = 1; +CODEC = LC3PLUS; diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k_lcld.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k_lcld.txt new file mode 100644 index 0000000000000000000000000000000000000000..e8f2ff8acb8a6c1be2e2ef0b41871bac1775ff40 --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dofhq_768k_lcld.txt @@ -0,0 +1,5 @@ +[SPLITREND] +BITRATE = 768000; +DOF = 3; +HQMODE = 1; +CODEC = LCLD; diff --git a/tests/split_rendering/test_split_rendering.py b/tests/split_rendering/test_split_rendering.py index 3d93ee980a4f9b2fc06a3028248b0e8209cd6b92..82e8a0ac58717b2507d94917f0fc9c32bc8563f0 100644 --- a/tests/split_rendering/test_split_rendering.py +++ b/tests/split_rendering/test_split_rendering.py @@ -34,17 +34,19 @@ from tests.split_rendering.utils import * @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) +@pytest.mark.parametrize("bitrate", IVAS_BITRATES_AMBI) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) -def test_ambisonics_full_chain_split(test_info, in_fmt, render_config, trajectory): - if in_fmt in ("MONO", "STEREO",): - pytest.xfail("Split Rendering currently not supported with MONO or STEREO") +def test_ambisonics_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): + if "0dof_768k_lc3plus" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") 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( in_fmt=in_fmt, + bitrate=bitrate, render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"), pre_trajectory=pre_trajectory, post_trajectory=post_trajectory, @@ -53,11 +55,11 @@ def test_ambisonics_full_chain_split(test_info, in_fmt, render_config, trajector @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory): - if in_fmt in ("MONO", "STEREO",): - pytest.xfail("Split Rendering currently not supported with MONO or STEREO") + if "0dof_768k_lc3plus" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -75,17 +77,21 @@ def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory) @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) +@pytest.mark.parametrize("bitrate", IVAS_BITRATES_MC) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) -def test_multichannel_full_chain_split(test_info, in_fmt, render_config, trajectory): - if "768k" in render_config: - pytest.xfail("Unsupported bitrate for LC3plus") +def test_multichannel_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): + if "0dof_768k_default" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") + if in_fmt in ("MONO", "STEREO",): + pytest.xfail("Split Rendering currently not supported with MONO or STEREO") 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( in_fmt=in_fmt, + bitrate=bitrate, render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"), pre_trajectory=pre_trajectory, post_trajectory=post_trajectory, @@ -94,11 +100,13 @@ def test_multichannel_full_chain_split(test_info, in_fmt, render_config, traject @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) def test_multichannel_external_split(test_info, in_fmt, render_config, trajectory): - if "768k" in render_config: - pytest.xfail("Unsupported bitrate for LC3plus") + if "0dof_768k_default" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") + if in_fmt in ("MONO", "STEREO",): + pytest.xfail("Split Rendering currently not supported with MONO or STEREO") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -116,17 +124,21 @@ def test_multichannel_external_split(test_info, in_fmt, render_config, trajector @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) +@pytest.mark.parametrize("bitrate", IVAS_BITRATES_ISM) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) -def test_ism_full_chain_split(test_info, in_fmt, render_config, trajectory): - if "768k" in render_config: - pytest.xfail("Unsupported bitrate for LC3plus") +def test_ism_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): + if "0dof_768k_default" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") + elif int(bitrate) > int(IVAS_MAX_ISM_BITRATE[in_fmt[-1]]): + pytest.skip(f"Unsupported configuration with {in_fmt} at {bitrate}bps") 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( in_fmt=in_fmt, + bitrate=bitrate, render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"), pre_trajectory=pre_trajectory, post_trajectory=post_trajectory, @@ -135,11 +147,11 @@ def test_ism_full_chain_split(test_info, in_fmt, render_config, trajectory): @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) def test_ism_external_split(test_info, in_fmt, render_config, trajectory): - if "768k" in render_config: - pytest.xfail("Unsupported bitrate for LC3plus") + if "0dof_768k_default" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -158,28 +170,35 @@ def test_ism_external_split(test_info, in_fmt, render_config, trajectory): # @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -# @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +# @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MASA) +# @pytest.mark.parametrize("bitrate", IVAS_BITRATES_MASA) # @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MASA) -# def test_masa_full_chain_split(test_info, in_fmt, render_config, trajectory): +# def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): +# if "0dof_768k_lc3plus" in render_config: +# pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") + # 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( # in_fmt=in_fmt, +# bitrate=bitrate, # render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"), # pre_trajectory=pre_trajectory, # post_trajectory=post_trajectory, # output_path_base=OUTPUT_PATH_CUT, # ) -# -# + # @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -# @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +# @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MASA) # @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MASA) # def test_masa_external_split(test_info, in_fmt, render_config, trajectory): +# if "0dof_768k_lc3plus" in render_config: +# pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") + # post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") # pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") -# + # run_external_split_rendering( # in_fmt=in_fmt, # render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"), diff --git a/tests/split_rendering/test_split_rendering_be_comparison.py b/tests/split_rendering/test_split_rendering_be_comparison.py index 5f0d07b23a3e10c51e6f7bfa149dd48839f19c40..70ee753af29e28996f1f6bb19e8ab29f18042ca0 100644 --- a/tests/split_rendering/test_split_rendering_be_comparison.py +++ b/tests/split_rendering/test_split_rendering_be_comparison.py @@ -34,11 +34,12 @@ from tests.split_rendering.utils import * @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) +@pytest.mark.parametrize("bitrate", IVAS_BITRATES_AMBI) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) -def test_ambisonics_full_chain_split(test_info, in_fmt, render_config, trajectory): - if in_fmt != "HOA3": - pytest.xfail("Split Rendering currently only supported with HOA3") +def test_ambisonics_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): + if "0dof_768k_lc3plus" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -46,6 +47,7 @@ def test_ambisonics_full_chain_split(test_info, in_fmt, render_config, trajector 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, @@ -53,11 +55,11 @@ def test_ambisonics_full_chain_split(test_info, in_fmt, render_config, trajector @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory): - if in_fmt != "HOA3": - pytest.xfail("Split Rendering currently only supported with HOA3") + if "0dof_768k_lc3plus" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -75,11 +77,12 @@ def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory) @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) +@pytest.mark.parametrize("bitrate", IVAS_BITRATES_MC) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) -def test_multichannel_full_chain_split(test_info, in_fmt, render_config, trajectory): - if "768k" in render_config: - pytest.xfail("Unsupported bitrate for LC3plus") +def test_multichannel_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): + if "0dof_768k_default" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -87,6 +90,7 @@ def test_multichannel_full_chain_split(test_info, in_fmt, render_config, traject 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, @@ -94,11 +98,11 @@ def test_multichannel_full_chain_split(test_info, in_fmt, render_config, traject @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) def test_multichannel_external_split(test_info, in_fmt, render_config, trajectory): - if "768k" in render_config: - pytest.xfail("Unsupported bitrate for LC3plus") + if "0dof_768k_default" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -116,11 +120,14 @@ def test_multichannel_external_split(test_info, in_fmt, render_config, trajector @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) +@pytest.mark.parametrize("bitrate", IVAS_BITRATES_ISM) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) -def test_ism_full_chain_split(test_info, in_fmt, render_config, trajectory): - if "768k" in render_config: - pytest.xfail("Unsupported bitrate for LC3plus") +def test_ism_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): + if "0dof_768k_default" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") + elif int(bitrate) > int(IVAS_MAX_ISM_BITRATE[in_fmt[-1]]): + pytest.skip(f"Unsupported configuration with {in_fmt} at {bitrate}bps") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -128,6 +135,7 @@ def test_ism_full_chain_split(test_info, in_fmt, render_config, trajectory): 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, @@ -135,11 +143,11 @@ def test_ism_full_chain_split(test_info, in_fmt, render_config, trajectory): @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) def test_ism_external_split(test_info, in_fmt, render_config, trajectory): - if "768k" in render_config: - pytest.xfail("Unsupported bitrate for LC3plus") + if "0dof_768k_default" in render_config: + pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") @@ -158,28 +166,36 @@ def test_ism_external_split(test_info, in_fmt, render_config, trajectory): # @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -# @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +# @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MASA) +# @pytest.mark.parametrize("bitrate", IVAS_BITRATES_MASA) # @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MASA) -# def test_masa_full_chain_split(test_info, in_fmt, render_config, trajectory): +# def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): +# if "0dof_768k_lc3plus" in render_config: +# pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") + # 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, # ) -# -# + + # @pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) -# @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST) +# @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MASA) # @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MASA) # def test_masa_external_split(test_info, in_fmt, render_config, trajectory): +# if "0dof_768k_lc3plus" in render_config: +# pytest.xfail("0DOF 768kbps LC3plus codec is unsupported") + # post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") # pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") -# + # compare_external_split_args( # test_info, # in_fmt=in_fmt, diff --git a/tests/split_rendering/utils.py b/tests/split_rendering/utils.py index 6215b3e8a1e577d96be4361feadb263618c802a4..21fe2304ba852fccac82ca29a965790ed9543247 100644 --- a/tests/split_rendering/utils.py +++ b/tests/split_rendering/utils.py @@ -27,12 +27,15 @@ """ import sys +import numpy as np from pathlib import Path from tempfile import TemporaryDirectory +from typing import Tuple from tests.split_rendering.constants import * from tests.renderer.utils import check_BE, run_cmd, test_info +from tests.cut_pcm import cut_samples sys.path.append(SCRIPTS_DIR) from pyaudio3dtools.audiofile import readfile @@ -40,23 +43,25 @@ from pyaudio3dtools.audiofile import readfile def run_full_chain_split_rendering( in_fmt: str, + bitrate: str, render_config: Path, pre_trajectory: Path, post_trajectory: Path, output_path_base: Path, binary_suffix: str = "", is_comparetest: bool = False, -) -> Path: +) -> Tuple[np.ndarray, int]: """ Runs the full split rendering chain consisting of the IVAS encoder, decoder and split renderer """ with TemporaryDirectory() as tmp_dir: tmp_dir = Path(tmp_dir) + cut_in_file = tmp_dir.joinpath("cut_input.wav") ivas_bitstream = tmp_dir.joinpath("ivas.192") split_bitstream = tmp_dir.joinpath("split.bit") out_file = output_path_base.joinpath( - f"{in_fmt}_{pre_trajectory.stem}_split_full_{post_trajectory.stem}__config_{render_config.stem}.wav" + f"{in_fmt}_{bitrate}bps_{pre_trajectory.stem}_split_full_{post_trajectory.stem}__config_{render_config.stem}.wav" ) # check for metadata files @@ -69,8 +74,21 @@ def run_full_chain_split_rendering( cmd = SPLIT_PRE_COD_CMD[:] cmd[0] += binary_suffix + cmd[1] = bitrate if is_comparetest: - cmd[3] = str(FORMAT_TO_FILE_COMPARETEST[in_fmt]) + # Cut input if longer than INPUT_DURATION_SEC + in_file = FORMAT_TO_FILE_COMPARETEST[in_fmt] + in_data, in_fs = readfile(in_file) + if len(in_data) > INPUT_DURATION_SEC * in_fs: + cut_samples(in_file=in_file, + out_file=cut_in_file, + num_channels=FORMAT_TO_NCHAN[in_fmt], + sample_rate=in_fs, + start=0, + duration=INPUT_DURATION_SEC) + cmd[3] = str(cut_in_file) + else: + cmd[3] = str(in_file) else: cmd[3] = str(FORMAT_TO_FILE_SMOKETEST[in_fmt]) cmd[4] = str(ivas_bitstream) @@ -118,7 +136,7 @@ def run_external_split_rendering( output_path_base: Path, binary_suffix: str = "", is_comparetest: bool = False, -) -> Path: +) -> Tuple[np.ndarray, int]: """ Runs the exeternal split rendering chain consisting of the IVAS renderer in split-pre and split-post rendering mode