Commit 91d82fe7 authored by Vladimir Malenovsky's avatar Vladimir Malenovsky
Browse files

fix RTP dump pipeline

parent 253433ef
Loading
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -1358,7 +1358,7 @@ class PostRendFrontend:
        quiet_mode: Optional[bool] = True,
        trajectory_file: Optional[Path] = None,
        prbfi_file: Optional[Path] = None,
        framing: Optional[int] = None,
        render_frame_size: Optional[int] = None,
        add_option_list: Optional[list] = None,
        run_dir: Optional[Path] = None,
    ) -> None:
@@ -1368,6 +1368,14 @@ class PostRendFrontend:
        if quiet_mode:
            command.extend(["-q"])
            
        if render_frame_size:
            if render_frame_size not in [5, 10, 20]:
                raise ValueError(f"Incorrect render frame size specified {render_frame_size}!\n")
                
            command.extend(["-fr", str(render_frame_size)])           
        else:
            command.extend(["-fr", self.fr])           
            
        if input_file_format == "BINAURAL_SPLIT_PCM":
            # check if input sampling rate has been provided
            if not input_sampling_rate:
@@ -1395,12 +1403,6 @@ class PostRendFrontend:
            
            command.extend(["-T", str(trajectory_file)])
            
        if framing:
            if framing not in [5, 10, 20]:
                raise ValueError(f"Incorrect framing size specified {framing}!\n")
                
            command.extend(["-fr", str(framing)])           
            
        if add_option_list is not None:
            command.extend(add_option_list)

@@ -1413,7 +1415,7 @@ class PostRendFrontend:
            "-o",
            str(output_file),
            "-fs",
            "48",               # !!!!! should be eventually removed from the mandatory cmd-line parameters
            "48",               # !!!!! it's a mandatory argument but should be eventually removed 
        ]

        cmd_str = textwrap.indent(" ".join(command), prefix="\t")
+74 −22
Original line number Diff line number Diff line
@@ -181,7 +181,10 @@ def test_rtp_bitstream_ivas_dtx(
@pytest.mark.parametrize("bitrate", [48000])
@pytest.mark.parametrize("bandwidth", ["FB"])
@pytest.mark.parametrize("format", ["SBA"])
@pytest.mark.parametrize("framesPerPacket", [1])
@pytest.mark.parametrize("framesPerPacket", [8])
@pytest.mark.parametrize("splitRenderingCodec", ["LCLD", "LC3PLUS"])
@pytest.mark.parametrize("dof", [0, 1])
@pytest.mark.parametrize("codecFrameSize", [5, 10, 20])
@pytest.mark.parametrize("splitRendering_format", ["BINAURAL_SPLIT_CODED"])
def test_rtp_bitstream_isar(
    test_info,
@@ -193,6 +196,9 @@ def test_rtp_bitstream_isar(
    dut_decoder_frontend: DecoderFrontend,
    splitRendering_format: str,
    dut_postrend_frontend: PostRendFrontend,
    splitRenderingCodec: str,
    dof: int,
    codecFrameSize: int,
):
    run_rtp_bitstream_tests(
        CODECS.IVAS,
@@ -206,6 +212,9 @@ def test_rtp_bitstream_isar(
        dut_decoder_frontend,
        splitRendering_format,
        dut_postrend_frontend,
        splitRenderingCodec,
        dof,
        codecFrameSize,
    )

def generateRequests(startTs: int, endTs: int) -> dict:
@@ -596,6 +605,9 @@ class TVARGS:
        self.postRendHeadRotFile = (
            Path(ROOT_DIR).joinpath("scripts/trajectories/rotate_euler_quaternion_30s.csv").absolute()
        )
        # self.renderConfigFile = (
            # Path(ROOT_DIR).joinpath("tests/split_rendering/renderer_configs/framing/framing_lcld_0dof_20ms.txt").absolute()
        # )
        

    def add(self, fmt: str, inputFile: str, args: list[str] = []):
@@ -618,6 +630,11 @@ class TVARGS:
            ]
        return args

    def renderConfigFile(self, sr_codec: str, dof: int, frame_size: int):
        return (
            Path(ROOT_DIR).joinpath(f"tests/split_rendering/renderer_configs/framing/framing_{sr_codec}_{dof}dof_{frame_size}ms.txt").absolute()
        )

    def piFiles(self) -> tuple[Path]:
        return (self.sceneFile, self.deviceFile)

@@ -634,6 +651,9 @@ def run_rtp_bitstream_tests(
    dut_decoder_frontend: DecoderFrontend,
    splitRendering_format: Optional[str] = None,
    dut_postrend_frontend: Optional[PostRendFrontend] = None,
    splitRenderingCodec: Optional[str] = None,
    dof: Optional[int] = None,
    codecFrameSize: Optional[int] = None,    
):
    tvArgs = TVARGS()
    tvArgs.add("MONO", "stv48n.wav")
@@ -652,6 +672,16 @@ def run_rtp_bitstream_tests(
    ):
        pytest.skip()
        
    if dof == 0:
        dut_decoder_frontend.fr = codecFrameSize
    else:
        dut_decoder_frontend.fr = 20
    
    renderConfigFile = tvArgs.renderConfigFile(splitRenderingCodec, dof, codecFrameSize)
    if not renderConfigFile.exists():
        # skip, if the corresponding render config file does not exist
        pytest.skip()

    print(
        "Test: dut_encoder_frontend={}, dtx={}, codec:={}, bitrate={}, bandwidth={}, caMode={}, format={},".format(
            dut_encoder_frontend._path, dtx, codec, bitrate, bandwidth, caMode, format
@@ -678,6 +708,11 @@ def run_rtp_bitstream_tests(
            .joinpath(f"input-{codec}-{bitrate}-{caMode}-{format}-{dtx}.rtpdump")
            .absolute()
        )
        rtpdumpSplitOut = (
            Path(tmp_dir)
            .joinpath(f"split-{codec}-{bitrate}-{caMode}-{format}-{dtx}.rtpdump")
            .absolute()
        )
        splitOut = (
            Path(tmp_dir)
            .joinpath(f"split-{codec}-{bitrate}-{caMode}-{format}-{dtx}.cod")
@@ -700,6 +735,7 @@ def run_rtp_bitstream_tests(
        )

        # Run WITHOUT rtpdump first to generate reference bitstream
        # ./IVAS_cod -sba +1 -dtx -rtpdump 8 48000 48 scripts/testv/WYZX_Harvard_Sentences_1-13s_48khz.wav sba.rtp
        dut_encoder_frontend.run(
            bitrate=bitrate,
            input_sampling_rate=48,
@@ -722,18 +758,21 @@ def run_rtp_bitstream_tests(
            else:
                outMode = "STEREO" if format == "STEREO" else "BINAURAL"
            generatedPIData = generatePiData(0, 16000)
            generatedRequests = generateRequests(0, 1600)
        else:
            outMode = ""
            generatedPIData = dict()
            generatedRequests = dict()

        packer.packG192File(
            g192File=g192Out,
            rtpDumpOut=rtpdumpIn,
            piData=generatedPIData,
            requestsData=generateRequests(0, 1600),
            requestsData=generatedRequests,
        )

        if not split_rendering:
            # run with G.192 bitstream
            dut_decoder_frontend.run(
                output_config=outMode,
                output_sampling_rate=48,
@@ -742,50 +781,63 @@ def run_rtp_bitstream_tests(
                add_option_list=[],
            )

            # run with RTP dump
            dut_decoder_frontend.run(
                output_config=outMode,
                output_sampling_rate=48,
                input_bitstream_path=rtpdumpIn,
                output_path=pcmOut,
                add_option_list=["-VOIP_HF_ONLY=1", "-PiDataFile", str(piDataOutJson)],
            )

        else:
            
            # run with G.192 bitstream
            # ./IVAS_dec -fr 20 -no_delay_cmp -render_config tests/split_rendering/renderer_configs/framing/framing_lcld_0dof_20ms.txt BINAURAL_SPLIT_CODED 48 sba.g192 outSR_0dof_20ms.cod
            dut_decoder_frontend.run(
                output_config=outMode,
                output_sampling_rate=48,
                input_bitstream_path=g192Out,
                output_path=splitOut,
                add_option_list=["-T", str(tvArgs.preRendHeadRotFile)],
                add_option_list=["-no_delay_cmp", "-render_config", str(renderConfigFile)],
            )

            # ./ISAR_post_rend -fr 20 -no_delay_cmp -fs 48 -i outSR_0dof_20ms.cod -if BINAURAL_SPLIT_CODED -o output_SR_0dof_20ms.g192.wav -T scripts/trajectories/rotate_euler_quaternion_30s.csv
            dut_postrend_frontend.run(
                input_file=splitOut,
                input_file_format=outMode,
                output_file=pcmOutG192,
                add_option_list=["-T", str(tvArgs.postRendHeadRotFile)],
                render_frame_size=dut_decoder_frontend.fr,
                add_option_list=["-no_delay_cmp", "-T", str(tvArgs.postRendHeadRotFile)],
            )
            
        if not split_rendering:
            dut_decoder_frontend.run(
                output_config=outMode,
                output_sampling_rate=48,
                input_bitstream_path=rtpdumpIn,
                output_path=pcmOut,
                add_option_list=["-VOIP_HF_ONLY=1", "-PiDataFile", str(piDataOutJson)],
            )
        else:
            import pdb
            pdb.set_trace()
            
            # run with RTP dump
            # ./IVAS_dec -rtpOutSR -VOIP_HF_ONLY=1 -no_delay_cmp -render_config tests/split_rendering/renderer_configs/framing/framing_lcld_0dof_20ms.txt BINAURAL_SPLIT_CODED 48 sba.rtp outSR_0dof_20ms.rtp
            dut_decoder_frontend.run(
                output_config=outMode,
                output_sampling_rate=48,
                input_bitstream_path=rtpdumpIn,
                output_path=splitOut,
                add_option_list=["-VOIP_HF_ONLY=1", "-PiDataFile", str(piDataOutJson), "-T", str(tvArgs.preRendHeadRotFile)],
                output_path=rtpdumpSplitOut,
                add_option_list=["-rtpOutSR", "-VOIP_HF_ONLY=1", "-no_delay_cmp", "-render_config", str(renderConfigFile), "-PiDataFile", str(piDataOutJson)],
            )
            
            # ./ISAR_post_rend -fr 20 -no_delay_cmp -fs 48 -s outSR_0dof_20ms.rtp.sr.txt -i outSR_0dof_20ms.rtp -if RTPDUMP -o output_SR_0dof_20ms.wav -T scripts/trajectories/rotate_euler_quaternion_30s.csv
            dut_postrend_frontend.run(
                input_file=splitOut,
                input_file_format=outMode,
                input_file=rtpdumpSplitOut,
                input_file_format="RTPDUMP",
                output_file=pcmOut,
                add_option_list=["-T", str(tvArgs.postRendHeadRotFile)],
                render_frame_size=dut_decoder_frontend.fr,
                add_option_list=["-no_delay_cmp", "-s", str(rtpdumpSplitOut.with_name(rtpdumpSplitOut.name + '.sr.txt')) , "-T", str(tvArgs.postRendHeadRotFile)],
            )
            
        decAudio, fs = readfile(pcmOut)
        g192Audio, Fs = readfile(pcmOutG192)
        decAudio /= 32768.0  # readfile reuturns 16 bit int
        g192Audio /= 32768.0  # readfile reuturns 16 bit int
        if not split_rendering:
            decAudio = decAudio[4 * 960 :]
        assert abs(decAudio.shape[0] - g192Audio.shape[0]) <= (
            4 * 960