diff --git a/apps/renderer.c b/apps/renderer.c index 6255e87e44a90e478c4bc2b650ee9da170b75443..58c753fe0bd11fdbb5013d146e293ed3191bb5a4 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -810,6 +810,9 @@ int main( int16_t delayNumSamples = -1; int16_t delayNumSamples_orig = 0; int16_t zeroPad = 0; +#ifdef FIX_LARGE_RENDERER_DELAY_COMP + int16_t zeroPadToWrite = 0; +#endif int32_t delayTimeScale = 0; int16_t i, numChannels; ivas_error error = IVAS_ERR_OK; @@ -1840,7 +1843,11 @@ int main( if ( audioWriter != NULL ) { #endif - if ( delayNumSamples < outBufferSize ) +#ifdef FIX_LARGE_RENDERER_DELAY_COMP + if ( delayNumSamples * num_out_channels < outBufferSize ) +#else + if ( delayNumSamples < outBufferSize ) +#endif { if ( AudioFileWriter_write( audioWriter, &outInt16Buffer[delayNumSamples * num_out_channels], outBufferSize - ( delayNumSamples * num_out_channels ) ) != IVAS_ERR_OK ) { @@ -1851,7 +1858,11 @@ int main( } else { - delayNumSamples -= (int16_t) outBufferSize; +#ifdef FIX_LARGE_RENDERER_DELAY_COMP + delayNumSamples -= (int16_t) ( outBufferSize / num_out_channels ); +#else + delayNumSamples -= (int16_t) outBufferSize; +#endif } #ifdef SPLIT_REND_WITH_HEAD_ROT } @@ -1951,12 +1962,32 @@ int main( if ( audioWriter != NULL ) { #endif - memset( outInt16Buffer, 0, zeroPad * outBuffer.config.numChannels * sizeof( int16_t ) ); - if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, zeroPad * outBuffer.config.numChannels ) ) != IVAS_ERR_OK ) +#ifdef FIX_LARGE_RENDERER_DELAY_COMP + for ( zeroPadToWrite = zeroPad; zeroPadToWrite > frameSize_smpls; zeroPadToWrite -= frameSize_smpls ) + { + memset( outInt16Buffer, 0, outBufferSize * sizeof( int16_t ) ); + if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, outBufferSize ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + exit( -1 ); + } + } + + memset( outInt16Buffer, 0, zeroPadToWrite * outBuffer.config.numChannels * sizeof( int16_t ) ); + if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, zeroPadToWrite * outBuffer.config.numChannels ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nOutput audio file writer error\n" ); exit( -1 ); } + zeroPadToWrite = 0; +#else + memset( outInt16Buffer, 0, zeroPad * outBuffer.config.numChannels * sizeof( int16_t ) ); + if ( ( error = AudioFileWriter_write( audioWriter, outInt16Buffer, zeroPad * outBuffer.config.numChannels ) ) != IVAS_ERR_OK ) + { + fprintf( stderr, "\nOutput audio file writer error\n" ); + exit( -1 ); + } +#endif #ifdef SPLIT_REND_WITH_HEAD_ROT } #endif diff --git a/lib_com/options.h b/lib_com/options.h index 6d126861a2105cb30bb7278ff30c4080df908de4..6f8dc7bd50abee6da91f31a45ba5ae4ff06c9293 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -240,6 +240,7 @@ #define FIX_657_REMOVE_EDITING /* Nokia: Remove remaining unused coded related to object editing */ #define FIX_634_MASA_JBM_UNUSED_PARAMETER /* Nokia: Fix issue 634 by removing the unnecessary argument. */ #define FIX_675_WB_OMASA /* Nokia: Fix for issue 675 solving the crash in OMASA for WB input */ +#define FIX_LARGE_RENDERER_DELAY_COMP /* Fix renderer delay compensation with delays greater than 1 frame */ /* ################## End BE DEVELOPMENT switches ######################### */ diff --git a/tests/split_rendering/constants.py b/tests/split_rendering/constants.py index 751b632f93015a4065282ecb03310f02fda08786..7ec9abc6628204e3dbe7be310b43886562b03784 100644 --- a/tests/split_rendering/constants.py +++ b/tests/split_rendering/constants.py @@ -53,10 +53,6 @@ from tests.renderer.constants import ( FORMAT_TO_FILE_COMPARETEST, FORMAT_TO_FILE_SMOKETEST, FORMAT_TO_METADATA_FILES, - INPUT_FORMATS_AMBI, - INPUT_FORMATS_ISM, - INPUT_FORMATS_MASA, - INPUT_FORMATS_MC, METADATA_SCENES_TO_TEST, ) @@ -132,6 +128,11 @@ FORMAT_TO_NCHAN = { "MASA2": 2, } +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"] + IVAS_BITRATES_AMBI = ["80000", "512000"] IVAS_BITRATES_MC = ["128000", "160000", "384000"] IVAS_BITRATES_ISM = ["128000"] @@ -144,6 +145,8 @@ IVAS_MAX_ISM_BITRATE = { "4": "512000", } +RENDERER_FORMATS = ["BINAURAL_SPLIT_CODED", "BINAURAL_SPLIT_PCM"] + INPUT_DURATION_SEC = 5 """ PLC constants """ @@ -165,7 +168,7 @@ SPLIT_PRE_DEC_CMD = [ "", # 2 -> pre-trajectory file "-render_config", "", # 4 -> render config file - "BINAURAL_SPLIT_CODED", + "", # 5 -> renderer format "48", "", # 7 -> encoder bitstream "", # 8 -> split rendering bitstream @@ -185,7 +188,7 @@ SPLIT_PRE_REND_CMD = [ "-o", "", # 10 -> split rendering bitstream "-of", - "BINAURAL_SPLIT_CODED", + "", # 12 -> renderer format "-tf", "", # 14 -> post-trajectory file ] @@ -198,7 +201,7 @@ SPLIT_POST_REND_CMD = [ "-i", "", # 4 -> split rendering bitstream "-if", - "BINAURAL_SPLIT_CODED", + "", # 6 -> renderer format "-o", "", # 8 -> output file "-of", diff --git a/tests/split_rendering/test_split_rendering.py b/tests/split_rendering/test_split_rendering.py index 7d0ef2439334cde8c422e9f55c02d664912d7575..d6b959b5728634d82108d6946841378c30b32479 100644 --- a/tests/split_rendering/test_split_rendering.py +++ b/tests/split_rendering/test_split_rendering.py @@ -41,9 +41,9 @@ 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 or in_fmt in INPUT_FORMATS_MC) + 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 + "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 ) ): @@ -56,7 +56,7 @@ def check_xfail(test_info, in_fmt, render_config, bitrate=None): if ( bitrate - and (in_fmt in INPUT_FORMATS_ISM) + and (in_fmt in INPUT_FORMATS_ISM_SPLIT_REND) and (int(bitrate) > int(IVAS_MAX_ISM_BITRATE[in_fmt[-1]])) ): pytest.skip(f"Unsupported configuration with {in_fmt} at {bitrate}bps") @@ -68,7 +68,7 @@ def check_xfail(test_info, in_fmt, render_config, bitrate=None): @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_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) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI_SPLIT_REND) def test_ambisonics_full_chain_split( test_info, in_fmt, bitrate, render_config, trajectory ): @@ -89,7 +89,7 @@ def test_ambisonics_full_chain_split( @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) -@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI_SPLIT_REND) def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory): check_xfail(test_info, in_fmt, render_config) @@ -111,7 +111,7 @@ def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory) @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_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:]) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC_SPLIT_REND) def test_multichannel_full_chain_split( test_info, in_fmt, bitrate, render_config, trajectory ): @@ -132,7 +132,7 @@ def test_multichannel_full_chain_split( @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) -@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC_SPLIT_REND) def test_multichannel_external_split(test_info, in_fmt, render_config, trajectory): check_xfail(test_info, in_fmt, render_config) @@ -154,7 +154,7 @@ def test_multichannel_external_split(test_info, in_fmt, render_config, trajector @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_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) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM_SPLIT_REND) def test_ism_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): check_xfail(test_info, in_fmt, render_config, bitrate) @@ -173,7 +173,7 @@ def test_ism_full_chain_split(test_info, in_fmt, bitrate, render_config, traject @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) -@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM_SPLIT_REND) def test_ism_external_split(test_info, in_fmt, render_config, trajectory): check_xfail(test_info, in_fmt, render_config) @@ -195,7 +195,7 @@ def test_ism_external_split(test_info, in_fmt, render_config, trajectory): @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_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) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MASA_SPLIT_REND) def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): check_xfail(test_info, in_fmt, render_config, bitrate) @@ -218,7 +218,7 @@ def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajec @pytest.mark.parametrize("error_pattern", PLC_ERROR_PATTERNS) @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_PLC) -@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI[-1:]) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI_SPLIT_REND[-1:]) def test_post_rend_plc(test_info, in_fmt, render_config, trajectory, error_pattern): check_xfail(test_info, in_fmt, render_config) @@ -233,3 +233,56 @@ def test_post_rend_plc(test_info, in_fmt, render_config, trajectory, error_patte output_path_base=OUTPUT_PATH_CUT, plc_error_pattern=ERROR_PATTERNS_DIR.joinpath(f"{error_pattern}.ep"), ) + + +""" BINAURAL_SPLIT_PCM """ + + +full_chain_split_pcm_params = [ + ("HOA3", "96000", "split_renderer_config_1dof_512k_default"), + ("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"), +] + +@pytest.mark.parametrize("in_fmt,bitrate,render_config", full_chain_split_pcm_params) +def test_full_chain_split_pcm(test_info, in_fmt, bitrate, render_config): + check_xfail(test_info, in_fmt, render_config, bitrate) + + trajectory = SPLIT_REND_HR_TRAJECTORIES_TO_TEST[0] + 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, + renderer_fmt="BINAURAL_SPLIT_PCM", + ) + + +external_split_pcm_params = [ + ("FOA", "split_renderer_config_3dofhq_512k_lc3plus"), + ("5_1", "split_renderer_config_1dof_768k_default"), + ("ISM1", "split_renderer_config_3dof_384k_lcld"), +] + +@pytest.mark.parametrize("in_fmt,render_config", external_split_pcm_params) +def test_external_split_pcm(test_info, in_fmt, render_config): + check_xfail(test_info, in_fmt, render_config) + + trajectory = SPLIT_REND_HR_TRAJECTORIES_TO_TEST[0] + 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"), + pre_trajectory=pre_trajectory, + post_trajectory=post_trajectory, + output_path_base=OUTPUT_PATH_CUT, + renderer_fmt="BINAURAL_SPLIT_PCM", + ) diff --git a/tests/split_rendering/test_split_rendering_be_comparison.py b/tests/split_rendering/test_split_rendering_be_comparison.py index 9b0f03b8bb995d786aba0b7c14bc527c6f532af5..a300673660f1759122822c897ef269b003dfcb47 100644 --- a/tests/split_rendering/test_split_rendering_be_comparison.py +++ b/tests/split_rendering/test_split_rendering_be_comparison.py @@ -41,7 +41,7 @@ from tests.split_rendering.utils import * @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_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) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI_SPLIT_REND) def test_ambisonics_full_chain_split( test_info, in_fmt, bitrate, render_config, trajectory ): @@ -62,7 +62,7 @@ def test_ambisonics_full_chain_split( @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) -@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI_SPLIT_REND) def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory): check_xfail(test_info, in_fmt, render_config) @@ -84,7 +84,7 @@ def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory) @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_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:]) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC_SPLIT_REND) def test_multichannel_full_chain_split( test_info, in_fmt, bitrate, render_config, trajectory ): @@ -105,7 +105,7 @@ def test_multichannel_full_chain_split( @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) -@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC_SPLIT_REND) def test_multichannel_external_split(test_info, in_fmt, render_config, trajectory): check_xfail(test_info, in_fmt, render_config) @@ -127,7 +127,7 @@ def test_multichannel_external_split(test_info, in_fmt, render_config, trajector @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_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) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM_SPLIT_REND) def test_ism_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): check_xfail(test_info, in_fmt, render_config, bitrate) @@ -146,7 +146,7 @@ def test_ism_full_chain_split(test_info, in_fmt, bitrate, render_config, traject @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) -@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM_SPLIT_REND) def test_ism_external_split(test_info, in_fmt, render_config, trajectory): check_xfail(test_info, in_fmt, render_config) @@ -168,7 +168,7 @@ def test_ism_external_split(test_info, in_fmt, render_config, trajectory): @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_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) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MASA_SPLIT_REND) def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajectory): check_xfail(test_info, in_fmt, render_config, bitrate) @@ -191,7 +191,7 @@ def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajec @pytest.mark.parametrize("error_pattern", PLC_ERROR_PATTERNS) @pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_PLC) -@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI[-1:]) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI_SPLIT_REND[-1:]) def test_post_rend_plc(test_info, in_fmt, render_config, trajectory, error_pattern): check_xfail(test_info, in_fmt, render_config) @@ -206,3 +206,56 @@ def test_post_rend_plc(test_info, in_fmt, render_config, trajectory, error_patte post_trajectory=post_trajectory, plc_error_pattern=ERROR_PATTERNS_DIR.joinpath(f"{error_pattern}.ep"), ) + + +""" BINAURAL_SPLIT_PCM """ + + +full_chain_split_pcm_params = [ + ("HOA3", "96000", "split_renderer_config_1dof_512k_default"), + ("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"), +] + +@pytest.mark.parametrize("in_fmt,bitrate,render_config", full_chain_split_pcm_params) +def test_full_chain_split_pcm(test_info, in_fmt, bitrate, render_config): + check_xfail(test_info, in_fmt, render_config, bitrate) + + trajectory = SPLIT_REND_HR_TRAJECTORIES_TO_TEST[0] + 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, + renderer_fmt="BINAURAL_SPLIT_PCM", + ) + + +external_split_pcm_params = [ + ("FOA", "split_renderer_config_3dofhq_512k_lc3plus"), + ("5_1", "split_renderer_config_1dof_768k_default"), + ("ISM1", "split_renderer_config_3dof_384k_lcld"), +] + +@pytest.mark.parametrize("in_fmt,render_config", external_split_pcm_params) +def test_external_split_pcm(test_info, in_fmt, render_config): + check_xfail(test_info, in_fmt, render_config) + + trajectory = SPLIT_REND_HR_TRAJECTORIES_TO_TEST[0] + 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, + render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"), + pre_trajectory=pre_trajectory, + post_trajectory=post_trajectory, + renderer_fmt="BINAURAL_SPLIT_PCM", + ) diff --git a/tests/split_rendering/utils.py b/tests/split_rendering/utils.py index b9bbee20a4db967a3471baed0ba5375e765da8ea..8130b4146746d476c5d7a9b2c86fb7ba9dded55f 100644 --- a/tests/split_rendering/utils.py +++ b/tests/split_rendering/utils.py @@ -52,6 +52,7 @@ def run_full_chain_split_rendering( pre_trajectory: Path, post_trajectory: Path, output_path_base: Path, + renderer_fmt: str = "BINAURAL_SPLIT_CODED", binary_suffix: str = "", is_comparetest: bool = False, ) -> Tuple[np.ndarray, int]: @@ -64,8 +65,10 @@ def run_full_chain_split_rendering( cut_in_file = tmp_dir.joinpath("cut_input.wav") ivas_bitstream = tmp_dir.joinpath("ivas.192") split_bitstream = tmp_dir.joinpath("split.bit") + if renderer_fmt == "BINAURAL_SPLIT_PCM": + split_md_file = tmp_dir.joinpath("split_md.bin") out_file = output_path_base.joinpath( - f"{in_fmt}_{bitrate}bps_{pre_trajectory.stem}_split_full_{post_trajectory.stem}__config_{render_config.stem}.wav" + f"{in_fmt}_{bitrate}bps_{renderer_fmt}_{pre_trajectory.stem}_split_full_{post_trajectory.stem}_config_{render_config.stem}.wav" ) # check for metadata files @@ -99,10 +102,6 @@ def run_full_chain_split_rendering( cmd[3] = str(FORMAT_TO_FILE_SMOKETEST[in_fmt]) cmd[4] = str(ivas_bitstream) - # set maximum ISM bitrate based on number of objects - if in_fmt.upper().startswith("ISM"): - cmd[1] = IVAS_MAX_ISM_BITRATE[in_fmt[3]] - cmd[1:1] = FORMAT_TO_IVAS_COD_FORMAT[in_fmt] if in_meta_files: @@ -116,9 +115,13 @@ def run_full_chain_split_rendering( cmd[0] += binary_suffix cmd[2] = str(pre_trajectory) cmd[4] = str(render_config) + cmd[5] = renderer_fmt cmd[7] = str(ivas_bitstream) cmd[8] = str(split_bitstream) + if renderer_fmt == "BINAURAL_SPLIT_PCM": + cmd[5:5] = ["-om", str(split_md_file)] + run_cmd(cmd) # run split renderer @@ -126,9 +129,13 @@ def run_full_chain_split_rendering( cmd[0] += binary_suffix cmd[4] = str(split_bitstream) + cmd[6] = renderer_fmt cmd[8] = str(out_file) cmd[12] = str(post_trajectory) + if renderer_fmt == "BINAURAL_SPLIT_PCM": + cmd[7:7] = ["-im", str(split_md_file)] + run_cmd(cmd) return readfile(out_file) @@ -141,6 +148,7 @@ def run_external_split_rendering( post_trajectory: Path, output_path_base: Path, plc_error_pattern: Path = None, + renderer_fmt: str = "BINAURAL_SPLIT_CODED", binary_suffix: str = "", is_comparetest: bool = False, ) -> Tuple[np.ndarray, int]: @@ -152,15 +160,13 @@ def run_external_split_rendering( with TemporaryDirectory() as tmp_dir: tmp_dir = Path(tmp_dir) split_bitstream = tmp_dir.joinpath("split.bit") + if renderer_fmt == "BINAURAL_SPLIT_PCM": + split_md_file = tmp_dir.joinpath("split_md.bin") + out_file = output_path_base.joinpath( + f"{in_fmt}_{renderer_fmt}_{pre_trajectory.stem}_split_ext_{post_trajectory.stem}_config_{render_config.stem}.wav" + ) if plc_error_pattern: - out_file = output_path_base.joinpath( - f"{in_fmt}_{pre_trajectory.stem}_split_ext_{post_trajectory.stem}__config_{render_config.stem}_plc_{plc_error_pattern.stem}.wav" - ) - else: - out_file = output_path_base.joinpath( - f"{in_fmt}_{pre_trajectory.stem}_split_ext_{post_trajectory.stem}__config_{render_config.stem}.wav" - ) - + out_file = out_file.with_stem(f"{out_file.stem}_plc_{plc_error_pattern.stem}") # check for metadata files if in_fmt.upper().startswith("ISM") or in_fmt.upper().startswith("MASA"): @@ -178,8 +184,12 @@ def run_external_split_rendering( cmd[6] = str(FORMAT_TO_FILE_SMOKETEST[in_fmt]) cmd[8] = in_fmt cmd[10] = str(split_bitstream) + cmd[12] = renderer_fmt cmd[14] = str(pre_trajectory) + if renderer_fmt == "BINAURAL_SPLIT_PCM": + cmd[13:13] = ["-om", str(split_md_file)] + if in_meta_files: cmd[9:9] = ["-im", *in_meta_files] @@ -190,9 +200,13 @@ def run_external_split_rendering( cmd[0] += binary_suffix cmd[4] = str(split_bitstream) + cmd[6] = renderer_fmt cmd[8] = str(out_file) cmd[12] = str(post_trajectory) + if renderer_fmt == "BINAURAL_SPLIT_PCM": + cmd[7:7] = ["-im", str(split_md_file)] + if plc_error_pattern: cmd[1:1] = ["-prbfi", str(plc_error_pattern)]