From caa9e5d3eb790c4fc17e2c90b19e9c5bfc309627 Mon Sep 17 00:00:00 2001 From: "Wu, Bin1" Date: Fri, 10 May 2024 18:56:42 -0700 Subject: [PATCH] Fork gst-d3d11 to gst-d3d12 support Signed-off-by: Wu, Bin1 --- lib/gstreamer/d3d12/__init__.py | 5 ++ lib/gstreamer/d3d12/decoder.py | 89 +++++++++++++++++++++++ lib/gstreamer/d3d12/util.py | 96 +++++++++++++++++++++++++ test/gst-d3d12/__init__.py | 5 ++ test/gst-d3d12/decode/10bit/__init__.py | 5 ++ test/gst-d3d12/decode/10bit/av1.py | 34 +++++++++ test/gst-d3d12/decode/10bit/hevc.py | 25 +++++++ test/gst-d3d12/decode/10bit/vp9.py | 33 +++++++++ test/gst-d3d12/decode/12bit/__init__.py | 5 ++ test/gst-d3d12/decode/12bit/hevc.py | 25 +++++++ test/gst-d3d12/decode/12bit/vp9.py | 33 +++++++++ test/gst-d3d12/decode/__init__.py | 5 ++ test/gst-d3d12/decode/av1.py | 33 +++++++++ test/gst-d3d12/decode/avc.py | 25 +++++++ test/gst-d3d12/decode/hevc.py | 25 +++++++ test/gst-d3d12/decode/jpeg.py | 33 +++++++++ test/gst-d3d12/decode/mpeg2.py | 33 +++++++++ test/gst-d3d12/decode/vp8.py | 33 +++++++++ test/gst-d3d12/decode/vp9.py | 33 +++++++++ 19 files changed, 575 insertions(+) create mode 100644 lib/gstreamer/d3d12/__init__.py create mode 100644 lib/gstreamer/d3d12/decoder.py create mode 100644 lib/gstreamer/d3d12/util.py create mode 100644 test/gst-d3d12/__init__.py create mode 100644 test/gst-d3d12/decode/10bit/__init__.py create mode 100644 test/gst-d3d12/decode/10bit/av1.py create mode 100644 test/gst-d3d12/decode/10bit/hevc.py create mode 100644 test/gst-d3d12/decode/10bit/vp9.py create mode 100644 test/gst-d3d12/decode/12bit/__init__.py create mode 100644 test/gst-d3d12/decode/12bit/hevc.py create mode 100644 test/gst-d3d12/decode/12bit/vp9.py create mode 100644 test/gst-d3d12/decode/__init__.py create mode 100644 test/gst-d3d12/decode/av1.py create mode 100644 test/gst-d3d12/decode/avc.py create mode 100644 test/gst-d3d12/decode/hevc.py create mode 100644 test/gst-d3d12/decode/jpeg.py create mode 100644 test/gst-d3d12/decode/mpeg2.py create mode 100644 test/gst-d3d12/decode/vp8.py create mode 100644 test/gst-d3d12/decode/vp9.py diff --git a/lib/gstreamer/d3d12/__init__.py b/lib/gstreamer/d3d12/__init__.py new file mode 100644 index 00000000..8a43348f --- /dev/null +++ b/lib/gstreamer/d3d12/__init__.py @@ -0,0 +1,5 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### diff --git a/lib/gstreamer/d3d12/decoder.py b/lib/gstreamer/d3d12/decoder.py new file mode 100644 index 00000000..fa55d1fc --- /dev/null +++ b/lib/gstreamer/d3d12/decoder.py @@ -0,0 +1,89 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +import os +import slash + +from ....lib import platform +from ....lib.codecs import Codec +from ....lib.common import get_media +from ....lib.formats import PixelFormat +from ....lib.gstreamer.decoderbase import BaseDecoderTest, Decoder as GstDecoder +from ....lib.gstreamer.util import have_gst_element +from ....lib.gstreamer.d3d12.util import mapformat, mapformatu + +class Decoder(GstDecoder): + format = property(lambda s: mapformatu(super().format)) + pformat = property(lambda s: mapformat(super().format)) + +@slash.requires(*have_gst_element("d3d12")) +class DecoderTest(BaseDecoderTest): + DecoderClass = Decoder + +def decode_test_class(codec, bitdepth, **kwargs): + # caps lookup translation + capcodec = codec + if codec in [Codec.HEVC, Codec.VP9, Codec.AV1]: + capcodec = f"{codec}_{bitdepth}" + + # gst element codec translation + gstcodec = { + Codec.AVC : "h264", + Codec.HEVC : "h265", + }.get(codec, codec) + + gstparser = { + Codec.MPEG2 : "mpegvideoparse", + Codec.VP8 : None, + }.get(codec, f"{gstcodec}parse") + + hwdevice = get_media().render_device.split('/')[-1] + hw = hwdevice if hwdevice not in ['renderD128', '0'] else "" + + @slash.requires(*have_gst_element(f"d3d12{hw}{gstcodec}dec")) + @slash.requires(*platform.have_caps("decode", capcodec)) + class CodecDecoderTest(DecoderTest): + def before(self): + super().before() + vars(self).update( + caps = platform.get_caps("decode", capcodec), + codec = codec, + gstdecoder = f"d3d12{hw}{gstcodec}dec", + gstparser = gstparser, + **kwargs, + ) + + def validate_caps(self): + assert PixelFormat(self.format).bitdepth == bitdepth + super().validate_caps() + + return CodecDecoderTest + +## AVC ## +AVCDecoderTest = decode_test_class(codec = Codec.AVC, bitdepth = 8) + +## HEVC ## +HEVC_8DecoderTest = decode_test_class(codec = Codec.HEVC, bitdepth = 8) +HEVC_10DecoderTest = decode_test_class(codec = Codec.HEVC, bitdepth = 10) +HEVC_12DecoderTest = decode_test_class(codec = Codec.HEVC, bitdepth = 12) + +## AV1 ## +AV1_8DecoderTest = decode_test_class(codec = Codec.AV1, bitdepth = 8) +AV1_10DecoderTest = decode_test_class(codec = Codec.AV1, bitdepth = 10) + +## VP9 ## +VP9_8DecoderTest = decode_test_class(codec = Codec.VP9, bitdepth = 8) +VP9_10DecoderTest = decode_test_class(codec = Codec.VP9, bitdepth = 10) +VP9_12DecoderTest = decode_test_class(codec = Codec.VP9, bitdepth = 12) + +## VP8 ## +VP8DecoderTest = decode_test_class(codec = Codec.VP8, bitdepth = 8) + +## JPEG/MJPEG ## +JPEGDecoderTest = decode_test_class(codec = Codec.JPEG, bitdepth = 8) + +## MPEG2 ## +MPEG2DecoderTest = decode_test_class(codec = Codec.MPEG2, bitdepth = 8) diff --git a/lib/gstreamer/d3d12/util.py b/lib/gstreamer/d3d12/util.py new file mode 100644 index 00000000..4605b221 --- /dev/null +++ b/lib/gstreamer/d3d12/util.py @@ -0,0 +1,96 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from ....lib.codecs import Codec +from ....lib.common import memoize +from ....lib.formats import match_best_format +from ....lib.gstreamer.util import * + +def get_supported_format_map(): + #The map first entry is for gst element properties;the second entry is for gst caps filters + #for example: + # i420 is entry for gst properties such as vaapipostproc + # I420: is entry for gst caps filter + return { + "I420" : ("i420", "I420"), + "NV12" : ("nv12", "NV12"), + "YV12" : ("yv12", "YV12"), + "AYUV" : ("vuya", "VUYA"), #we use microsoft's definition of AYUV,https://docs.microsoft.com/en-us/windows/win32/medfound/recommended-8-bit-yuv-formats-for-video-rendering#ayuv + "YUY2" : ("yuy2", "YUY2"), + "ARGB" : ("argb", "ARGB"), + "BGRA" : ("bgra", "BGRA"), + "422H" : ("y42b", "Y42B"), + "444P" : ("y444", "Y444"), + "P010" : ("p010-10le", "P010_10LE"), + "P012" : ("p012-le", "P012_LE"), + "I010" : ("i420-10le", "I420_10LE"), + "Y210" : ("y210", "Y210"), + "Y212" : ("y212-le", "Y212_LE"), + "Y410" : ("y410", "Y410"), + "Y412" : ("y412-le", "Y412_LE"), + } + +@memoize +def mapformat(format): + return get_supported_format_map().get(format, (None, None))[0] + +@memoize +def mapformatu(format): + return get_supported_format_map().get(format, (None, None))[1] + +def map_best_hw_format(format, hwformats): + return mapformatu( + match_best_format( + format, set(hwformats) & set(get_supported_format_map().keys()))) + +@memoize +def map_transpose_direction(degrees, method): + return { + ( 0, None) : "identity", + ( 0, "vertical") : "vert", + ( 0, "horizontal") : "horiz", + ( 90, None) : "90r", + ( 90, "vertical") : "ur-ll", + ( 90, "horizontal") : "ul-lr", + (180, None) : "180", + (180, "vertical") : "horiz", + (180, "horizontal") : "vert", + (270, None) : "90l", + (270, "vertical") : "ul-lr", + (270, "horizontal") : "ur-ll", + }.get((degrees, method), None) + +@memoize +def mapprofile(codec, profile): + return { + Codec.AVC : { + "high" : "high", + "main" : "main", + "baseline" : "baseline", + "constrained-baseline" : "constrained-baseline", + "multiview-high" : "multiview-high", + "stereo-high" : "stereo-high", + }, + Codec.HEVC : { + "main" : "main", + "scc" : "screen-extended-main", + "scc-444" : "screen-extended-main-444", + "main444" : "main-444", + #profile of "hevc-8bit 422" is mapped to main-422-10 based on + #https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding#Profiles + "main422" : "main-422-10", + "main10" : "main-10", + "main444-10" : "main-444-10", + "main12" : "main-12", + }, + Codec.VP9 : { + "profile3" : "profile3", + }, + }.get(codec, {}).get(profile, None) + +def load_test_spec(*ctx): + from ....lib import util as libutil + return libutil.load_test_spec("gst-d3d12", *ctx) diff --git a/test/gst-d3d12/__init__.py b/test/gst-d3d12/__init__.py new file mode 100644 index 00000000..8a43348f --- /dev/null +++ b/test/gst-d3d12/__init__.py @@ -0,0 +1,5 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### diff --git a/test/gst-d3d12/decode/10bit/__init__.py b/test/gst-d3d12/decode/10bit/__init__.py new file mode 100644 index 00000000..8a43348f --- /dev/null +++ b/test/gst-d3d12/decode/10bit/__init__.py @@ -0,0 +1,5 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### diff --git a/test/gst-d3d12/decode/10bit/av1.py b/test/gst-d3d12/decode/10bit/av1.py new file mode 100644 index 00000000..3bc43560 --- /dev/null +++ b/test/gst-d3d12/decode/10bit/av1.py @@ -0,0 +1,34 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from .....lib import * +from .....lib.gstreamer.d3d12.util import * +from .....lib.gstreamer.d3d12.decoder import AV1_10DecoderTest as DecoderTest + +spec = load_test_spec("av1", "decode", "10bit") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + + dxmap = {".ivf" : "ivfparse", ".webm" : "matroskademux", ".mkv" : "matroskademux", ".obu" : "av1parse"} + ext = os.path.splitext(self.source)[1] + dx = dxmap.get(ext, None) + assert dx is not None, "Unrecognized source file extension {}".format(ext) + + vars(self).update( + case = case, + gstdemuxer = dx if self.gstparser not in dx else None, + ) + self.decode() diff --git a/test/gst-d3d12/decode/10bit/hevc.py b/test/gst-d3d12/decode/10bit/hevc.py new file mode 100644 index 00000000..15a33045 --- /dev/null +++ b/test/gst-d3d12/decode/10bit/hevc.py @@ -0,0 +1,25 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from .....lib import * +from .....lib.gstreamer.d3d12.util import * +from .....lib.gstreamer.d3d12.decoder import HEVC_10DecoderTest as DecoderTest + +spec = load_test_spec("hevc", "decode", "10bit") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + vars(self).update(case = case) + self.decode() diff --git a/test/gst-d3d12/decode/10bit/vp9.py b/test/gst-d3d12/decode/10bit/vp9.py new file mode 100644 index 00000000..2eadf6d0 --- /dev/null +++ b/test/gst-d3d12/decode/10bit/vp9.py @@ -0,0 +1,33 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from .....lib import * +from .....lib.gstreamer.d3d12.util import * +from .....lib.gstreamer.d3d12.decoder import VP9_10DecoderTest as DecoderTest + +spec = load_test_spec("vp9", "decode", "10bit") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + + dxmap = {".ivf" : "ivfparse", ".webm" : "matroskademux", ".mkv" : "matroskademux"} + ext = os.path.splitext(self.source)[1] + assert ext in dxmap.keys(), "Unrecognized source file extension {}".format(ext) + + vars(self).update( + case = case, + gstdemuxer = dxmap[ext], + ) + self.decode() diff --git a/test/gst-d3d12/decode/12bit/__init__.py b/test/gst-d3d12/decode/12bit/__init__.py new file mode 100644 index 00000000..8a43348f --- /dev/null +++ b/test/gst-d3d12/decode/12bit/__init__.py @@ -0,0 +1,5 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### diff --git a/test/gst-d3d12/decode/12bit/hevc.py b/test/gst-d3d12/decode/12bit/hevc.py new file mode 100644 index 00000000..1fadf78b --- /dev/null +++ b/test/gst-d3d12/decode/12bit/hevc.py @@ -0,0 +1,25 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from .....lib import * +from .....lib.gstreamer.d3d12.util import * +from .....lib.gstreamer.d3d12.decoder import HEVC_12DecoderTest as DecoderTest + +spec = load_test_spec("hevc", "decode", "12bit") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + vars(self).update(case = case) + self.decode() diff --git a/test/gst-d3d12/decode/12bit/vp9.py b/test/gst-d3d12/decode/12bit/vp9.py new file mode 100644 index 00000000..ebe1eb51 --- /dev/null +++ b/test/gst-d3d12/decode/12bit/vp9.py @@ -0,0 +1,33 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from .....lib import * +from .....lib.gstreamer.d3d12.util import * +from .....lib.gstreamer.d3d12.decoder import VP9_12DecoderTest as DecoderTest + +spec = load_test_spec("vp9", "decode", "12bit") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + + dxmap = {".ivf" : "ivfparse", ".webm" : "matroskademux", ".mkv" : "matroskademux"} + ext = os.path.splitext(self.source)[1] + assert ext in dxmap.keys(), "Unrecognized source file extension {}".format(ext) + + vars(self).update( + case = case, + gstdemuxer = dxmap[ext], + ) + self.decode() diff --git a/test/gst-d3d12/decode/__init__.py b/test/gst-d3d12/decode/__init__.py new file mode 100644 index 00000000..8a43348f --- /dev/null +++ b/test/gst-d3d12/decode/__init__.py @@ -0,0 +1,5 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### diff --git a/test/gst-d3d12/decode/av1.py b/test/gst-d3d12/decode/av1.py new file mode 100644 index 00000000..7d52431d --- /dev/null +++ b/test/gst-d3d12/decode/av1.py @@ -0,0 +1,33 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from ....lib import * +from ....lib.gstreamer.d3d12.util import * +from ....lib.gstreamer.d3d12.decoder import AV1_8DecoderTest as DecoderTest + +spec = load_test_spec("av1", "decode", "8bit") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + + dxmap = {".ivf" : "ivfparse", ".av1" : "ivfparse", ".webm" : "matroskademux"} + ext = os.path.splitext(self.source)[1] + assert ext in dxmap.keys(), "Unrecognized source file extension {}".format(ext) + + vars(self).update( + case = case, + gstdemuxer = dxmap[ext], + ) + self.decode() diff --git a/test/gst-d3d12/decode/avc.py b/test/gst-d3d12/decode/avc.py new file mode 100644 index 00000000..2589c3e9 --- /dev/null +++ b/test/gst-d3d12/decode/avc.py @@ -0,0 +1,25 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from ....lib import * +from ....lib.gstreamer.d3d12.util import * +from ....lib.gstreamer.d3d12.decoder import AVCDecoderTest as DecoderTest + +spec = load_test_spec("avc", "decode") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + vars(self).update(case = case) + self.decode() diff --git a/test/gst-d3d12/decode/hevc.py b/test/gst-d3d12/decode/hevc.py new file mode 100644 index 00000000..bfeecd1e --- /dev/null +++ b/test/gst-d3d12/decode/hevc.py @@ -0,0 +1,25 @@ +### +### Copyright (C) 2024 Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from ....lib import * +from ....lib.gstreamer.d3d12.util import * +from ....lib.gstreamer.d3d12.decoder import HEVC_8DecoderTest as DecoderTest + +spec = load_test_spec("hevc", "decode", "8bit") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + vars(self).update(case = case) + self.decode() diff --git a/test/gst-d3d12/decode/jpeg.py b/test/gst-d3d12/decode/jpeg.py new file mode 100644 index 00000000..762eacc9 --- /dev/null +++ b/test/gst-d3d12/decode/jpeg.py @@ -0,0 +1,33 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from ....lib import * +from ....lib.gstreamer.d3d12.util import * +from ....lib.gstreamer.d3d12.decoder import JPEGDecoderTest as DecoderTest + +spec = load_test_spec("jpeg", "decode") +spec_r2r = load_test_spec("jpeg", "decode", "r2r") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 0.99, minu = 0.99, minv = 0.99), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + vars(self).update(case = case) + self.decode() + + @slash.parametrize(("case"), sorted(spec_r2r.keys())) + def test_r2r(self, case): + vars(self).update(spec_r2r[case].copy()) + vars(self).update(case = case) + vars(self).setdefault("r2r", 5) + self.decode() diff --git a/test/gst-d3d12/decode/mpeg2.py b/test/gst-d3d12/decode/mpeg2.py new file mode 100644 index 00000000..3cc72b9a --- /dev/null +++ b/test/gst-d3d12/decode/mpeg2.py @@ -0,0 +1,33 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from ....lib import * +from ....lib.gstreamer.d3d12.util import * +from ....lib.gstreamer.d3d12.decoder import MPEG2DecoderTest as DecoderTest + +spec = load_test_spec("mpeg2", "decode") +spec_r2r = load_test_spec("mpeg2", "decode", "r2r") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 0.99, minu = 0.99, minv = 0.99), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + vars(self).update(case = case) + self.decode() + + @slash.parametrize(("case"), sorted(spec_r2r.keys())) + def test_r2r(self, case): + vars(self).update(spec_r2r[case].copy()) + vars(self).update(case = case) + vars(self).setdefault("r2r", 5) + self.decode() diff --git a/test/gst-d3d12/decode/vp8.py b/test/gst-d3d12/decode/vp8.py new file mode 100644 index 00000000..d82061b0 --- /dev/null +++ b/test/gst-d3d12/decode/vp8.py @@ -0,0 +1,33 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from ....lib import * +from ....lib.gstreamer.d3d12.util import * +from ....lib.gstreamer.d3d12.decoder import VP8DecoderTest as DecoderTest + +spec = load_test_spec("vp8", "decode") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + + dxmap = {".ivf" : "ivfparse", ".webm" : "matroskademux"} + ext = os.path.splitext(self.source)[1] + assert ext in dxmap.keys(), "Unrecognized source file extension {}".format(ext) + + vars(self).update( + case = case, + gstdemuxer = dxmap[ext], + ) + self.decode() diff --git a/test/gst-d3d12/decode/vp9.py b/test/gst-d3d12/decode/vp9.py new file mode 100644 index 00000000..c788fab2 --- /dev/null +++ b/test/gst-d3d12/decode/vp9.py @@ -0,0 +1,33 @@ +### +### Copyright (C) 2024 Intel Corporation +### +### SPDX-License-Identifier: BSD-3-Clause +### + +from ....lib import * +from ....lib.gstreamer.d3d12.util import * +from ....lib.gstreamer.d3d12.decoder import VP9_8DecoderTest as DecoderTest + +spec = load_test_spec("vp9", "decode", "8bit") + +class default(DecoderTest): + def before(self): + super().before() + vars(self).update( + # default metric + metric = dict(type = "ssim", miny = 1.0, minu = 1.0, minv = 1.0), + ) + + @slash.parametrize(("case"), sorted(spec.keys())) + def test(self, case): + vars(self).update(spec[case].copy()) + + dxmap = {".ivf" : "ivfparse", ".webm" : "matroskademux"} + ext = os.path.splitext(self.source)[1] + assert ext in dxmap.keys(), "Unrecognized source file extension {}".format(ext) + + vars(self).update( + case = case, + gstdemuxer = dxmap[ext], + ) + self.decode()