From 461c4bc32c2ae23fdb9888da5e4f3d2f608f6f52 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Sat, 25 Nov 2023 19:34:12 +0900 Subject: [PATCH] d3d11: Add support for more packed formats using compute shader Adding below listed formats support, and reorders supported format list based on preference UYVY, VYUY, YVYU, v210, v216 v308, IYU2 RGB16, RGB15, BGR16, BGR15 ARGB, xRGB, ABGR, xBGR, RGB, BGR r210, BGR10A2 BGRA64 Part-of: --- .../docs/plugins/gst_plugins_cache.json | 30 +- .../gst-libs/gst/d3d11/gstd3d11-private.h | 108 +- .../gst/d3d11/gstd3d11converter-builder.cpp | 36 + .../gst/d3d11/gstd3d11converter-helper.cpp | 176 ++- .../gst-libs/gst/d3d11/gstd3d11converter.cpp | 114 +- .../gst-libs/gst/d3d11/gstd3d11device.cpp | 20 + .../gst-libs/gst/d3d11/gstd3d11format.cpp | 2 + .../gst/d3d11/hlsl/CSMain_converter.hlsl | 1042 ++++++++++++++++- .../gst/d3d11/hlsl/PSMain_converter.hlsl | 276 +++++ .../gst-libs/gst/d3d11/hlsl/meson.build | 42 + .../sys/d3d11/gstd3d11convert.cpp | 4 + .../sys/d3d11/gstd3d11testsrc.cpp | 4 +- 12 files changed, 1801 insertions(+), 53 deletions(-) diff --git a/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json b/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json index bf6df130f3..9356161cec 100644 --- a/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json +++ b/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json @@ -8924,12 +8924,12 @@ "klass": "Filter/Converter/Video/Hardware", "pad-templates": { "sink": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" }, "src": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "src", "presence": "always" } @@ -9004,7 +9004,7 @@ "klass": "Filter/Editor/Video/Compositor", "pad-templates": { "sink_%%u": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "request", "type": "GstD3D11CompositorPad" @@ -9077,12 +9077,12 @@ "klass": "Filter/Converter/Scaler/Effect/Video/Hardware", "pad-templates": { "sink": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" }, "src": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "src", "presence": "always" } @@ -9290,12 +9290,12 @@ "klass": "Filter/Effect/Video/Deinterlace/Hardware", "pad-templates": { "sink": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\nvideo/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\nvideo/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n", "direction": "sink", "presence": "always" }, "src": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\nvideo/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\nvideo/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n", "direction": "src", "presence": "always" } @@ -9491,12 +9491,12 @@ "klass": "Filter/Video", "pad-templates": { "sink": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" }, "src": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "src", "presence": "always" } @@ -9934,12 +9934,12 @@ "klass": "Filter/Converter/Video/Scaler/Hardware", "pad-templates": { "sink": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" }, "src": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "src", "presence": "always" } @@ -10171,7 +10171,7 @@ "klass": "Source/Video", "pad-templates": { "src": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "src", "presence": "always" } @@ -10259,12 +10259,12 @@ "klass": "Filter/Video", "pad-templates": { "sink": { - "caps": "video/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" }, "src": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "src", "presence": "always" } @@ -10290,7 +10290,7 @@ "klass": "Sink/Video", "pad-templates": { "sink": { - "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, Y210, Y212_LE, Y412_LE, GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw(memory:D3D11Memory):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):\n format: { RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, I420, YV12, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }\n width: [ 1, 16384 ]\n height: [ 1, 16384 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" } diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11-private.h b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11-private.h index 17cf92e079..e2639a91eb 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11-private.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11-private.h @@ -29,13 +29,41 @@ G_BEGIN_DECLS +/* + * Preferred sorting order in a tier + * - number of components + * - depth + * - subsampling + * - supports both SRV and RTV + * - prefer smaller number of planes + * - prefer non-complex formats + * - prefer YUV formats over RGB ones + * - prefer I420 over YV12 + * - format name + */ + +/* DXGI (semi) native formats */ +#define GST_D3D11_TIER_0_FORMATS \ + "RGBA64_LE, BGRA64_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y212_LE, " \ + "Y210, VUYA, RGBA, BGRA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, " \ + "NV12" + +/* both SRV and RTV are supported */ +#define GST_D3D11_TIER_1_FORMATS \ + "AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, " \ + "GBR_16LE, Y444_12LE, GBR_12LE, I422_12LE, I420_12LE, Y444_10LE, GBR_10LE, " \ + "I422_10LE, I420_10LE, Y444, BGRP, GBR, RGBP, xBGR, xRGB, Y42B, NV21, " \ + "I420, YV12, GRAY16_LE, GRAY8" + +/* pre/post processing required formats */ +#define GST_D3D11_TIER_LAST_FORMATS \ + "v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, " \ + "RGB15, BGR15" + #define GST_D3D11_COMMON_FORMATS \ - "RGBA64_LE, RGB10A2_LE, BGRA, RGBA, BGRx, RGBx, VUYA, NV12, NV21, " \ - "P010_10LE, P012_LE, P016_LE, I420, YV12, I420_10LE, I420_12LE, " \ - "Y42B, I422_10LE, I422_12LE, Y444, Y444_10LE, Y444_12LE, Y444_16LE, YUY2, Y410, " \ - "Y210, Y212_LE, Y412_LE, " \ - "GRAY8, GRAY16_LE, AYUV, AYUV64, RGBP, BGRP, GBR, GBR_10LE, GBR_12LE, " \ - "GBR_16LE, GBRA, GBRA_10LE, GBRA_12LE" + GST_D3D11_TIER_0_FORMATS ", " \ + GST_D3D11_TIER_1_FORMATS ", " \ + GST_D3D11_TIER_LAST_FORMATS #define GST_D3D11_SINK_FORMATS \ "{ " GST_D3D11_COMMON_FORMATS " }" @@ -78,8 +106,8 @@ void gst_d3d11_device_log_live_objects (GstD3D11Device * device, { DXGI_FORMAT_ ##r0, DXGI_FORMAT_ ##r1, DXGI_FORMAT_ ##r2, DXGI_FORMAT_ ##r3 }, \ (D3D11_FORMAT_SUPPORT) (D3D11_FORMAT_SUPPORT_RENDER_TARGET | D3D11_FORMAT_SUPPORT_SHADER_SAMPLE) } -#define MAKE_FORMAT_MAP_YUV_FULL(g,d,r0,r1,r2,r3,f) \ - { GST_VIDEO_FORMAT_ ##g, DXGI_FORMAT_ ##d, \ +#define MAKE_FORMAT_MAP_FULL(g,d,r0,r1,r2,r3,f) \ + { g, DXGI_FORMAT_ ##d, \ { DXGI_FORMAT_ ##r0, DXGI_FORMAT_ ##r1, DXGI_FORMAT_ ##r2, DXGI_FORMAT_ ##r3 }, \ { DXGI_FORMAT_ ##r0, DXGI_FORMAT_ ##r1, DXGI_FORMAT_ ##r2, DXGI_FORMAT_ ##r3 }, \ (D3D11_FORMAT_SUPPORT) (f) } @@ -101,6 +129,10 @@ static const GstD3D11Format _gst_d3d11_default_format_map[] = { MAKE_FORMAT_MAP_RGB (RGBA, R8G8B8A8_UNORM), MAKE_FORMAT_MAP_RGB (BGRx, B8G8R8A8_UNORM), MAKE_FORMAT_MAP_RGB (RGBx, R8G8B8A8_UNORM), + MAKE_FORMAT_MAP_RGB (ARGB, R8G8B8A8_UNORM), + MAKE_FORMAT_MAP_RGB (xRGB, R8G8B8A8_UNORM), + MAKE_FORMAT_MAP_RGB (ABGR, R8G8B8A8_UNORM), + MAKE_FORMAT_MAP_RGB (xBGR, R8G8B8A8_UNORM), MAKE_FORMAT_MAP_RGB (RGB10A2_LE, R10G10B10A2_UNORM), MAKE_FORMAT_MAP_RGB (RGBA64_LE, R16G16B16A16_UNORM), MAKE_FORMAT_MAP_YUV (AYUV, UNKNOWN, R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN), @@ -122,6 +154,9 @@ static const GstD3D11Format _gst_d3d11_default_format_map[] = { MAKE_FORMAT_MAP_YUV (Y444_10LE, UNKNOWN, R16_UNORM, R16_UNORM, R16_UNORM, UNKNOWN), MAKE_FORMAT_MAP_YUV (Y444_12LE, UNKNOWN, R16_UNORM, R16_UNORM, R16_UNORM, UNKNOWN), MAKE_FORMAT_MAP_YUV (Y444_16LE, UNKNOWN, R16_UNORM, R16_UNORM, R16_UNORM, UNKNOWN), + MAKE_FORMAT_MAP_YUV (UYVY, UNKNOWN, R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN), + MAKE_FORMAT_MAP_YUV (VYUY, UNKNOWN, R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN), + MAKE_FORMAT_MAP_YUV (YVYU, UNKNOWN, R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN), /* GRAY */ /* NOTE: To support conversion by using video processor, * mark DXGI_FORMAT_{R8,R16}_UNORM formats as known dxgi_format. @@ -129,15 +164,59 @@ static const GstD3D11Format _gst_d3d11_default_format_map[] = { * those formats */ MAKE_FORMAT_MAP_RGB (GRAY8, R8_UNORM), MAKE_FORMAT_MAP_RGB (GRAY16_LE, R16_UNORM), - MAKE_FORMAT_MAP_YUV_FULL (Y410, Y410, R10G10B10A2_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_Y410, Y410, + R10G10B10A2_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), - MAKE_FORMAT_MAP_YUV_FULL (YUY2, YUY2, R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_BGR10A2_LE, Y410, + R10G10B10A2_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), - MAKE_FORMAT_MAP_YUV_FULL (Y210, Y210, R16G16B16A16_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_YUY2, YUY2, + R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), - MAKE_FORMAT_MAP_YUV_FULL (Y212_LE, Y216, R16G16B16A16_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_Y210, Y210, + R16G16B16A16_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), - MAKE_FORMAT_MAP_YUV_FULL (Y412_LE, Y416, R16G16B16A16_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_Y212_LE, Y216, + R16G16B16A16_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_Y412_LE, Y416, + R16G16B16A16_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_BGRA64_LE, Y416, + R16G16B16A16_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_RGB, UNKNOWN, + R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_BGR, UNKNOWN, + R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_v210, UNKNOWN, + R10G10B10A2_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_v216, UNKNOWN, + R16G16B16A16_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_v308, UNKNOWN, + R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_IYU2, UNKNOWN, + R8G8B8A8_UNORM, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_RGB16, UNKNOWN, + R16_UINT, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_BGR16, UNKNOWN, + R16_UINT, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_RGB15, UNKNOWN, + R16_UINT, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_BGR15, UNKNOWN, + R16_UINT, UNKNOWN, UNKNOWN, UNKNOWN, + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), + MAKE_FORMAT_MAP_FULL (GST_VIDEO_FORMAT_r210, UNKNOWN, + R32_UINT, UNKNOWN, UNKNOWN, UNKNOWN, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE), MAKE_FORMAT_MAP_RGBP (RGBP, R8_UNORM, UNKNOWN), MAKE_FORMAT_MAP_RGBP (BGRP, R8_UNORM, UNKNOWN), @@ -151,8 +230,9 @@ static const GstD3D11Format _gst_d3d11_default_format_map[] = { }; #undef MAKE_FORMAT_MAP_YUV -#undef MAKE_FORMAT_MAP_YUV_FULL +#undef MAKE_FORMAT_MAP_FULL #undef MAKE_FORMAT_MAP_RGB +#undef MAKE_FORMAT_MAP_RGBP #define GST_D3D11_N_FORMATS G_N_ELEMENTS(_gst_d3d11_default_format_map) diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter-builder.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter-builder.cpp index 75125a616f..20b813a70d 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter-builder.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter-builder.cpp @@ -129,6 +129,18 @@ make_input (GstVideoFormat format, gboolean premul) case GST_VIDEO_FORMAT_RGBx: case GST_VIDEO_FORMAT_BGRx: return "RGBx"; + case GST_VIDEO_FORMAT_ARGB: + if (premul) + return "ARGBPremul"; + return "ARGB"; + case GST_VIDEO_FORMAT_xRGB: + return "xRGB"; + case GST_VIDEO_FORMAT_ABGR: + if (premul) + return "ABGRPremul"; + return "ABGR"; + case GST_VIDEO_FORMAT_xBGR: + return "xBGR"; case GST_VIDEO_FORMAT_VUYA: if (premul) return "VUYAPremul"; @@ -190,6 +202,12 @@ make_input (GstVideoFormat format, gboolean premul) if (premul) return "Y412Premul"; return "Y412"; + case GST_VIDEO_FORMAT_BGR10A2_LE: + return "BGR10A2"; + case GST_VIDEO_FORMAT_BGRA64_LE: + if (premul) + return "BGRA64Premul"; + return "BGRA64"; default: g_assert_not_reached (); break; @@ -217,6 +235,24 @@ make_output (GstVideoFormat format, gboolean premul) case GST_VIDEO_FORMAT_BGRx: ret.push_back(std::make_pair(PS_OUTPUT::PACKED, "RGBx")); break; + case GST_VIDEO_FORMAT_ARGB: + if (premul) + ret.push_back(std::make_pair(PS_OUTPUT::PACKED, "ARGBPremul")); + else + ret.push_back(std::make_pair(PS_OUTPUT::PACKED, "ARGB")); + break; + case GST_VIDEO_FORMAT_xRGB: + ret.push_back(std::make_pair(PS_OUTPUT::PACKED, "xRGB")); + break; + case GST_VIDEO_FORMAT_ABGR: + if (premul) + ret.push_back(std::make_pair(PS_OUTPUT::PACKED, "ABGRPremul")); + else + ret.push_back(std::make_pair(PS_OUTPUT::PACKED, "ABGR")); + break; + case GST_VIDEO_FORMAT_xBGR: + ret.push_back(std::make_pair(PS_OUTPUT::PACKED, "xBGR")); + break; case GST_VIDEO_FORMAT_VUYA: if (premul) ret.push_back(std::make_pair(PS_OUTPUT::PACKED, "VUYAPremul")); diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter-helper.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter-helper.cpp index 7314fb570d..e6e9b7ab44 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter-helper.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter-helper.cpp @@ -108,7 +108,7 @@ gst_d3d11_converter_helper_new (GstD3D11Device * device, D3D_FEATURE_LEVEL feature_level; DXGI_FORMAT srv_format = DXGI_FORMAT_UNKNOWN; DXGI_FORMAT uav_format = DXGI_FORMAT_UNKNOWN; - guint x_unit = 16; + guint x_unit = 8; guint y_unit = 8; std::string entry_point; HRESULT hr; @@ -121,11 +121,83 @@ gst_d3d11_converter_helper_new (GstD3D11Device * device, case GST_VIDEO_FORMAT_YUY2: srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; in_format_str = "YUY2"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_UYVY: + srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; + in_format_str = "UYVY"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_VYUY: + srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; + in_format_str = "VYUY"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_YVYU: + srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; + in_format_str = "YVYU"; + x_unit = 16; break; case GST_VIDEO_FORMAT_Y210: case GST_VIDEO_FORMAT_Y212_LE: srv_format = DXGI_FORMAT_R16G16B16A16_UNORM; in_format_str = "YUY2"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_v210: + srv_format = DXGI_FORMAT_R10G10B10A2_UNORM; + in_format_str = "v210"; + x_unit = 48; + break; + case GST_VIDEO_FORMAT_v216: + srv_format = DXGI_FORMAT_R16G16B16A16_UNORM; + in_format_str = "UYVY"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_v308: + srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; + in_format_str = "v308"; + x_unit = 32; + break; + case GST_VIDEO_FORMAT_IYU2: + srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; + in_format_str = "IYU2"; + x_unit = 32; + break; + case GST_VIDEO_FORMAT_RGB: + srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; + in_format_str = "RGB"; + x_unit = 32; + break; + case GST_VIDEO_FORMAT_BGR: + srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; + in_format_str = "BGR"; + x_unit = 32; + break; + case GST_VIDEO_FORMAT_RGB16: + srv_format = DXGI_FORMAT_R16_UINT; + in_format_str = "RGB16"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_BGR16: + srv_format = DXGI_FORMAT_R16_UINT; + in_format_str = "BGR16"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_RGB15: + srv_format = DXGI_FORMAT_R16_UINT; + in_format_str = "RGB15"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_BGR15: + srv_format = DXGI_FORMAT_R16_UINT; + in_format_str = "BGR15"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_r210: + srv_format = DXGI_FORMAT_R32_UINT; + in_format_str = "r210"; + x_unit = 8; break; case GST_VIDEO_FORMAT_AYUV: srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; @@ -135,6 +207,18 @@ gst_d3d11_converter_helper_new (GstD3D11Device * device, srv_format = DXGI_FORMAT_R16G16B16A16_UNORM; in_format_str = "AYUV"; break; + case GST_VIDEO_FORMAT_RGBA: + srv_format = DXGI_FORMAT_R8G8B8A8_UNORM; + in_format_str = "RGBA"; + break; + case GST_VIDEO_FORMAT_RGB10A2_LE: + srv_format = DXGI_FORMAT_R10G10B10A2_UNORM; + in_format_str = "RGBA"; + break; + case GST_VIDEO_FORMAT_RGBA64_LE: + srv_format = DXGI_FORMAT_R16G16B16A16_UNORM; + in_format_str = "RGBA"; + break; default: g_assert_not_reached (); return nullptr; @@ -144,11 +228,48 @@ gst_d3d11_converter_helper_new (GstD3D11Device * device, case GST_VIDEO_FORMAT_YUY2: uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; out_format_str = "YUY2"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_UYVY: + uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; + out_format_str = "UYVY"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_VYUY: + uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; + out_format_str = "VYUY"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_YVYU: + uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; + out_format_str = "YVYU"; + x_unit = 16; break; case GST_VIDEO_FORMAT_Y210: case GST_VIDEO_FORMAT_Y212_LE: uav_format = DXGI_FORMAT_R16G16B16A16_UNORM; out_format_str = "YUY2"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_v210: + uav_format = DXGI_FORMAT_R10G10B10A2_UNORM; + out_format_str = "v210"; + x_unit = 48; + break; + case GST_VIDEO_FORMAT_v216: + uav_format = DXGI_FORMAT_R16G16B16A16_UNORM; + out_format_str = "UYVY"; + x_unit = 16; + break; + case GST_VIDEO_FORMAT_v308: + uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; + out_format_str = "v308"; + x_unit = 32; + break; + case GST_VIDEO_FORMAT_IYU2: + uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; + out_format_str = "IYU2"; + x_unit = 32; break; case GST_VIDEO_FORMAT_Y410: uav_format = DXGI_FORMAT_R10G10B10A2_UNORM; @@ -160,6 +281,51 @@ gst_d3d11_converter_helper_new (GstD3D11Device * device, out_format_str = "Y410"; x_unit = 8; break; + case GST_VIDEO_FORMAT_RGB: + uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; + out_format_str = "RGB"; + x_unit = 32; + break; + case GST_VIDEO_FORMAT_BGR: + uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; + out_format_str = "BGR"; + x_unit = 32; + break; + case GST_VIDEO_FORMAT_RGB16: + uav_format = DXGI_FORMAT_R16_UINT; + out_format_str = "RGB16"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_BGR16: + uav_format = DXGI_FORMAT_R16_UINT; + out_format_str = "BGR16"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_RGB15: + uav_format = DXGI_FORMAT_R16_UINT; + out_format_str = "RGB15"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_BGR15: + uav_format = DXGI_FORMAT_R16_UINT; + out_format_str = "BGR15"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_r210: + uav_format = DXGI_FORMAT_R32_UINT; + out_format_str = "r210"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_BGRA64_LE: + uav_format = DXGI_FORMAT_R16G16B16A16_UNORM; + out_format_str = "BGRA"; + x_unit = 8; + break; + case GST_VIDEO_FORMAT_BGR10A2_LE: + uav_format = DXGI_FORMAT_R10G10B10A2_UNORM; + out_format_str = "BGRA"; + x_unit = 8; + break; case GST_VIDEO_FORMAT_AYUV: uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; out_format_str = "AYUV"; @@ -168,6 +334,14 @@ gst_d3d11_converter_helper_new (GstD3D11Device * device, uav_format = DXGI_FORMAT_R16G16B16A16_UNORM; out_format_str = "AYUV"; break; + case GST_VIDEO_FORMAT_RGBA: + uav_format = DXGI_FORMAT_R8G8B8A8_UNORM; + out_format_str = "RGBA"; + break; + case GST_VIDEO_FORMAT_RGB10A2_LE: + uav_format = DXGI_FORMAT_R10G10B10A2_UNORM; + out_format_str = "RGBA"; + break; default: g_assert_not_reached (); return nullptr; diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.cpp index b5b9cca51a..9a14aefb29 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11converter.cpp @@ -1594,6 +1594,24 @@ gst_d3d11_converter_setup_lut (GstD3D11Converter * self, return TRUE; } +static gboolean +is_custom_format (GstVideoFormat format) +{ + switch (format) { + case GST_VIDEO_FORMAT_xRGB: + case GST_VIDEO_FORMAT_xBGR: + case GST_VIDEO_FORMAT_ARGB: + case GST_VIDEO_FORMAT_ABGR: + case GST_VIDEO_FORMAT_BGRA64_LE: + case GST_VIDEO_FORMAT_BGR10A2_LE: + return TRUE; + default: + break; + } + + return FALSE; +} + static void gst_d3d11_converter_calculate_border_color (GstD3D11Converter * self) { @@ -1657,8 +1675,8 @@ gst_d3d11_converter_calculate_border_color (GstD3D11Converter * self) } if ((GST_VIDEO_INFO_IS_RGB (out_info) && - GST_VIDEO_INFO_N_PLANES (out_info) == 1) || - GST_VIDEO_INFO_IS_GRAY (out_info)) { + GST_VIDEO_INFO_N_PLANES (out_info) == 1 && + !is_custom_format (format)) || GST_VIDEO_INFO_IS_GRAY (out_info)) { for (guint i = 0; i < 3; i++) priv->clear_color[0][i] = converted[i]; priv->clear_color[0][3] = a; @@ -1677,6 +1695,20 @@ gst_d3d11_converter_calculate_border_color (GstD3D11Converter * self) priv->clear_color[0][2] = converted[1]; priv->clear_color[0][3] = converted[2]; break; + case GST_VIDEO_FORMAT_ARGB: + case GST_VIDEO_FORMAT_xRGB: + priv->clear_color[0][0] = a; + priv->clear_color[0][1] = converted[0]; + priv->clear_color[0][2] = converted[1]; + priv->clear_color[0][3] = converted[2]; + break; + case GST_VIDEO_FORMAT_ABGR: + case GST_VIDEO_FORMAT_xBGR: + priv->clear_color[0][0] = a; + priv->clear_color[0][1] = converted[2]; + priv->clear_color[0][2] = converted[1]; + priv->clear_color[0][3] = converted[0]; + break; case GST_VIDEO_FORMAT_NV12: case GST_VIDEO_FORMAT_NV21: case GST_VIDEO_FORMAT_P010_10LE: @@ -1791,6 +1823,11 @@ gst_d3d11_converter_setup_processor (GstD3D11Converter * self) return FALSE; } + if (is_custom_format (GST_VIDEO_INFO_FORMAT (&priv->in_info)) || + is_custom_format (GST_VIDEO_INFO_FORMAT (&priv->out_info))) { + return FALSE; + } + /* cannot bind to processor in/out view */ if ((in_format_flags & D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT) == 0 || (out_format_flags & D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT) == 0) { @@ -1913,6 +1950,51 @@ gst_d3d11_converter_setup_processor (GstD3D11Converter * self) return TRUE; } +static GstVideoFormat +get_shader_format (GstVideoFormat format, gboolean is_input) +{ + switch (format) { + case GST_VIDEO_FORMAT_YUY2: + case GST_VIDEO_FORMAT_UYVY: + case GST_VIDEO_FORMAT_VYUY: + case GST_VIDEO_FORMAT_YVYU: + case GST_VIDEO_FORMAT_v308: + case GST_VIDEO_FORMAT_IYU2: + return GST_VIDEO_FORMAT_AYUV; + case GST_VIDEO_FORMAT_Y210: + case GST_VIDEO_FORMAT_Y212_LE: + case GST_VIDEO_FORMAT_v210: + case GST_VIDEO_FORMAT_v216: + return GST_VIDEO_FORMAT_AYUV64; + case GST_VIDEO_FORMAT_Y410: + case GST_VIDEO_FORMAT_Y412_LE: + if (!is_input) + return GST_VIDEO_FORMAT_AYUV64; + break; + case GST_VIDEO_FORMAT_RGB: + case GST_VIDEO_FORMAT_BGR: + case GST_VIDEO_FORMAT_RGB16: + case GST_VIDEO_FORMAT_BGR16: + case GST_VIDEO_FORMAT_RGB15: + case GST_VIDEO_FORMAT_BGR15: + return GST_VIDEO_FORMAT_RGBA; + case GST_VIDEO_FORMAT_r210: + return GST_VIDEO_FORMAT_RGB10A2_LE; + case GST_VIDEO_FORMAT_BGRA64_LE: + if (!is_input) + return GST_VIDEO_FORMAT_RGBA64_LE; + break; + case GST_VIDEO_FORMAT_BGR10A2_LE: + if (!is_input) + return GST_VIDEO_FORMAT_RGB10A2_LE; + break; + default: + break; + } + + return format; +} + /** * gst_d3d11_converter_new: * @device: a #GstD3D11Device @@ -1945,6 +2027,8 @@ gst_d3d11_converter_new (GstD3D11Device * device, const GstVideoInfo * in_info, gchar *backend_str; GstVideoInfo matrix_in_info; GstVideoInfo matrix_out_info; + GstVideoFormat org_format; + GstVideoFormat shader_format; g_return_val_if_fail (GST_IS_D3D11_DEVICE (device), nullptr); g_return_val_if_fail (in_info != nullptr, nullptr); @@ -2037,16 +2121,12 @@ gst_d3d11_converter_new (GstD3D11Device * device, const GstVideoInfo * in_info, priv->border_color = 0xffff000000000000; /* Preprocess packed and subsampled texture */ - if (GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_YUY2 || - GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_Y210 || - GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_Y212_LE) { + org_format = GST_VIDEO_INFO_FORMAT (in_info); + shader_format = get_shader_format (org_format, TRUE); + if (org_format != shader_format) { GstVideoInfo tmp_info; - GstVideoFormat postproc_format = GST_VIDEO_FORMAT_AYUV; - if (GST_VIDEO_INFO_FORMAT (in_info) != GST_VIDEO_FORMAT_YUY2) - postproc_format = GST_VIDEO_FORMAT_AYUV64; - - gst_video_info_set_interlaced_format (&tmp_info, postproc_format, + gst_video_info_set_interlaced_format (&tmp_info, shader_format, GST_VIDEO_INFO_INTERLACE_MODE (in_info), GST_VIDEO_INFO_WIDTH (in_info), GST_VIDEO_INFO_HEIGHT (in_info)); tmp_info.chroma_site = in_info->chroma_site; @@ -2060,18 +2140,12 @@ gst_d3d11_converter_new (GstD3D11Device * device, const GstVideoInfo * in_info, priv->need_preproc = TRUE; } - if (GST_VIDEO_INFO_FORMAT (out_info) == GST_VIDEO_FORMAT_YUY2 || - GST_VIDEO_INFO_FORMAT (out_info) == GST_VIDEO_FORMAT_Y410 || - GST_VIDEO_INFO_FORMAT (out_info) == GST_VIDEO_FORMAT_Y210 || - GST_VIDEO_INFO_FORMAT (out_info) == GST_VIDEO_FORMAT_Y212_LE || - GST_VIDEO_INFO_FORMAT (out_info) == GST_VIDEO_FORMAT_Y412_LE) { + org_format = GST_VIDEO_INFO_FORMAT (out_info); + shader_format = get_shader_format (org_format, FALSE); + if (org_format != shader_format) { GstVideoInfo tmp_info; - GstVideoFormat postproc_format = GST_VIDEO_FORMAT_AYUV; - if (GST_VIDEO_INFO_FORMAT (out_info) != GST_VIDEO_FORMAT_YUY2) - postproc_format = GST_VIDEO_FORMAT_AYUV64; - - gst_video_info_set_interlaced_format (&tmp_info, postproc_format, + gst_video_info_set_interlaced_format (&tmp_info, shader_format, GST_VIDEO_INFO_INTERLACE_MODE (out_info), GST_VIDEO_INFO_WIDTH (out_info), GST_VIDEO_INFO_HEIGHT (out_info)); tmp_info.chroma_site = out_info->chroma_site; diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp index 13462c04fa..7ab43a272d 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11device.cpp @@ -524,6 +524,8 @@ gst_d3d11_device_setup_format_table (GstD3D11Device * self) case GST_VIDEO_FORMAT_Y210: case GST_VIDEO_FORMAT_Y212_LE: case GST_VIDEO_FORMAT_Y412_LE: + case GST_VIDEO_FORMAT_BGRA64_LE: + case GST_VIDEO_FORMAT_BGR10A2_LE: { gboolean supported = TRUE; @@ -573,6 +575,24 @@ gst_d3d11_device_setup_format_table (GstD3D11Device * self) case GST_VIDEO_FORMAT_Y444_16LE: case GST_VIDEO_FORMAT_AYUV: case GST_VIDEO_FORMAT_AYUV64: + case GST_VIDEO_FORMAT_UYVY: + case GST_VIDEO_FORMAT_VYUY: + case GST_VIDEO_FORMAT_YVYU: + case GST_VIDEO_FORMAT_ARGB: + case GST_VIDEO_FORMAT_xRGB: + case GST_VIDEO_FORMAT_ABGR: + case GST_VIDEO_FORMAT_xBGR: + case GST_VIDEO_FORMAT_RGB: + case GST_VIDEO_FORMAT_BGR: + case GST_VIDEO_FORMAT_v210: + case GST_VIDEO_FORMAT_v216: + case GST_VIDEO_FORMAT_v308: + case GST_VIDEO_FORMAT_IYU2: + case GST_VIDEO_FORMAT_RGB16: + case GST_VIDEO_FORMAT_BGR16: + case GST_VIDEO_FORMAT_RGB15: + case GST_VIDEO_FORMAT_BGR15: + case GST_VIDEO_FORMAT_r210: /* RGB planar formats */ case GST_VIDEO_FORMAT_RGBP: case GST_VIDEO_FORMAT_BGRP: diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11format.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11format.cpp index 41b145751b..b001e3ad06 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11format.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/gstd3d11format.cpp @@ -155,6 +155,8 @@ gst_d3d11_dxgi_format_get_size (DXGI_FORMAT format, guint width, guint height, case DXGI_FORMAT_Y216: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_Y416: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R32_UINT: offset[0] = 0; stride[0] = pitch; *size = pitch * height; diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl index 488d188172..523d224ee0 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/CSMain_converter.hlsl @@ -18,10 +18,10 @@ */ #ifdef BUILDING_HLSL +#ifdef BUILDING_CSMain_YUY2_to_AYUV Texture2D inTex : register(t0); RWTexture2D outTex : register(u0); -#ifdef BUILDING_CSMain_YUY2_to_AYUV void Execute (uint3 tid) { float4 val = inTex.Load (tid); @@ -35,7 +35,160 @@ void Execute (uint3 tid) } #endif +#ifdef BUILDING_CSMain_UYVY_to_AYUV +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float4 val = inTex.Load (tid); + float Y0 = val.g; + float U = val.r; + float Y1 = val.a; + float V = val.b; + + outTex[uint2(tid.x * 2, tid.y)] = float4 (1.0, Y0, U, V); + outTex[uint2(tid.x * 2 + 1, tid.y)] = float4 (1.0, Y1, U, V); +} +#endif + +#ifdef BUILDING_CSMain_VYUY_to_AYUV +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float4 val = inTex.Load (tid); + float Y0 = val.g; + float U = val.b; + float Y1 = val.a; + float V = val.r; + + outTex[uint2(tid.x * 2, tid.y)] = float4 (1.0, Y0, U, V); + outTex[uint2(tid.x * 2 + 1, tid.y)] = float4 (1.0, Y1, U, V); +} +#endif + +#ifdef BUILDING_CSMain_YVYU_to_AYUV +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float4 val = inTex.Load (tid); + float Y0 = val.r; + float U = val.a; + float Y1 = val.b; + float V = val.g; + + outTex[uint2(tid.x * 2, tid.y)] = float4 (1.0, Y0, U, V); + outTex[uint2(tid.x * 2 + 1, tid.y)] = float4 (1.0, Y1, U, V); +} +#endif + +#ifdef BUILDING_CSMain_v210_to_AYUV +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint xpos = tid.x * 4; + float3 val = inTex.Load (uint3 (xpos, tid.y, 0)).xyz; + float U0 = val.r; + float Y0 = val.g; + float V0 = val.b; + + val = inTex.Load (uint3 (xpos + 1, tid.y, 0)).xyz; + float Y1 = val.r; + float U2 = val.g; + float Y2 = val.b; + + val = inTex.Load (uint3 (xpos + 2, tid.y, 0)).xyz; + float V2 = val.r; + float Y3 = val.g; + float U4 = val.b; + + val = inTex.Load (uint3 (xpos + 3, tid.y, 0)).xyz; + float Y4 = val.r; + float V4 = val.g; + float Y5 = val.b; + + xpos = tid.x * 6; + outTex[uint2(xpos, tid.y)] = float4 (1.0, Y0, U0, V0); + outTex[uint2(xpos + 1, tid.y)] = float4 (1.0, Y1, U0, V0); + outTex[uint2(xpos + 2, tid.y)] = float4 (1.0, Y2, U2, V2); + outTex[uint2(xpos + 3, tid.y)] = float4 (1.0, Y3, U2, V2); + outTex[uint2(xpos + 4, tid.y)] = float4 (1.0, Y4, U4, V4); + outTex[uint2(xpos + 5, tid.y)] = float4 (1.0, Y5, U4, V4); +} +#endif + +#ifdef BUILDING_CSMain_v308_to_AYUV +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float4 val = inTex.Load (uint3 (tid.x * 3, tid.y, 0)); + float Y0 = val.x; + float U0 = val.y; + float V0 = val.z; + float Y1 = val.w; + + val = inTex.Load (uint3 (tid.x * 3 + 1, tid.y, 0)); + float U1 = val.x; + float V1 = val.y; + float Y2 = val.z; + float U2 = val.w; + + val = inTex.Load (uint3 (tid.x * 3 + 2, tid.y, 0)); + float V2 = val.x; + float Y3 = val.y; + float U3 = val.z; + float V3 = val.w; + + outTex[uint2(tid.x * 4, tid.y)] = float4 (1.0, Y0, U0, V0); + outTex[uint2(tid.x * 4 + 1, tid.y)] = float4 (1.0, Y1, U1, V1); + outTex[uint2(tid.x * 4 + 2, tid.y)] = float4 (1.0, Y2, U2, V2); + outTex[uint2(tid.x * 4 + 3, tid.y)] = float4 (1.0, Y3, U3, V3); +} +#endif + +#ifdef BUILDING_CSMain_IYU2_to_AYUV +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float4 val = inTex.Load (uint3 (tid.x * 3, tid.y, 0)); + float U0 = val.x; + float Y0 = val.y; + float V0 = val.z; + float U1 = val.w; + + val = inTex.Load (uint3 (tid.x * 3 + 1, tid.y, 0)); + float Y1 = val.x; + float V1 = val.y; + float U2 = val.z; + float Y2 = val.w; + + val = inTex.Load (uint3 (tid.x * 3 + 2, tid.y, 0)); + float V2 = val.x; + float U3 = val.y; + float Y3 = val.z; + float V3 = val.w; + + outTex[uint2(tid.x * 4, tid.y)] = float4 (1.0, Y0, U0, V0); + outTex[uint2(tid.x * 4 + 1, tid.y)] = float4 (1.0, Y1, U1, V1); + outTex[uint2(tid.x * 4 + 2, tid.y)] = float4 (1.0, Y2, U2, V2); + outTex[uint2(tid.x * 4 + 3, tid.y)] = float4 (1.0, Y3, U3, V3); +} +#endif + #ifdef BUILDING_CSMain_AYUV_to_YUY2 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + void Execute (uint3 tid) { float3 val = inTex.Load (uint3(tid.x * 2, tid.y, 0)).yzw; @@ -48,7 +201,125 @@ void Execute (uint3 tid) } #endif +#ifdef BUILDING_CSMain_AYUV_to_UYVY +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val = inTex.Load (uint3(tid.x * 2, tid.y, 0)).yzw; + float Y0 = val.x; + float U = val.y; + float V = val.z; + float Y1 = inTex.Load (uint3(tid.x * 2 + 1, tid.y, 0)).y; + + outTex[tid.xy] = float4 (U, Y0, V, Y1); +} +#endif + +#ifdef BUILDING_CSMain_AYUV_to_VYUY +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val = inTex.Load (uint3(tid.x * 2, tid.y, 0)).yzw; + float Y0 = val.x; + float U = val.y; + float V = val.z; + float Y1 = inTex.Load (uint3(tid.x * 2 + 1, tid.y, 0)).y; + + outTex[tid.xy] = float4 (V, Y0, U, Y1); +} +#endif + +#ifdef BUILDING_CSMain_AYUV_to_YVYU +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val = inTex.Load (uint3(tid.x * 2, tid.y, 0)).yzw; + float Y0 = val.x; + float U = val.y; + float V = val.z; + float Y1 = inTex.Load (uint3(tid.x * 2 + 1, tid.y, 0)).y; + + outTex[tid.xy] = float4 (Y0, V, Y1, U); +} +#endif + +#ifdef BUILDING_CSMain_AYUV_to_v210 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint xpos = tid.x * 6; + float3 val = inTex.Load (uint3 (xpos, tid.y, 0)).yzw; + float Y0 = val.x; + float U0 = val.y; + float V0 = val.z; + float Y1 = inTex.Load (uint3 (xpos + 1, tid.y, 0)).y; + + val = inTex.Load (uint3 (xpos + 2, tid.y, 0)).yzw; + float Y2 = val.x; + float U2 = val.y; + float V2 = val.z; + float Y3 = inTex.Load (uint3 (xpos + 3, tid.y, 0)).y; + + val = inTex.Load (uint3 (xpos + 4, tid.y, 0)).yzw; + float Y4 = val.x; + float U4 = val.y; + float V4 = val.z; + float Y5 = inTex.Load (uint3 (xpos + 5, tid.y, 0)).y; + + xpos = tid.x * 4; + outTex[uint2(xpos, tid.y)] = float4 (U0, Y0, V0, 0); + outTex[uint2(xpos + 1, tid.y)] = float4 (Y1, U2, Y2, 0); + outTex[uint2(xpos + 2, tid.y)] = float4 (V2, Y3, U4, 0); + outTex[uint2(xpos + 3, tid.y)] = float4 (Y4, V4, Y5, 0); +} +#endif + +#ifdef BUILDING_CSMain_AYUV_to_v308 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val0 = inTex.Load (uint3 (tid.x * 4, tid.y, 0)).yzw; + float3 val1 = inTex.Load (uint3 (tid.x * 4 + 1, tid.y, 0)).yzw; + float3 val2 = inTex.Load (uint3 (tid.x * 4 + 2, tid.y, 0)).yzw; + float3 val3 = inTex.Load (uint3 (tid.x * 4 + 3, tid.y, 0)).yzw; + + outTex[uint2(tid.x * 3, tid.y)] = float4 (val0.x, val0.y, val0.z, val1.x); + outTex[uint2(tid.x * 3 + 1, tid.y)] = float4 (val1.y, val1.z, val2.x, val2.y); + outTex[uint2(tid.x * 3 + 2, tid.y)] = float4 (val2.z, val3.x, val3.y, val3.z); +} +#endif + +#ifdef BUILDING_CSMain_AYUV_to_IYU2 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val0 = inTex.Load (uint3 (tid.x * 4, tid.y, 0)).zyw; + float3 val1 = inTex.Load (uint3 (tid.x * 4 + 1, tid.y, 0)).zyw; + float3 val2 = inTex.Load (uint3 (tid.x * 4 + 2, tid.y, 0)).zyw; + float3 val3 = inTex.Load (uint3 (tid.x * 4 + 3, tid.y, 0)).zyw; + + outTex[uint2(tid.x * 3, tid.y)] = float4 (val0.x, val0.y, val0.z, val1.x); + outTex[uint2(tid.x * 3 + 1, tid.y)] = float4 (val1.y, val1.z, val2.x, val2.y); + outTex[uint2(tid.x * 3 + 2, tid.y)] = float4 (val2.z, val3.x, val3.y, val3.z); +} +#endif + #ifdef BUILDING_CSMain_AYUV_to_Y410 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + void Execute (uint3 tid) { float4 val = inTex.Load (tid); @@ -61,6 +332,260 @@ void Execute (uint3 tid) } #endif +#ifdef BUILDING_CSMain_RGB_to_RGBA +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float4 val = inTex.Load (uint3 (tid.x * 3, tid.y, 0)); + float R0 = val.r; + float G0 = val.g; + float B0 = val.b; + float R1 = val.a; + + val = inTex.Load (uint3 (tid.x * 3 + 1, tid.y, 0)); + float G1 = val.r; + float B1 = val.g; + float R2 = val.b; + float G2 = val.a; + + val = inTex.Load (uint3 (tid.x * 3 + 2, tid.y, 0)); + float B2 = val.r; + float R3 = val.g; + float G3 = val.b; + float B3 = val.a; + + outTex[uint2(tid.x * 4, tid.y)] = float4 (R0, G0, B0, 1.0); + outTex[uint2(tid.x * 4 + 1, tid.y)] = float4 (R1, G1, B1, 1.0); + outTex[uint2(tid.x * 4 + 2, tid.y)] = float4 (R2, G2, B2, 1.0); + outTex[uint2(tid.x * 4 + 3, tid.y)] = float4 (R3, G3, B3, 1.0); +} +#endif + +#ifdef BUILDING_CSMain_BGR_to_RGBA +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float4 val = inTex.Load (uint3 (tid.x * 3, tid.y, 0)); + float B0 = val.r; + float G0 = val.g; + float R0 = val.b; + float B1 = val.a; + + val = inTex.Load (uint3 (tid.x * 3 + 1, tid.y, 0)); + float G1 = val.r; + float R1 = val.g; + float B2 = val.b; + float G2 = val.a; + + val = inTex.Load (uint3 (tid.x * 3 + 2, tid.y, 0)); + float R2 = val.r; + float B3 = val.g; + float G3 = val.b; + float R3 = val.a; + + outTex[uint2(tid.x * 4, tid.y)] = float4 (R0, G0, B0, 1.0); + outTex[uint2(tid.x * 4 + 1, tid.y)] = float4 (R1, G1, B1, 1.0); + outTex[uint2(tid.x * 4 + 2, tid.y)] = float4 (R2, G2, B2, 1.0); + outTex[uint2(tid.x * 4 + 3, tid.y)] = float4 (R3, G3, B3, 1.0); +} +#endif + +#ifdef BUILDING_CSMain_RGB16_to_RGBA +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint val = inTex.Load (tid); + float R = float ((val & 0xf800) >> 11) / 31; + float G = float ((val & 0x7e0) >> 5) / 63; + float B = float ((val & 0x1f)) / 31; + + outTex[tid.xy] = float4 (R, G, B, 1.0); +} +#endif + +#ifdef BUILDING_CSMain_BGR16_to_RGBA +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint val = inTex.Load (tid); + float B = float ((val & 0xf800) >> 11) / 31; + float G = float ((val & 0x7e0) >> 5) / 63; + float R = float ((val & 0x1f)) / 31; + + outTex[tid.xy] = float4 (R, G, B, 1.0); +} +#endif + +#ifdef BUILDING_CSMain_RGB15_to_RGBA +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint val = inTex.Load (tid); + uint R = (val & 0x7c00) >> 10; + uint G = (val & 0x3e0) >> 5; + uint B = (val & 0x1f); + + outTex[tid.xy] = float4 (float3 (R, G, B) / 31, 1.0); +} +#endif + +#ifdef BUILDING_CSMain_BGR15_to_RGBA +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint val = inTex.Load (tid); + uint B = (val & 0x7c00) >> 10; + uint G = (val & 0x3e0) >> 5; + uint R = (val & 0x1f); + + outTex[tid.xy] = float4 (float3 (R, G, B) / 31, 1.0); +} +#endif + +#ifdef BUILDING_CSMain_r210_to_RGBA +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint val = inTex.Load (tid); + uint val_be = ((val & 0xff) << 24) | ((val & 0xff00) << 8) | + ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24); + uint R = (val_be >> 20) & 0x3ff; + uint G = (val_be >> 10) & 0x3ff; + uint B = val_be & 0x3ff; + + outTex[tid.xy] = float4 (float3 (R, G, B) / 1023, 1.0); +} +#endif + +#ifdef BUILDING_CSMain_RGBA_to_RGB +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val0 = inTex.Load (uint3 (tid.x * 4, tid.y, 0)).rgb; + float3 val1 = inTex.Load (uint3 (tid.x * 4 + 1, tid.y, 0)).rgb; + float3 val2 = inTex.Load (uint3 (tid.x * 4 + 2, tid.y, 0)).rgb; + float3 val3 = inTex.Load (uint3 (tid.x * 4 + 3, tid.y, 0)).rgb; + + outTex[uint2(tid.x * 3, tid.y)] = float4 (val0.r, val0.g, val0.b, val1.r); + outTex[uint2(tid.x * 3 + 1, tid.y)] = float4 (val1.g, val1.b, val2.r, val2.g); + outTex[uint2(tid.x * 3 + 2, tid.y)] = float4 (val2.b, val3.r, val3.g, val3.b); +} +#endif + +#ifdef BUILDING_CSMain_RGBA_to_BGR +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val0 = inTex.Load (uint3 (tid.x * 4, tid.y, 0)).rgb; + float3 val1 = inTex.Load (uint3 (tid.x * 4 + 1, tid.y, 0)).rgb; + float3 val2 = inTex.Load (uint3 (tid.x * 4 + 2, tid.y, 0)).rgb; + float3 val3 = inTex.Load (uint3 (tid.x * 4 + 3, tid.y, 0)).rgb; + + outTex[uint2(tid.x * 3, tid.y)] = float4 (val0.b, val0.g, val0.r, val1.b); + outTex[uint2(tid.x * 3 + 1, tid.y)] = float4 (val1.g, val1.r, val2.b, val2.g); + outTex[uint2(tid.x * 3 + 2, tid.y)] = float4 (val2.r, val3.b, val3.g, val3.r); +} +#endif + +#ifdef BUILDING_CSMain_RGBA_to_RGB16 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val = inTex.Load (tid).rgb; + uint R = val.r * 31; + uint G = val.g * 63; + uint B = val.b * 31; + + outTex[tid.xy] = (R << 11) | (G << 5) | B; +} +#endif + +#ifdef BUILDING_CSMain_RGBA_to_BGR16 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float3 val = inTex.Load (tid).rgb; + uint R = val.r * 31; + uint G = val.g * 63; + uint B = val.b * 31; + + outTex[tid.xy] = (B << 11) | (G << 5) | R; +} +#endif + +#ifdef BUILDING_CSMain_RGBA_to_RGB15 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint3 val = inTex.Load (tid).rgb * 31; + + outTex[tid.xy] = (val.r << 10) | (val.g << 5) | val.b; +} +#endif + +#ifdef BUILDING_CSMain_RGBA_to_BGR15 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint3 val = inTex.Load (tid).rgb * 31; + + outTex[tid.xy] = (val.b << 10) | (val.g << 5) | val.r; +} +#endif + +#ifdef BUILDING_CSMain_RGBA_to_r210 +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + uint3 val = inTex.Load (tid).rgb * 1023; + uint packed = (val.r << 20) | (val.g << 10) | val.b; + uint packed_be = ((packed & 0xff) << 24) | ((packed & 0xff00) << 8) | + ((packed & 0xff0000) >> 8) | ((packed & 0xff000000) >> 24); + + outTex[tid.xy] = packed_be; +} +#endif + +#ifdef BUILDING_CSMain_RGBA_to_BGRA +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +void Execute (uint3 tid) +{ + float4 val = inTex.Load (tid); + + outTex[tid.xy] = val.bgra; +} +#endif + [numthreads(8, 8, 1)] void ENTRY_POINT (uint3 tid : SV_DispatchThreadID) { @@ -68,10 +593,10 @@ void ENTRY_POINT (uint3 tid : SV_DispatchThreadID) } #else static const char g_CSMain_converter_str[] = +"#ifdef BUILDING_CSMain_YUY2_to_AYUV\n" "Texture2D inTex : register(t0);\n" "RWTexture2D outTex : register(u0);\n" "\n" -"#ifdef BUILDING_CSMain_YUY2_to_AYUV\n" "void Execute (uint3 tid)\n" "{\n" " float4 val = inTex.Load (tid);\n" @@ -85,7 +610,160 @@ static const char g_CSMain_converter_str[] = "}\n" "#endif\n" "\n" +"#ifdef BUILDING_CSMain_UYVY_to_AYUV\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float4 val = inTex.Load (tid);\n" +" float Y0 = val.g;\n" +" float U = val.r;\n" +" float Y1 = val.a;\n" +" float V = val.b;\n" +"\n" +" outTex[uint2(tid.x * 2, tid.y)] = float4 (1.0, Y0, U, V);\n" +" outTex[uint2(tid.x * 2 + 1, tid.y)] = float4 (1.0, Y1, U, V);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_VYUY_to_AYUV\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float4 val = inTex.Load (tid);\n" +" float Y0 = val.g;\n" +" float U = val.b;\n" +" float Y1 = val.a;\n" +" float V = val.r;\n" +"\n" +" outTex[uint2(tid.x * 2, tid.y)] = float4 (1.0, Y0, U, V);\n" +" outTex[uint2(tid.x * 2 + 1, tid.y)] = float4 (1.0, Y1, U, V);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_YVYU_to_AYUV\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float4 val = inTex.Load (tid);\n" +" float Y0 = val.r;\n" +" float U = val.a;\n" +" float Y1 = val.b;\n" +" float V = val.g;\n" +"\n" +" outTex[uint2(tid.x * 2, tid.y)] = float4 (1.0, Y0, U, V);\n" +" outTex[uint2(tid.x * 2 + 1, tid.y)] = float4 (1.0, Y1, U, V);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_v210_to_AYUV\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint xpos = tid.x * 4;\n" +" float3 val = inTex.Load (uint3 (xpos, tid.y, 0)).xyz;\n" +" float U0 = val.r;\n" +" float Y0 = val.g;\n" +" float V0 = val.b;\n" +"\n" +" val = inTex.Load (uint3 (xpos + 1, tid.y, 0)).xyz;\n" +" float Y1 = val.r;\n" +" float U2 = val.g;\n" +" float Y2 = val.b;\n" +"\n" +" val = inTex.Load (uint3 (xpos + 2, tid.y, 0)).xyz;\n" +" float V2 = val.r;\n" +" float Y3 = val.g;\n" +" float U4 = val.b;\n" +"\n" +" val = inTex.Load (uint3 (xpos + 3, tid.y, 0)).xyz;\n" +" float Y4 = val.r;\n" +" float V4 = val.g;\n" +" float Y5 = val.b;\n" +"\n" +" xpos = tid.x * 6;\n" +" outTex[uint2(xpos, tid.y)] = float4 (1.0, Y0, U0, V0);\n" +" outTex[uint2(xpos + 1, tid.y)] = float4 (1.0, Y1, U0, V0);\n" +" outTex[uint2(xpos + 2, tid.y)] = float4 (1.0, Y2, U2, V2);\n" +" outTex[uint2(xpos + 3, tid.y)] = float4 (1.0, Y3, U2, V2);\n" +" outTex[uint2(xpos + 4, tid.y)] = float4 (1.0, Y4, U4, V4);\n" +" outTex[uint2(xpos + 5, tid.y)] = float4 (1.0, Y5, U4, V4);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_v308_to_AYUV\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float4 val = inTex.Load (uint3 (tid.x * 3, tid.y, 0));\n" +" float Y0 = val.x;\n" +" float U0 = val.y;\n" +" float V0 = val.z;\n" +" float Y1 = val.w;\n" +"\n" +" val = inTex.Load (uint3 (tid.x * 3 + 1, tid.y, 0));\n" +" float U1 = val.x;\n" +" float V1 = val.y;\n" +" float Y2 = val.z;\n" +" float U2 = val.w;\n" +"\n" +" val = inTex.Load (uint3 (tid.x * 3 + 2, tid.y, 0));\n" +" float V2 = val.x;\n" +" float Y3 = val.y;\n" +" float U3 = val.z;\n" +" float V3 = val.w;\n" +"\n" +" outTex[uint2(tid.x * 4, tid.y)] = float4 (1.0, Y0, U0, V0);\n" +" outTex[uint2(tid.x * 4 + 1, tid.y)] = float4 (1.0, Y1, U1, V1);\n" +" outTex[uint2(tid.x * 4 + 2, tid.y)] = float4 (1.0, Y2, U2, V2);\n" +" outTex[uint2(tid.x * 4 + 3, tid.y)] = float4 (1.0, Y3, U3, V3);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_IYU2_to_AYUV\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float4 val = inTex.Load (uint3 (tid.x * 3, tid.y, 0));\n" +" float U0 = val.x;\n" +" float Y0 = val.y;\n" +" float V0 = val.z;\n" +" float U1 = val.w;\n" +"\n" +" val = inTex.Load (uint3 (tid.x * 3 + 1, tid.y, 0));\n" +" float Y1 = val.x;\n" +" float V1 = val.y;\n" +" float U2 = val.z;\n" +" float Y2 = val.w;\n" +"\n" +" val = inTex.Load (uint3 (tid.x * 3 + 2, tid.y, 0));\n" +" float V2 = val.x;\n" +" float U3 = val.y;\n" +" float Y3 = val.z;\n" +" float V3 = val.w;\n" +"\n" +" outTex[uint2(tid.x * 4, tid.y)] = float4 (1.0, Y0, U0, V0);\n" +" outTex[uint2(tid.x * 4 + 1, tid.y)] = float4 (1.0, Y1, U1, V1);\n" +" outTex[uint2(tid.x * 4 + 2, tid.y)] = float4 (1.0, Y2, U2, V2);\n" +" outTex[uint2(tid.x * 4 + 3, tid.y)] = float4 (1.0, Y3, U3, V3);\n" +"}\n" +"#endif\n" +"\n" "#ifdef BUILDING_CSMain_AYUV_to_YUY2\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" "void Execute (uint3 tid)\n" "{\n" " float3 val = inTex.Load (uint3(tid.x * 2, tid.y, 0)).yzw;\n" @@ -98,7 +776,125 @@ static const char g_CSMain_converter_str[] = "}\n" "#endif\n" "\n" +"#ifdef BUILDING_CSMain_AYUV_to_UYVY\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val = inTex.Load (uint3(tid.x * 2, tid.y, 0)).yzw;\n" +" float Y0 = val.x;\n" +" float U = val.y;\n" +" float V = val.z;\n" +" float Y1 = inTex.Load (uint3(tid.x * 2 + 1, tid.y, 0)).y;\n" +"\n" +" outTex[tid.xy] = float4 (U, Y0, V, Y1);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_AYUV_to_VYUY\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val = inTex.Load (uint3(tid.x * 2, tid.y, 0)).yzw;\n" +" float Y0 = val.x;\n" +" float U = val.y;\n" +" float V = val.z;\n" +" float Y1 = inTex.Load (uint3(tid.x * 2 + 1, tid.y, 0)).y;\n" +"\n" +" outTex[tid.xy] = float4 (V, Y0, U, Y1);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_AYUV_to_YVYU\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val = inTex.Load (uint3(tid.x * 2, tid.y, 0)).yzw;\n" +" float Y0 = val.x;\n" +" float U = val.y;\n" +" float V = val.z;\n" +" float Y1 = inTex.Load (uint3(tid.x * 2 + 1, tid.y, 0)).y;\n" +"\n" +" outTex[tid.xy] = float4 (Y0, V, Y1, U);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_AYUV_to_v210\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint xpos = tid.x * 6;\n" +" float3 val = inTex.Load (uint3 (xpos, tid.y, 0)).yzw;\n" +" float Y0 = val.x;\n" +" float U0 = val.y;\n" +" float V0 = val.z;\n" +" float Y1 = inTex.Load (uint3 (xpos + 1, tid.y, 0)).y;\n" +"\n" +" val = inTex.Load (uint3 (xpos + 2, tid.y, 0)).yzw;\n" +" float Y2 = val.x;\n" +" float U2 = val.y;\n" +" float V2 = val.z;\n" +" float Y3 = inTex.Load (uint3 (xpos + 3, tid.y, 0)).y;\n" +"\n" +" val = inTex.Load (uint3 (xpos + 4, tid.y, 0)).yzw;\n" +" float Y4 = val.x;\n" +" float U4 = val.y;\n" +" float V4 = val.z;\n" +" float Y5 = inTex.Load (uint3 (xpos + 5, tid.y, 0)).y;\n" +"\n" +" xpos = tid.x * 4;\n" +" outTex[uint2(xpos, tid.y)] = float4 (U0, Y0, V0, 0);\n" +" outTex[uint2(xpos + 1, tid.y)] = float4 (Y1, U2, Y2, 0);\n" +" outTex[uint2(xpos + 2, tid.y)] = float4 (V2, Y3, U4, 0);\n" +" outTex[uint2(xpos + 3, tid.y)] = float4 (Y4, V4, Y5, 0);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_AYUV_to_v308\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val0 = inTex.Load (uint3 (tid.x * 4, tid.y, 0)).yzw;\n" +" float3 val1 = inTex.Load (uint3 (tid.x * 4 + 1, tid.y, 0)).yzw;\n" +" float3 val2 = inTex.Load (uint3 (tid.x * 4 + 2, tid.y, 0)).yzw;\n" +" float3 val3 = inTex.Load (uint3 (tid.x * 4 + 3, tid.y, 0)).yzw;\n" +"\n" +" outTex[uint2(tid.x * 3, tid.y)] = float4 (val0.x, val0.y, val0.z, val1.x);\n" +" outTex[uint2(tid.x * 3 + 1, tid.y)] = float4 (val1.y, val1.z, val2.x, val2.y);\n" +" outTex[uint2(tid.x * 3 + 2, tid.y)] = float4 (val2.z, val3.x, val3.y, val3.z);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_AYUV_to_IYU2\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val0 = inTex.Load (uint3 (tid.x * 4, tid.y, 0)).zyw;\n" +" float3 val1 = inTex.Load (uint3 (tid.x * 4 + 1, tid.y, 0)).zyw;\n" +" float3 val2 = inTex.Load (uint3 (tid.x * 4 + 2, tid.y, 0)).zyw;\n" +" float3 val3 = inTex.Load (uint3 (tid.x * 4 + 3, tid.y, 0)).zyw;\n" +"\n" +" outTex[uint2(tid.x * 3, tid.y)] = float4 (val0.x, val0.y, val0.z, val1.x);\n" +" outTex[uint2(tid.x * 3 + 1, tid.y)] = float4 (val1.y, val1.z, val2.x, val2.y);\n" +" outTex[uint2(tid.x * 3 + 2, tid.y)] = float4 (val2.z, val3.x, val3.y, val3.z);\n" +"}\n" +"#endif\n" +"\n" "#ifdef BUILDING_CSMain_AYUV_to_Y410\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" "void Execute (uint3 tid)\n" "{\n" " float4 val = inTex.Load (tid);\n" @@ -111,6 +907,248 @@ static const char g_CSMain_converter_str[] = "}\n" "#endif\n" "\n" +"#ifdef BUILDING_CSMain_RGB_to_RGBA\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float4 val = inTex.Load (uint3 (tid.x * 3, tid.y, 0));\n" +" float R0 = val.r;\n" +" float G0 = val.g;\n" +" float B0 = val.b;\n" +" float R1 = val.a;\n" +"\n" +" val = inTex.Load (uint3 (tid.x * 3 + 1, tid.y, 0));\n" +" float G1 = val.r;\n" +" float B1 = val.g;\n" +" float R2 = val.b;\n" +" float G2 = val.a;\n" +"\n" +" val = inTex.Load (uint3 (tid.x * 3 + 2, tid.y, 0));\n" +" float B2 = val.r;\n" +" float R3 = val.g;\n" +" float G3 = val.b;\n" +" float B3 = val.a;\n" +"\n" +" outTex[uint2(tid.x * 4, tid.y)] = float4 (R0, G0, B0, 1.0);\n" +" outTex[uint2(tid.x * 4 + 1, tid.y)] = float4 (R1, G1, B1, 1.0);\n" +" outTex[uint2(tid.x * 4 + 2, tid.y)] = float4 (R2, G2, B2, 1.0);\n" +" outTex[uint2(tid.x * 4 + 3, tid.y)] = float4 (R3, G3, B3, 1.0);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_BGR_to_RGBA\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float4 val = inTex.Load (uint3 (tid.x * 3, tid.y, 0));\n" +" float B0 = val.r;\n" +" float G0 = val.g;\n" +" float R0 = val.b;\n" +" float B1 = val.a;\n" +"\n" +" val = inTex.Load (uint3 (tid.x * 3 + 1, tid.y, 0));\n" +" float G1 = val.r;\n" +" float R1 = val.g;\n" +" float B2 = val.b;\n" +" float G2 = val.a;\n" +"\n" +" val = inTex.Load (uint3 (tid.x * 3 + 2, tid.y, 0));\n" +" float R2 = val.r;\n" +" float B3 = val.g;\n" +" float G3 = val.b;\n" +" float R3 = val.a;\n" +"\n" +" outTex[uint2(tid.x * 4, tid.y)] = float4 (R0, G0, B0, 1.0);\n" +" outTex[uint2(tid.x * 4 + 1, tid.y)] = float4 (R1, G1, B1, 1.0);\n" +" outTex[uint2(tid.x * 4 + 2, tid.y)] = float4 (R2, G2, B2, 1.0);\n" +" outTex[uint2(tid.x * 4 + 3, tid.y)] = float4 (R3, G3, B3, 1.0);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGB16_to_RGBA\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint val = inTex.Load (tid);\n" +" float R = float ((val & 0xf800) >> 11) / 31;\n" +" float G = float ((val & 0x7e0) >> 5) / 63;\n" +" float B = float ((val & 0x1f)) / 31;\n" +"\n" +" outTex[tid.xy] = float4 (R, G, B, 1.0);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_BGR16_to_RGBA\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint val = inTex.Load (tid);\n" +" float B = float ((val & 0xf800) >> 11) / 31;\n" +" float G = float ((val & 0x7e0) >> 5) / 63;\n" +" float R = float ((val & 0x1f)) / 31;\n" +"\n" +" outTex[tid.xy] = float4 (R, G, B, 1.0);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGB15_to_RGBA\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint val = inTex.Load (tid);\n" +" uint R = (val & 0x7c00) >> 10;\n" +" uint G = (val & 0x3e0) >> 5;\n" +" uint B = (val & 0x1f);\n" +"\n" +" outTex[tid.xy] = float4 (float3 (R, G, B) / 31, 1.0);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_BGR15_to_RGBA\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint val = inTex.Load (tid);\n" +" uint B = (val & 0x7c00) >> 10;\n" +" uint G = (val & 0x3e0) >> 5;\n" +" uint R = (val & 0x1f);\n" +"\n" +" outTex[tid.xy] = float4 (float3 (R, G, B) / 31, 1.0);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_r210_to_RGBA\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint val = inTex.Load (tid);\n" +" uint val_be = ((val & 0xff) << 24) | ((val & 0xff00) << 8) |\n" +" ((val & 0xff0000) >> 8) | ((val & 0xff000000) >> 24);\n" +" uint R = (val_be >> 20) & 0x3ff;\n" +" uint G = (val_be >> 10) & 0x3ff;\n" +" uint B = val_be & 0x3ff;\n" +"\n" +" outTex[tid.xy] = float4 (float3 (R, G, B) / 1023, 1.0);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGBA_to_RGB\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val0 = inTex.Load (uint3 (tid.x * 4, tid.y, 0)).rgb;\n" +" float3 val1 = inTex.Load (uint3 (tid.x * 4 + 1, tid.y, 0)).rgb;\n" +" float3 val2 = inTex.Load (uint3 (tid.x * 4 + 2, tid.y, 0)).rgb;\n" +" float3 val3 = inTex.Load (uint3 (tid.x * 4 + 3, tid.y, 0)).rgb;\n" +"\n" +" outTex[uint2(tid.x * 3, tid.y)] = float4 (val0.r, val0.g, val0.b, val1.r);\n" +" outTex[uint2(tid.x * 3 + 1, tid.y)] = float4 (val1.g, val1.b, val2.r, val2.g);\n" +" outTex[uint2(tid.x * 3 + 2, tid.y)] = float4 (val2.b, val3.r, val3.g, val3.b);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGBA_to_BGR\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val0 = inTex.Load (uint3 (tid.x * 4, tid.y, 0)).rgb;\n" +" float3 val1 = inTex.Load (uint3 (tid.x * 4 + 1, tid.y, 0)).rgb;\n" +" float3 val2 = inTex.Load (uint3 (tid.x * 4 + 2, tid.y, 0)).rgb;\n" +" float3 val3 = inTex.Load (uint3 (tid.x * 4 + 3, tid.y, 0)).rgb;\n" +"\n" +" outTex[uint2(tid.x * 3, tid.y)] = float4 (val0.b, val0.g, val0.r, val1.b);\n" +" outTex[uint2(tid.x * 3 + 1, tid.y)] = float4 (val1.g, val1.r, val2.b, val2.g);\n" +" outTex[uint2(tid.x * 3 + 2, tid.y)] = float4 (val2.r, val3.b, val3.g, val3.r);\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGBA_to_RGB16\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val = inTex.Load (tid).rgb;\n" +" uint R = val.r * 31;\n" +" uint G = val.g * 63;\n" +" uint B = val.b * 31;\n" +"\n" +" outTex[tid.xy] = (R << 11) | (G << 5) | B;\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGBA_to_BGR16\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float3 val = inTex.Load (tid).rgb;\n" +" uint R = val.r * 31;\n" +" uint G = val.g * 63;\n" +" uint B = val.b * 31;\n" +"\n" +" outTex[tid.xy] = (B << 11) | (G << 5) | R;\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGBA_to_RGB15\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint3 val = inTex.Load (tid).rgb * 31;\n" +"\n" +" outTex[tid.xy] = (val.r << 10) | (val.g << 5) | val.b;\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGBA_to_BGR15\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint3 val = inTex.Load (tid).rgb * 31;\n" +"\n" +" outTex[tid.xy] = (val.b << 10) | (val.g << 5) | val.r;\n" +"}\n" +"#endif\n" +"\n" +"#ifdef BUILDING_CSMain_RGBA_to_r210\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" uint3 val = inTex.Load (tid).rgb * 1023;\n" +" uint packed = (val.r << 20) | (val.g << 10) | val.b;\n" +" uint packed_be = ((packed & 0xff) << 24) | ((packed & 0xff00) << 8) |\n" +" ((packed & 0xff0000) >> 8) | ((packed & 0xff000000) >> 24);\n" +"\n" +" outTex[tid.xy] = packed_be;\n" +"}\n" +"#endif\n" +"\n" "[numthreads(8, 8, 1)]\n" "void ENTRY_POINT (uint3 tid : SV_DispatchThreadID)\n" "{\n" diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl index 9ae941e2a5..57af83b6d5 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/PSMain_converter.hlsl @@ -276,6 +276,78 @@ class SamplerRGBx : ISampler } }; +class SamplerxRGB : ISampler +{ + float4 Execute (float2 uv) + { + return float4 (shaderTexture[0].Sample(samplerState, uv).gba, 1.0); + } +}; + +class SamplerARGB : ISampler +{ + float4 Execute (float2 uv) + { + return shaderTexture[0].Sample(samplerState, uv).gbar; + } +}; + +class SamplerARGBPremul : ISampler +{ + float4 Execute (float2 uv) + { + return DoAlphaUnpremul (shaderTexture[0].Sample(samplerState, uv).gbar); + } +}; + +class SamplerxBGR : ISampler +{ + float4 Execute (float2 uv) + { + return float4 (shaderTexture[0].Sample(samplerState, uv).abg, 1.0); + } +}; + +class SamplerABGR : ISampler +{ + float4 Execute (float2 uv) + { + return shaderTexture[0].Sample(samplerState, uv).abgr; + } +}; + +class SamplerABGRPremul : ISampler +{ + float4 Execute (float2 uv) + { + return DoAlphaUnpremul (shaderTexture[0].Sample(samplerState, uv).abgr); + } +}; + +class SamplerBGR10A2 : ISampler +{ + float4 Execute (float2 uv) + { + return float4 (shaderTexture[0].Sample(samplerState, uv).zyx, 1.0); + } +}; + +class SamplerBGRA64 : ISampler +{ + float4 Execute (float2 uv) + { + return shaderTexture[0].Sample(samplerState, uv).bgra; + } +}; + +class SamplerBGRA64Premul : ISampler +{ + float4 Execute (float2 uv) + { + return DoAlphaUnpremul (shaderTexture[0].Sample(samplerState, uv).bgra); + } +}; + class SamplerGBR : ISampler { float4 Execute (float2 uv) @@ -904,6 +976,66 @@ class OutputRGBx : IOutputPacked } }; +class OutputxRGB : IOutputPacked +{ + PS_OUTPUT_PACKED Build (float4 sample) + { + PS_OUTPUT_PACKED output; + output.Plane0 = float4 (0.0, sample.rgb); + return output; + } +}; + +class OutputARGB : IOutputPacked +{ + PS_OUTPUT_PACKED Build (float4 sample) + { + PS_OUTPUT_PACKED output; + output.Plane0 = sample.argb; + return output; + } +}; + +class OutputARGBPremul : IOutputPacked +{ + PS_OUTPUT_PACKED Build (float4 sample) + { + PS_OUTPUT_PACKED output; + output.Plane0 = DoAlphaPremul (sample).argb; + return output; + } +}; + +class OutputxBGR : IOutputPacked +{ + PS_OUTPUT_PACKED Build (float4 sample) + { + PS_OUTPUT_PACKED output; + output.Plane0 = float4 (0.0, sample.bgr); + return output; + } +}; + +class OutputABGR : IOutputPacked +{ + PS_OUTPUT_PACKED Build (float4 sample) + { + PS_OUTPUT_PACKED output; + output.Plane0 = sample.abgr; + return output; + } +}; + +class OutputABGRPremul : IOutputPacked +{ + PS_OUTPUT_PACKED Build (float4 sample) + { + PS_OUTPUT_PACKED output; + output.Plane0 = DoAlphaPremul (sample.abgr); + return output; + } +}; + class OutputVUYA : IOutputPacked { PS_OUTPUT_PACKED Build (float4 sample) @@ -1215,6 +1347,78 @@ static const char g_PSMain_converter_str[] = " }\n" "};\n" "\n" +"class SamplerxRGB : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return float4 (shaderTexture[0].Sample(samplerState, uv).gba, 1.0);\n" +" }\n" +"};\n" +"\n" +"class SamplerARGB : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return shaderTexture[0].Sample(samplerState, uv).gbar;\n" +" }\n" +"};\n" +"\n" +"class SamplerARGBPremul : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return DoAlphaUnpremul (shaderTexture[0].Sample(samplerState, uv).gbar);\n" +" }\n" +"};\n" +"\n" +"class SamplerxBGR : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return float4 (shaderTexture[0].Sample(samplerState, uv).abg, 1.0);\n" +" }\n" +"};\n" +"\n" +"class SamplerABGR : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return shaderTexture[0].Sample(samplerState, uv).abgr;\n" +" }\n" +"};\n" +"\n" +"class SamplerABGRPremul : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return DoAlphaUnpremul (shaderTexture[0].Sample(samplerState, uv).abgr);\n" +" }\n" +"};\n" +"\n" +"class SamplerBGR10A2 : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return float4 (shaderTexture[0].Sample(samplerState, uv).zyx, 1.0);\n" +" }\n" +"};\n" +"\n" +"class SamplerBGRA64 : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return shaderTexture[0].Sample(samplerState, uv).bgra;\n" +" }\n" +"};\n" +"\n" +"class SamplerBGRA64Premul : ISampler\n" +"{\n" +" float4 Execute (float2 uv)\n" +" {\n" +" return DoAlphaUnpremul (shaderTexture[0].Sample(samplerState, uv).bgra);\n" +" }\n" +"};\n" +"\n" "class SamplerGBR : ISampler\n" "{\n" " float4 Execute (float2 uv)\n" @@ -1843,6 +2047,66 @@ static const char g_PSMain_converter_str[] = " }\n" "};\n" "\n" +"class OutputxRGB : IOutputPacked\n" +"{\n" +" PS_OUTPUT_PACKED Build (float4 sample)\n" +" {\n" +" PS_OUTPUT_PACKED output;\n" +" output.Plane0 = float4 (0.0, sample.rgb);\n" +" return output;\n" +" }\n" +"};\n" +"\n" +"class OutputARGB : IOutputPacked\n" +"{\n" +" PS_OUTPUT_PACKED Build (float4 sample)\n" +" {\n" +" PS_OUTPUT_PACKED output;\n" +" output.Plane0 = sample.argb;\n" +" return output;\n" +" }\n" +"};\n" +"\n" +"class OutputARGBPremul : IOutputPacked\n" +"{\n" +" PS_OUTPUT_PACKED Build (float4 sample)\n" +" {\n" +" PS_OUTPUT_PACKED output;\n" +" output.Plane0 = DoAlphaPremul (sample).argb;\n" +" return output;\n" +" }\n" +"};\n" +"\n" +"class OutputxBGR : IOutputPacked\n" +"{\n" +" PS_OUTPUT_PACKED Build (float4 sample)\n" +" {\n" +" PS_OUTPUT_PACKED output;\n" +" output.Plane0 = float4 (0.0, sample.bgr);\n" +" return output;\n" +" }\n" +"};\n" +"\n" +"class OutputABGR : IOutputPacked\n" +"{\n" +" PS_OUTPUT_PACKED Build (float4 sample)\n" +" {\n" +" PS_OUTPUT_PACKED output;\n" +" output.Plane0 = sample.abgr;\n" +" return output;\n" +" }\n" +"};\n" +"\n" +"class OutputABGRPremul : IOutputPacked\n" +"{\n" +" PS_OUTPUT_PACKED Build (float4 sample)\n" +" {\n" +" PS_OUTPUT_PACKED output;\n" +" output.Plane0 = DoAlphaPremul (sample.abgr);\n" +" return output;\n" +" }\n" +"};\n" +"\n" "class OutputVUYA : IOutputPacked\n" "{\n" " PS_OUTPUT_PACKED Build (float4 sample)\n" @@ -1887,6 +2151,18 @@ static const char g_PSMain_converter_str[] = " }\n" "};\n" "\n" +"#ifdef BUILDING_CSMain_RGBA_to_BGRA\n" +"Texture2D inTex : register(t0);\n" +"RWTexture2D outTex : register(u0);\n" +"\n" +"void Execute (uint3 tid)\n" +"{\n" +" float4 val = inTex.Load (tid);\n" +"\n" +" outTex[tid.xy] = val.bgra;\n" +"}\n" +"#endif\n" +"\n" "OUTPUT_TYPE ENTRY_POINT (PS_INPUT input)\n" "{\n" " SAMPLER g_sampler;\n" diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/meson.build b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/meson.build index 5ff48c7135..7d4483bdc1 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/meson.build +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d11/hlsl/meson.build @@ -28,6 +28,15 @@ hlsl_ps_input_formats = [ ['GBRAPremul_12', true], ['RGBP', true], ['BGRP', true], + ['xRGB', true], + ['ARGB', true], + ['ARGBPremul', true], + ['xBGR', true], + ['ABGR', true], + ['ABGRPremul', true], + ['BGR10A2', true], + ['BGRA64', true], + ['BGRA64Premul', true], ] hlsl_ps_output_formats = [ @@ -61,6 +70,12 @@ hlsl_ps_output_formats = [ ['PS_OUTPUT_PACKED', 'VUYAPremul', false], ['PS_OUTPUT_PACKED', 'AYUV', false], ['PS_OUTPUT_PACKED', 'AYUVPremul', false], + ['PS_OUTPUT_PACKED', 'xRGB', true], + ['PS_OUTPUT_PACKED', 'ARGB', true], + ['PS_OUTPUT_PACKED', 'ARGBPremul', true], + ['PS_OUTPUT_PACKED', 'xBGR', true], + ['PS_OUTPUT_PACKED', 'ABGR', true], + ['PS_OUTPUT_PACKED', 'ABGRPremul', true], ] header_collector = find_program('collect_hlsl_header.py') @@ -131,8 +146,35 @@ endforeach hlsl_cs_source = files('CSMain_converter.hlsl') hlsl_cs_entry_points = [ 'CSMain_YUY2_to_AYUV', + 'CSMain_UYVY_to_AYUV', + 'CSMain_VYUY_to_AYUV', + 'CSMain_YVYU_to_AYUV', + 'CSMain_v210_to_AYUV', + 'CSMain_v308_to_AYUV', + 'CSMain_IYU2_to_AYUV', 'CSMain_AYUV_to_YUY2', + 'CSMain_AYUV_to_UYVY', + 'CSMain_AYUV_to_VYUY', + 'CSMain_AYUV_to_YVYU', + 'CSMain_AYUV_to_v210', + 'CSMain_AYUV_to_v308', + 'CSMain_AYUV_to_IYU2', 'CSMain_AYUV_to_Y410', + 'CSMain_RGB_to_RGBA', + 'CSMain_BGR_to_RGBA', + 'CSMain_RGB16_to_RGBA', + 'CSMain_BGR16_to_RGBA', + 'CSMain_RGB15_to_RGBA', + 'CSMain_BGR15_to_RGBA', + 'CSMain_r210_to_RGBA', + 'CSMain_RGBA_to_RGB', + 'CSMain_RGBA_to_BGR', + 'CSMain_RGBA_to_RGB16', + 'CSMain_RGBA_to_BGR16', + 'CSMain_RGBA_to_RGB15', + 'CSMain_RGBA_to_BGR15', + 'CSMain_RGBA_to_r210', + 'CSMain_RGBA_to_BGRA', ] foreach shader : hlsl_cs_entry_points diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp index 1adabaeb36..882f2c42d3 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11convert.cpp @@ -1484,6 +1484,10 @@ gst_d3d11_base_convert_decide_allocation (GstBaseTransform * trans, if ((supported & D3D11_FORMAT_SUPPORT_RENDER_TARGET) != 0) { bind_flags |= D3D11_BIND_RENDER_TARGET; + if (d3d11_format.dxgi_format == DXGI_FORMAT_UNKNOWN && + (supported & D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW) != 0) { + bind_flags |= D3D11_BIND_UNORDERED_ACCESS; + } } else { if (d3d11_format.dxgi_format != DXGI_FORMAT_UNKNOWN && (supported & D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT) != 0) { diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp index 782017236c..42cc0574f3 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp @@ -1461,7 +1461,9 @@ gst_d3d11_test_src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query) if ((device_format.format_support[0] & D3D11_FORMAT_SUPPORT_RENDER_TARGET) != 0) { bind_flags |= D3D11_BIND_RENDER_TARGET; - } else if ((device_format.format_support[0] & + } + + if ((device_format.format_support[0] & D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW) != 0) { bind_flags |= D3D11_BIND_UNORDERED_ACCESS; }