d3d12videosink

A Direct3D12 Video Sink

Hierarchy

GObject
    ╰──GInitiallyUnowned
        ╰──GstObject
            ╰──GstElement
                ╰──GstBaseSink
                    ╰──GstVideoSink
                        ╰──d3d12videosink

Implemented interfaces

Factory details

Authors: – Seungha Yang

Classification:Sink/Video

Rank – primary + 1

Plugin – d3d12

Package – GStreamer Bad Plug-ins

Pad Templates

sink

video/x-raw(memory:D3D12Memory):
         format: { RGBA64_LE, BGRA64_LE, Y416_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y216_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, RBGA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, ARGB64_LE, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, A444_16LE, A444_12LE, A444_10LE, A444, A422_16LE, A422_12LE, A422_10LE, A422, A420_16LE, A420_12LE, A420_10LE, A420, AV12, 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, NV24, NV16, NV61, NV21, I420, YV12, Y41B, YUV9, YVU9, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
      framerate: [ 0/1, 2147483647/1 ]

video/x-raw(memory:D3D12Memory, meta:GstVideoOverlayComposition):
         format: { RGBA64_LE, BGRA64_LE, Y416_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y216_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, RBGA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, ARGB64_LE, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, A444_16LE, A444_12LE, A444_10LE, A444, A422_16LE, A422_12LE, A422_10LE, A422, A420_16LE, A420_12LE, A420_10LE, A420, AV12, 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, NV24, NV16, NV61, NV21, I420, YV12, Y41B, YUV9, YVU9, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
      framerate: [ 0/1, 2147483647/1 ]
video/x-raw:
         format: { RGBA64_LE, BGRA64_LE, Y416_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y216_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, RBGA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, ARGB64_LE, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, A444_16LE, A444_12LE, A444_10LE, A444, A422_16LE, A422_12LE, A422_10LE, A422, A420_16LE, A420_12LE, A420_10LE, A420, AV12, 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, NV24, NV16, NV61, NV21, I420, YV12, Y41B, YUV9, YVU9, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
      framerate: [ 0/1, 2147483647/1 ]

video/x-raw(memory:SystemMemory, meta:GstVideoOverlayComposition):
         format: { RGBA64_LE, BGRA64_LE, Y416_LE, Y412_LE, RGB10A2_LE, Y410, BGR10A2_LE, Y216_LE, Y212_LE, Y210, VUYA, RGBA, BGRA, RBGA, P016_LE, P012_LE, P010_10LE, RGBx, BGRx, YUY2, NV12, ARGB64_LE, AYUV64, GBRA_12LE, GBRA_10LE, AYUV, ABGR, ARGB, GBRA, Y444_16LE, A444_16LE, A444_12LE, A444_10LE, A444, A422_16LE, A422_12LE, A422_10LE, A422, A420_16LE, A420_12LE, A420_10LE, A420, AV12, 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, NV24, NV16, NV61, NV21, I420, YV12, Y41B, YUV9, YVU9, GRAY16_LE, GRAY8, v216, v210, r210, v308, IYU2, RGB, BGR, UYVY, VYUY, YVYU, RGB16, BGR16, RGB15, BGR15 }
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
      framerate: [ 0/1, 2147483647/1 ]

Presencealways

Directionsink

Object typeGstPad


Signals

overlay

overlay_callback (GstElement * d3d12videosink,
                  gpointer command_queue,
                  gpointer resource12,
                  gpointer device11on12,
                  gpointer resource11,
                  gpointer context2d,
                  gpointer viewport,
                  gpointer udata)
def overlay_callback (d3d12videosink, command_queue, resource12, device11on12, resource11, context2d, viewport, udata):
    #python callback for the 'overlay' signal
function overlay_callback(d3d12videosink: GstElement * d3d12videosink, command_queue: gpointer command_queue, resource12: gpointer resource12, device11on12: gpointer device11on12, resource11: gpointer resource11, context2d: gpointer context2d, viewport: gpointer viewport, udata: gpointer udata): {
    // javascript callback for the 'overlay' signal
}

Signal emitted with Direct3D12, Direct3D11 and Direct2D resources associated with swapchain backbuffer.

This signal is emitted from the streaming thread if "overlay-mode" property includes GST_D3D12_WINDOW_OVERLAY_D3D12. The resource12 is a render target backbuffer of the swapchain. The Resource state of resource12 when this signal is emitted will be always D3D12_RESOURCE_STATE_RENDER_TARGET and signal handler should make sure the state is D3D12_RESOURCE_STATE_RENDER_TARGET when signal handler is returned, so that state change to final D3D12_RESOURCE_STATE_PRESENT can be processed by videosink.

In addition to the d2d12 resources, if "overlay-mode" includes GST_D3D12_WINDOW_OVERLAY_D3D11 flag and d3d11on12 API is supported by system, device11on12 and resource11 will be valid handles. Singla handler should not assume the device11on12 and resource11 are always valid handle since d3d11on12 API may not be supported. The resource11 is wrapped resource created via ID3D11On12Device::CreateWrappedResource. Thus, signal handler must follow required steps for d3d11on12 device, for example, ID3D11On12Device::AcquireWrappedResources must be called before recoding GPU commands. Once GPU commands are recoded via d3d11 or d2d APIs, the resource should be released via ID3D11On12Device::ReleaseWrappedResources, and then ID3D11DeviceContext::Flush must be called in the signal handler.

If "overlay-mode" is GST_D3D12_WINDOW_OVERLAY_D2D and d2d device is available, context2d will be valid handle. When this signal is emitted, context2d has configured render target already. The D2D render target is also a resource derived from resource11 and it's swapchain's backbuffer. The same step for d3d11 resource (i.e., acquire, release, and flush) is required for d2d as well.

Since the resource is swapchain's backbuffer, signal handler must not hold any derived resources such as ID3D11RenderTargetView, so that videosink can clear swapchain resources and resize anytime it's needed.

Parameters:

d3d12videosink

the d3d12videosink element that emitted the signal

command_queue

ID3D12CommandQueue

resource12

ID3D12Resource

device11on12

ID3D11On12Device

resource11

ID3D11Texture2D

context2d

ID2D1DeviceContext2

viewport

D3D12_RECT, d3d12videosink's current viewport

udata
No description available

Flags: Run Last

Since : 1.26


Properties

adapter

“adapter” gint

Adapter index for creating device (-1 for default)

Flags : Read / Write

Default value : -1


brightness

“brightness” gdouble

Flags : Read / Write

Default value : 0

Since : 1.26


contrast

“contrast” gdouble

Flags : Read / Write

Default value : 1

Since : 1.26


direct-swapchain

“direct-swapchain” gboolean

Attach DXGI swapchain to external window handle directly, instead of creating child window. Note that once direct swapchain is configured, GDI will no longer work with the given window handle.

If enabled, GstVideoOverlay::set_render_rectangle will be ignored, and application should handle window positioning.

Flags : Read / Write

Default value : false

Since : 1.26


display-format

“display-format” D3d12video-sink-display-format *

Swapchain display format

Flags : Read / Write

Default value : unknown (0)

Since : 1.26


enable-navigation-events

“enable-navigation-events” gboolean

When enabled, navigation events are sent upstream

Flags : Read / Write

Default value : true


error-on-closed

“error-on-closed” gboolean

Posts error message if window got closed in playing or paused state

Flags : Read / Write

Default value : true

Since : 1.26


external-window-only

“external-window-only” gboolean

If enabled and window handle is not set by user, videosink will report error instead of creating videosink's own window.

Flags : Read / Write

Default value : false

Since : 1.26


force-aspect-ratio

“force-aspect-ratio” gboolean

When enabled, scaling will respect original aspect ratio

Flags : Read / Write

Default value : true


fov

“fov” gfloat

Field of view angle in degrees

Flags : Read / Write

Default value : 90


fullscreen

“fullscreen” gboolean

Fullscreen mode

Flags : Read / Write

Default value : false


fullscreen-on-alt-enter

“fullscreen-on-alt-enter” gboolean

Enable fullscreen toggle on alt+enter key input

Flags : Read / Write

Default value : false


gamma-mode

“gamma-mode” GstVideoGammaMode *

Gamma conversion mode

Flags : Read / Write

Default value : none (0)


hue

“hue” gdouble

Flags : Read / Write

Default value : 0

Since : 1.26


max-mip-levels

“max-mip-levels” guint

Flags : Read / Write

Default value : 1

Since : 1.26


msaa

“msaa” GstD3D12MSAAMode *

MSAA (Multi-Sampling Anti-Aliasing) level

Flags : Read / Write

Default value : disabled (0)


ortho

“ortho” gboolean

Use orthographic projection

Flags : Read / Write

Default value : false


overlay-mode

“overlay-mode” D3d12window-overlay-mode *

Overly signal type

Flags : Read / Write

Default value : none

Since : 1.26


primaries-mode

“primaries-mode” GstVideoPrimariesMode *

Primaries conversion mode

Flags : Read / Write

Default value : none (0)


redraw-on-update

“redraw-on-update” gboolean

Immediately apply updated geometry related properties and redraw. If disabled, properties will be applied on the next frame or window resize

Flags : Read / Write

Default value : true


rotate-method

“rotate-method” GstVideoOrientationMethod *

Rotate method to use

Flags : Read / Write

Default value : identity (0)


rotation-x

“rotation-x” gfloat

x-axis rotation angle in degrees

Flags : Read / Write

Default value : 0


rotation-y

“rotation-y” gfloat

y-axis rotation angle in degrees

Flags : Read / Write

Default value : 0


rotation-z

“rotation-z” gfloat

z-axis rotation angle in degrees

Flags : Read / Write

Default value : 0


sampling-method

“sampling-method” GstD3D12SamplingMethod *

Sampler filter type to use

Flags : Read / Write

Default value : bilinear (1)


saturation

“saturation” gdouble

Flags : Read / Write

Default value : 1

Since : 1.26


scale-x

“scale-x” gfloat

Scale multiplier for x-axis

Flags : Read / Write

Default value : 1


scale-y

“scale-y” gfloat

Scale multiplier for y-axis

Flags : Read / Write

Default value : 1


Named constants

GstD3D12MSAAMode

Members

disabled (0) – Disabled
2x (1) – 2x MSAA
4x (2) – 4x MSAA
8x (3) – 8x MSAA

D3d12video-sink-display-format

Swapchain display format

Members

unknown (0) – DXGI_FORMAT_UNKNOWN
r10g10b10a2-unorm (24) – DXGI_FORMAT_R10G10B10A2_UNORM
r8g8b8a8-unorm (28) – DXGI_FORMAT_R8G8B8A8_UNORM
b8g8r8a8-unorm (87) – DXGI_FORMAT_B8G8R8A8_UNORM

Since : 1.26


D3d12window-overlay-mode

Members

none (0x00000000) – None
d3d12 (0x00000001) – Emits present signal with Direct3D12 resources
d3d11 (0x00000003) – Emits present signal with Direct3D12/11 resources
d2d (0x00000007) – Emit present signal with Direct3D12/11 and Direct2D resources

Since : 1.26


The results of the search are