diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 2a73062d..bcc1e8b9 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -27,6 +27,9 @@ jobs: - name: Check run: | make check + - name: Test Build the wheel + run: | + pip wheel . linux: runs-on: ubuntu-22.04 @@ -44,7 +47,9 @@ jobs: - name: Check run: | make check - + - name: Test Build the wheel + run: | + pip wheel . windows: runs-on: windows-latest @@ -61,3 +66,6 @@ jobs: - name: Check run: | make check + - name: Test Build the wheel + run: | + pip wheel . diff --git a/fluster/decoders/ffmpeg.py b/fluster/decoders/ffmpeg.py index eb38d9b9..5c23df61 100644 --- a/fluster/decoders/ffmpeg.py +++ b/fluster/decoders/ffmpeg.py @@ -143,6 +143,7 @@ def check(self, verbose: bool) -> bool: codec_mapping = { Codec.H264: "h264", Codec.H265: "hevc", + Codec.H266: "vvc", Codec.VP8: "vp8", Codec.VP9: "vp9", Codec.AV1: "av1", @@ -191,6 +192,13 @@ class FFmpegH265Decoder(FFmpegDecoder): codec = Codec.H265 +@register_decoder +class FFmpegH266Decoder(FFmpegDecoder): + """FFmpeg SW decoder for H.266""" + + codec = Codec.H266 + + @register_decoder class FFmpegVP8Decoder(FFmpegDecoder): """FFmpeg SW decoder for VP8""" diff --git a/fluster/decoders/gstreamer.py b/fluster/decoders/gstreamer.py index 6a5fadbf..34888926 100644 --- a/fluster/decoders/gstreamer.py +++ b/fluster/decoders/gstreamer.py @@ -236,6 +236,15 @@ class GStreamerLibavH265(GStreamer10Video): api = "Libav" +@register_decoder +class GStreamerLibavH266(GStreamer10Video): + """GStreamer H.266 Libav decoder implementation for GStreamer 1.0""" + + codec = Codec.H266 + decoder_bin = " avdec_h266 " + api = "Libav" + + @register_decoder class GStreamerLibavVP8(GStreamer10Video): """GStreamer VP8 Libav decoder implementation for GStreamer 1.0""" diff --git a/fluster/decoders/vk_video_decoder.py b/fluster/decoders/vk_video_decoder.py new file mode 100644 index 00000000..4c73ca4c --- /dev/null +++ b/fluster/decoders/vk_video_decoder.py @@ -0,0 +1,84 @@ +# Fluster - testing framework for decoders conformance +# Copyright (C) 2024, Igalia. +# Author: Stephane Cerveau +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public License +# as published by the Free Software Foundation, either version 3 +# of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from fluster.codec import Codec, OutputFormat +from fluster.decoder import Decoder, register_decoder +from fluster.utils import file_checksum, run_command + + +class VKVSDecoder(Decoder): + """NVidia vk_video_samples decoder implementation""" + + binary = "vk-video-dec-test" + + def __init__(self) -> None: + super().__init__() + self.name = f"VKVS-{self.codec.value}" + self.description = f"Vulkan Video Samples {self.codec.value} decoder" + + def decode( + self, + input_filepath: str, + output_filepath: str, + output_format: OutputFormat, + timeout: int, + verbose: bool, + keep_files: bool, + ) -> str: + """Decodes input_filepath in output_filepath""" + codec_mapping = { + Codec.H264: "avc", + Codec.H265: "hevc", + Codec.AV1: "av1", + } + # pylint: disable=unused-argument + run_command( + [ + self.binary, + "-i", + input_filepath, + "-o", + output_filepath, + "--codec", + codec_mapping[self.codec], + "--noPresent", + ], + timeout=timeout, + verbose=verbose, + ) + return file_checksum(output_filepath) + + +@register_decoder +class VKVSH264Decoder(VKVSDecoder): + """Vulkan Video Samples decoder for H.264""" + + codec = Codec.H264 + + +@register_decoder +class VKVSH265Decoder(VKVSDecoder): + """Vulkan Video Samples decoder for H.265""" + + codec = Codec.H265 + + +@register_decoder +class VKVSAV1Decoder(VKVSDecoder): + """Vulkan Video Samples decoder for AV1""" + + codec = Codec.AV1 diff --git a/fluster/main.py b/fluster/main.py index 50a86202..c73959fa 100644 --- a/fluster/main.py +++ b/fluster/main.py @@ -30,7 +30,6 @@ APPNAME = "fluster" TEST_SUITES_DIR = "test_suites" -TEST_SUITES_DIR_SYS = "/usr/share/fluster/test_suites" DECODERS_DIR = "decoders" RESOURCES_DIR = "resources" OUTPUT_DIR = "fluster_output" diff --git a/pyproject.toml b/pyproject.toml index cfb36578..a273c1a6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,7 +59,7 @@ packages = ["fluster", "fluster.decoders"] ] "share/fluster/test_suites/h265" = [ "test_suites/h265/JCT-VC-3D-HEVC.json", - "test_suites/h265/JCT-VC-HEVC-V1.json", + "test_suites/h265/JCT-VC-HEVC_V1.json", "test_suites/h265/JCT-VC-MV-HEVC.json", "test_suites/h265/JCT-VC-RExt.json", "test_suites/h265/JCT-VC-SCC.json",