Skip to content

Commit

Permalink
decoder: add vk_video_samples backend
Browse files Browse the repository at this point in the history
This backend allows to test the vk_video_samples
which demonstrates Vulkan Video.

The application can be found at:

https://github.com/nvpro-samples/vk_video_samples
  • Loading branch information
dabrain34 committed Oct 9, 2024
1 parent 7c29314 commit 90c486f
Showing 1 changed file with 75 additions and 0 deletions.
75 changes: 75 additions & 0 deletions fluster/decoders/vk_video_decoder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# 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 <https://www.gnu.org/licenses/>.

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"""

description = "Vulkan video reference decoder"
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

0 comments on commit 90c486f

Please sign in to comment.