Seungha Yang
c00c36e33b
d3d12overlaycompositor: Remove unused parameter
...
Don't need to check fence value of overlay buffer since
window uses global direct command queue
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7013 >
2024-06-17 16:05:00 +00:00
Seungha Yang
f91be03550
d3d12videosink: Calculate display resolution only per caps change
...
Don't need to calculate it per window property update
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7013 >
2024-06-17 16:05:00 +00:00
Seungha Yang
a2df44da7d
d3d12: Workaround for Intel iGPU decoder crash
...
Observed Intel GPU driver crash when multiple decoders are
configured in a process. It might be because of frequent
command queue alloc/free or too many in-flight decoding commands.
In order to make command queue persistent and limit the number of
in-flight command lists, holds global decoding command queue.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7019 >
2024-06-17 15:15:07 +00:00
Seungha Yang
20852ba028
d3d12videosink: Disconnect window signal handler on dispose as intended
...
Fixing typo
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7012 >
2024-06-10 23:33:26 +09:00
Seungha Yang
20db3369d3
d3d12videosink: Add error-on-closed property
...
Adding a property to control error reporting behavior when output
window is closed in playing or paused state. This can be useful
for apps where an app wants to close window even if it's playing
a stream, and the closed window is expected.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6939 >
2024-06-09 16:48:41 +00:00
Seungha Yang
96cf3d7063
d3d12encoder: Do not print error log for not-supported feature
...
gst_d3d12_result() will print message with ERROR level if failed.
Use FAILED/SUCCEEDED macros instead, since not-supported feature
is not a critical error
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6955 >
2024-05-29 10:45:13 +00:00
Seungha Yang
84aecab150
d3d12videosink: Add overlay signal to support d3d12/d3d11/d2d overlay
...
Conceptually identical to the present signal of d3d11videosink.
This signal will be emitted with current render target
(i.e., swapchain backbuffer) and command queue. Signal handler
can record GPU commands for an overlay image or to blend
an image to the render target.
In addition to d3d12 resources, videosink will send
d3d11 and d2d resources depending on "overlay-mode"
property, so that signal handler can render by using
preferred/required DirectX API.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6838 >
2024-05-24 15:55:17 +00:00
Seungha Yang
4d779d7de8
d3d12videosink: Use device's main direct queue
...
The idea of using separate command queue per videosink was that
swapchain is bound to a command queue and we need to flush the
command queue when window size is changed. But the separate
queue does not seem to improve performance a lot.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6838 >
2024-05-24 15:55:17 +00:00
Seungha Yang
9d23c26027
d3d12decoder: Fix SDK debug layer warning
...
Address below message reported by SDK debug layer.
ID3D12Device::CheckFeatureSupport: Unsupported Decode Profile Specified.
Use ID3D12VideoDevice::CheckFeatureSupport with D3D12_FEATURE_VIDEO_DECODE_PROFILES
to retrieve a list of supported profiles
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6839 >
2024-05-13 19:42:52 +00:00
Sebastian Dröge
0ef396359c
gst: Move GstQueueArray as GstVecDeque to core
...
And change lengths and indices from guint to gsize for a more correct type.
Also deprecate GstQueueArray and implement it in terms of GstVecDeque.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6779 >
2024-05-06 18:25:42 +00:00
Seungha Yang
cb20a371c2
d3d12decoder: Fix d3d12 resource copy
...
It was copying to self resource
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6753 >
2024-04-28 15:31:19 +00:00
Seungha Yang
46131f0cb0
d3d12ipcclient: Fix deadlock when copying texture
...
Fixing deadlock in below case
* GC lock is taken by background thread, and the background thread calls
gst_d3d12_ipc_client_release_imported_data() which takes ipc lock
* ipc lock is already taken in ipc thread and trying to pushing GC data
via gst_d3d12_command_queue_set_notify()
* gst_d3d12_command_queue_set_notify() is trying to take GC lock
but it's already taken by background thread
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749 >
2024-04-28 12:49:07 +00:00
Seungha Yang
19932cf178
d3d12ipcsink: Handle external fence
...
Waits external fence before sending frame to peer.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749 >
2024-04-28 12:49:07 +00:00
Seungha Yang
b7844ef307
d3d12decoder: Remove CPU-side waiting
...
Sets decoder command queue's fence to memory instead of waiting
from decoder's output thread. CPU-side waiting will happen
only if download is required.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749 >
2024-04-28 12:49:07 +00:00
Seungha Yang
a05961ab7b
d3d12screencapturesrc: Fix output to non-d3d12 element
...
Configures upload/download flags to memory after write
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749 >
2024-04-28 12:49:07 +00:00
Seungha Yang
e29655e9ca
d3d12screencapturesrc: Release and flush d3d11 objects before d3d12
...
Fixing device-removed error when closing pipeline
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749 >
2024-04-28 12:49:07 +00:00
Seungha Yang
2c203e0d40
d3d12encoder: Handle external fence explicitly
...
Waits for external fence if any
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749 >
2024-04-28 12:49:07 +00:00
Seungha Yang
2a14793ee1
d3d12converter: Add support for GPU-side external fence waiting
...
Ideally, GPU waiting should be scheduled just before executing command list.
But handling the case outside of converter is a bit complicated.
Under an assumption that constructed command list will be executed
immediately, schedules GPU-side waiting inside of conversion method
to simplify the flow.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749 >
2024-04-28 12:49:07 +00:00
Seungha Yang
478e49dd73
d3d12: Update copy_texture_region() method
...
Pass external fence value if any and allow passing fence
data so that dependent resources can be released
once copy is done
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749 >
2024-04-28 12:49:07 +00:00
Seungha Yang
4ac46ce82b
d3d12screencapturesrc: Performance improvement
...
Process captured frame using d3d11 instead of d3d12, and use shared
fence when copying processed d3d11 texture to d3d12 resource.
In this way, capture CPU thread does not need to wait for fence signal.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6733 >
2024-04-25 22:51:01 +00:00
Seungha Yang
cecb0f2148
d3d12decoder: Lock DPB while building command
...
Since DPB resource can be modified in output thread, protect
it when building command list.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6709 >
2024-04-23 10:08:19 +00:00
Seungha Yang
27c02a0b80
d3d12decoder: Hold reference pictures in fence data
...
Keep reference pictures alive during executing decoding commands
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6709 >
2024-04-23 10:08:19 +00:00
Seungha Yang
0f5f170a40
d3d12vp9dec: Disallow resolution change to larger size on non-keyframe
...
Intel GPU seems to be crashing if the case happens.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6709 >
2024-04-23 10:08:18 +00:00
Seungha Yang
700c00eda3
d3d12decoder: Fix potential use after free
...
A DPB buffer held by codec picture object may not be writable
at the moment, then gst_buffer_make_writable() will unref passed buffer.
Specifically, the use after free or double free can happen if:
* Crop meta of buffer copy is required because of non-zero
top-left crop position
* zero-copy is possible with crop meta
* A picture was duplicated, interlaced h264 stream for example
Interlaced h264 stream with non-zero top-left crop position
is not very common but it's possible configuration in theory.
Thus gst_buffer_make_writable() should be called with
GstVideoCodecFrame.output_buffer directly.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6706 >
2024-04-22 13:28:06 +00:00
Seungha Yang
5179cbccfa
d3d12testsrc: Use shared 11on12 device
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6697 >
2024-04-20 04:16:48 +09:00
Seungha Yang
cd97275a19
d3d12device: Hold d3d11on12 device to be shared
...
d3d11on12 device seems to be occupying a bit of GPU memory
Hold the instance in GstD3D12Device so that it can be shared
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6697 >
2024-04-20 04:16:41 +09:00
Seungha Yang
8e4fe98361
d3d12videosink: Handle mouse double click and modifier
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6693 >
2024-04-19 16:11:30 +00:00
Seungha Yang
dabce9635d
d3d12videosink: Disconnect window's signal on dispose
...
Same as the commit of 7b69d1758f
but for d3d12videosink.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6692 >
2024-04-19 21:25:06 +09:00
Seungha Yang
6659bd6362
d3d12videosink: Handle external HWND's mouse/keyboard events
...
OS will not propagate the event to child HWND if it's handled by
the parent. Thus, navigation event should be handled by parent HWND's
event handler.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6692 >
2024-04-19 21:24:52 +09:00
Seungha Yang
f6ec4e6256
d3d12overlaycompositor: Add support for d3d12 memory
...
Don't allocate d3d12 texture if overlay is d3d12 memory already
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6620 >
2024-04-14 09:55:41 +00:00
Seungha Yang
13d892d336
d3d12: Move gst_d3d12_buffer_copy_into method to library
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6620 >
2024-04-14 09:55:41 +00:00
Seungha Yang
e597dcdf0d
d3d12encoder: Fix buffer pool leak
...
Add missing buffer pool release
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6628 >
2024-04-13 14:55:09 +00:00
Seungha Yang
ad6670ba81
d3d12decoder: Always output sharable texture
...
Because shared heap's additional costs is not significant,
use D3D12_HEAP_FLAG_SHARED for resource can be shared over process
boundary. And enables render target for d3d11 interop in the process.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6513 >
2024-04-03 02:05:25 +00:00
Seungha Yang
d00c26cdc8
d3d12screencapturesrc: Use gst_d3d12_memory_get_d3d11_texture()
...
... and use fence to wait for GPU sync
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6499 >
2024-04-02 03:43:59 +09:00
Seungha Yang
7d0e90b7bc
d3d12: Move core part to gst-libs
...
Move buffer pool, converter, and device abstraction layer to
public library
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494 >
2024-04-01 10:37:50 +00:00
Seungha Yang
7829315305
d3d12memory: Define new D3D12 map flags
...
Define GST_MAP_READ_D3D12 and GST_MAP_READ_D3D12 flags
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494 >
2024-04-01 10:37:50 +00:00
Seungha Yang
abeccdd6bc
d3d12: Make resource getter methods consistent
...
Returns COM pointer directly everywhere
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494 >
2024-04-01 10:37:49 +00:00
Seungha Yang
706d5402fa
d3d12: Remove device11on12 wrapping layer
...
It was added to avoid symbol conflict between DirectX-header project
and Windows SDK, but symbol conflict does not happen
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494 >
2024-04-01 10:37:49 +00:00
Seungha Yang
927e249557
d3d12bufferpool: Use d3dx12.h format table
...
The format table in SDK header defines all required information
already.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494 >
2024-04-01 10:37:49 +00:00
Seungha Yang
0527f27204
d3d12: Add a helper method for device equality check
...
GstD3D12Device object itself is not singltons anymore but
underlying private struct is singltons.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494 >
2024-04-01 10:37:49 +00:00
Seungha Yang
bbdfa00b7b
d3d12: Add support for cross-compile
...
... and fix bunch of GCC reported warnings
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6435 >
2024-03-25 11:41:25 +00:00
Seungha Yang
6c80d2f5f8
d3d12: Allow building without WGC support
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6435 >
2024-03-25 11:41:25 +00:00
Seungha Yang
2649d2ae62
d3d12: Port to d3dshader library
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6434 >
2024-03-25 00:02:12 +09:00
Seungha Yang
43da9b4249
d3d12: Update shader to be Shader Model 5.0 compatible
...
And use fxc HLSL compiler
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6434 >
2024-03-24 17:15:22 +09:00
Seungha Yang
0c148a96db
d3d12: Add IPC elements
...
Adding d3d12ipcsink and d3d12ipcsrc elements, equivalent to D3D11 ones.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428 >
2024-03-22 23:09:12 +09:00
Seungha Yang
0006ad1f86
d3d12: Add buffer copy helper method
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428 >
2024-03-22 23:09:05 +09:00
Seungha Yang
c612af6d42
d3d12commandqueue: Always invoke notify asynchronously
...
Otherwise the callback thread is unpredictable
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428 >
2024-03-22 20:45:01 +09:00
Seungha Yang
18091f0115
d3d12memory: Update for API interop
...
Add support for destroy notify in case of wrapped memory, and
allow setting external fence for interop
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428 >
2024-03-22 20:01:16 +09:00
Seungha Yang
0d559bead9
d3d12: Make primary fence sharable
...
Create primary fence with D3D12_FENCE_FLAG_SHARED flag so that
the fence can be shared with other APIs or processes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428 >
2024-03-22 18:57:26 +09:00
Seungha Yang
b417c62940
d3d12device: Set debugging friendly object name
...
Build object name with DXGI adapter index
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395 >
2024-03-19 12:03:55 +00:00