diff --git a/apps/renderer.c b/apps/renderer.c index 1ee499fbea1512e4683a59f74a642211055f98e5..62fdcebd9b2d754e7fb94a4257a0566911f683a4 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -3792,7 +3792,11 @@ static void printSupportedAudioConfigs( void ) "HOA2", "HOA3", "ISMx (input only)", +#ifdef FIX_740_MASA_PREREND_VALIDITY_CHECK + "MASAx", +#else "MASAx (input only)", +#endif "BINAURAL (output only)", #ifdef SPLIT_REND_WITH_HEAD_ROT "BINAURAL_SPLIT_PCM", diff --git a/lib_com/options.h b/lib_com/options.h index 34ba3158266bcf95b4fd117d44c7d95fc12608c1..54389fefef7840087f1770e37f590aafe8004ded 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -152,6 +152,8 @@ #define FIX_879_USAN_ERROR_IN_MASA_DECODING /* FhG: Issue 879 : avoid arithmetic with NULL pointer in the DirAC decoder to fix USAN error */ +#define FIX_740_MASA_PREREND_VALIDITY_CHECK /* Nokia: issue 740: fix incorrect validity check in lib_rend to allow use of MASA prerenderer */ + /* #################### End BE switches ################################## */ diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index d754ffa4b1e013ac640723ef30c69bc706e5d223..a7de09eb0078c8104b1b2ee84594217e88f2608e 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -561,6 +561,10 @@ static ivas_error validateOutputAudioConfig( #endif case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: +#ifdef FIX_740_MASA_PREREND_VALIDITY_CHECK + case IVAS_AUDIO_CONFIG_MASA1: + case IVAS_AUDIO_CONFIG_MASA2: +#endif return IVAS_ERR_OK; default: break; diff --git a/scripts/testv/mixed_mc714_foa_masa2_ism4.wav b/scripts/testv/mixed_mc714_foa_masa2_ism4.wav new file mode 100644 index 0000000000000000000000000000000000000000..c680493c22891dcedc83b3da85572dbf7d1c353f --- /dev/null +++ b/scripts/testv/mixed_mc714_foa_masa2_ism4.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:900feffb59cec3a831c23b07e6f2f305e74d382c4d64903e65cd7cc321bd7083 +size 6336044 diff --git a/tests/renderer/constants.py b/tests/renderer/constants.py index 1de55fc7c10e047135aac8263728b09d453479b6..345006e9f7d5afee70e24971f33759b30ecaa8d2 100644 --- a/tests/renderer/constants.py +++ b/tests/renderer/constants.py @@ -208,6 +208,7 @@ CUSTOM_LS_TO_TEST = [ """ Mixed scene ( metadata ) rendering """ METADATA_SCENES_TO_TEST = ["mixed_scene", "mixed_scene_simple"] METADATA_SCENES_TO_TEST_NO_BE = ["masa_scene"] +METADATA_SCENES_TO_TEST_MASA_PREREND = ["mixed_mc714_foa_masa2_ism4"] """ Binaural rendering """ OUTPUT_FORMATS_BINAURAL = ["BINAURAL", "BINAURAL_ROOM_IR", "BINAURAL_ROOM_REVERB"] diff --git a/tests/renderer/data/mixed_mc714_foa_masa2_ism4.txt b/tests/renderer/data/mixed_mc714_foa_masa2_ism4.txt new file mode 100644 index 0000000000000000000000000000000000000000..e29dabb46c22e62ccc64195d378557cf3f048546 --- /dev/null +++ b/tests/renderer/data/mixed_mc714_foa_masa2_ism4.txt @@ -0,0 +1,24 @@ +../../../scripts/testv/mixed_mc714_foa_masa2_ism4.wav +7 +MC +1 +7_1_4 +SBA +13 +1 +MASA +17 +2 +../../../scripts/testv/stv2MASA2TC48c.met +ISM +19 +../../../scripts/testv/stvISM1.csv +ISM +20 +../../../scripts/testv/stvISM2.csv +ISM +21 +../../../scripts/testv/stvISM3.csv +ISM +22 +../../../scripts/testv/stvISM4.csv \ No newline at end of file diff --git a/tests/renderer/test_renderer_be_comparison.py b/tests/renderer/test_renderer_be_comparison.py index b4314a33e32acd7696320b1488b15cece77b0738..56ffe5470d0ea12df0a633ee285f551925ea09ae 100644 --- a/tests/renderer/test_renderer_be_comparison.py +++ b/tests/renderer/test_renderer_be_comparison.py @@ -216,6 +216,16 @@ def test_masa_binaural_headrotation(test_info, in_fmt, out_fmt, trj_file, framin ) +@pytest.mark.parametrize("in_fmt", METADATA_SCENES_TO_TEST_MASA_PREREND) +def test_masa_prerend(test_info, in_fmt): + compare_renderer_vs_mergetarget_plus_meta( + test_info, + "META", + "MASA2", + metadata_input=TEST_VECTOR_DIR.joinpath(f"{in_fmt}.txt"), + ) + + """ Custom loudspeaker layouts """ diff --git a/tests/renderer/utils.py b/tests/renderer/utils.py index 8fdc7ead3a30060658494b20fa2f1073e42e6a19..80b4202ef207d7479262e73beec295f41e263166 100644 --- a/tests/renderer/utils.py +++ b/tests/renderer/utils.py @@ -30,6 +30,7 @@ the United Nations Convention on Contracts on the International Sales of Goods. """ +import filecmp import logging import os import subprocess as sp @@ -111,7 +112,7 @@ def run_renderer( is_comparetest: Optional[bool] = False, framing_5ms: Optional[bool] = False, test_case_name: Optional[str] = None, -) -> Tuple[np.ndarray, int]: +) -> str: """CuT creation with standalone renderer""" if trj_file is not None: trj_name = f"_{trj_file.stem}" @@ -212,11 +213,11 @@ def run_renderer( run_cmd(cmd, env) - return pyaudio3dtools.audiofile.readfile(out_file) + return out_file def compare_renderer_vs_mergetarget(test_info, in_fmt, out_fmt, **kwargs): - ref, ref_fs = run_renderer( + out_file_ref = run_renderer( in_fmt, out_fmt, test_case_name=test_info.node.name, @@ -224,27 +225,58 @@ def compare_renderer_vs_mergetarget(test_info, in_fmt, out_fmt, **kwargs): output_path_base=OUTPUT_PATH_REF, **kwargs, ) - cut, cut_fs = run_renderer( + ref, ref_fs = pyaudio3dtools.audiofile.readfile(out_file_ref) + out_file_cut = run_renderer( in_fmt, out_fmt, test_case_name=test_info.node.name, **kwargs ) + cut, cut_fs = pyaudio3dtools.audiofile.readfile(out_file_cut) check_BE(test_info, ref, ref_fs, cut, cut_fs) def compare_renderer_vs_pyscripts(test_info, in_fmt, out_fmt, **kwargs): ref, ref_fs = run_pyscripts(in_fmt, out_fmt, **kwargs) - cut, cut_fs = run_renderer( + out_file_cut = run_renderer( in_fmt, out_fmt, test_case_name=test_info.node.name, **kwargs ) + cut, cut_fs = pyaudio3dtools.audiofile.readfile(out_file_cut) check_BE(test_info, ref, ref_fs, cut, cut_fs) def compare_renderer_args( test_info, in_fmt, out_fmt, ref_kwargs: Dict, cut_kwargs: Dict ): - ref, ref_fs = run_renderer( + out_file_ref = run_renderer( in_fmt, out_fmt, test_case_name=test_info.node.name, **ref_kwargs ) - cut, cut_fs = run_renderer( + ref, ref_fs = pyaudio3dtools.audiofile.readfile(out_file_ref) + out_file_cut = run_renderer( in_fmt, out_fmt, test_case_name=test_info.node.name, **cut_kwargs ) + cut, cut_fs = pyaudio3dtools.audiofile.readfile(out_file_cut) check_BE(test_info, ref, ref_fs, cut, cut_fs) + + +def compare_renderer_vs_mergetarget_plus_meta(test_info, in_fmt, out_fmt, metadata_input, **kwargs): + out_file_ref = run_renderer( + in_fmt, + out_fmt, + metadata_input=metadata_input, + test_case_name=test_info.node.name, + binary_suffix=BIN_SUFFIX_MERGETARGET, + output_path_base=OUTPUT_PATH_REF, + **kwargs, + ) + ref, ref_fs = pyaudio3dtools.audiofile.readfile(out_file_ref) + out_file_cut = run_renderer( + in_fmt, + out_fmt, + metadata_input=metadata_input, + test_case_name=test_info.node.name, + **kwargs + ) + cut, cut_fs = pyaudio3dtools.audiofile.readfile(out_file_cut) + meta_file_ref = out_file_ref + ".met" + meta_file_cut = out_file_cut + ".met" + check_BE(test_info, ref, ref_fs, cut, cut_fs) + if not filecmp.cmp(meta_file_cut, meta_file_ref): + pytest.fail("Metadata file differs from reference")