L. E. Segovia
b1a5707fcb
windows: Fix mutexes leaking into the exports table
...
Translation unit-local variables must be marked static on Windows,
otherwise they're made available to the whole binary.
See:
https://learn.microsoft.com/en-us/cpp/cpp/program-and-linkage-cpp?view=msvc-170#external-vs-internal-linkage
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5185 >
2023-08-16 08:17:05 +00:00
Seungha Yang
6429f04692
meson: d3d11: Add d3d11-wgc option for Windows Graphics Capture feature
...
Make the feature requirement explicitly controllable via build option
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4939 >
2023-07-06 21:20:50 +00:00
Seungha Yang
8325623051
d3d11decoder: Reduce DPB size
...
Now all codec baseclasses can inform subclasses of correct max DPB size,
and exception handling (e.g., emergency bumping in h.264) has been
improved as well. Smaller number of additional DPB frame allocation
seems to be safe.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4878 >
2023-06-18 18:21:03 +00:00
Seungha Yang
c40f6dac57
d3d11overlaycompositor: Fix resource leak
...
Fixing regression since 94eadc9810
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4885 >
2023-06-19 00:13:00 +09:00
Seungha Yang
01edbf6c6b
d3d11overlaycompositor: Add support for d3d11 memory
...
If overlay buffer is d3d11 memory, use it directly
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4826 >
2023-06-15 12:53:02 +00:00
Seungha Yang
94eadc9810
d3d11videosink: Fixing unexpected overlay composition meta drops
...
A buffer can hold multiple GstVideoOverlayCompositionMeta objects.
Should scan all metas on a buffer and render all overlay rectangles
if any.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4862 >
2023-06-15 00:35:09 +00:00
Seungha Yang
ebd5ff73be
d3d11convert: Add support for premultiplied alpha conversion
...
Adding "src-alpha-mode" and "dest-alpha-mode" properties
to support alpha mode conversion
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4825 >
2023-06-10 18:12:58 +00:00
Seungha Yang
80878a6ea4
d3d11testsrc: Add "alpha" and "alpha-mode" properties
...
Adding global alpha and alpha mode options
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4825 >
2023-06-10 18:12:58 +00:00
Seungha Yang
cb28a16007
d3d11overlaycompositor: Handle premultiplied alpha in pixel shader
...
Do premultiplied -> straight alpha conversion using GPU
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4825 >
2023-06-10 18:12:58 +00:00
Seungha Yang
3c5684e085
d3d11: Use gst_util_get_timestamp()
...
instead of duplicating the same code
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4794 >
2023-06-08 01:02:45 +00:00
Seungha Yang
4d6a2dea89
d3d11ipcsrc: Stop asynchronously in case of io-mode=import
...
In case of import mode, d3d11ipcsrc does not know when outputted
memories will be released.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4774 >
2023-06-06 17:54:44 +00:00
Seungha Yang
ef1853aa8d
d3d11ipc: Use unnamed shareable handle
...
Exchanging HANDLE would have smaller overhead than string
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4774 >
2023-06-06 17:54:44 +00:00
Seungha Yang
aada49c6a6
d3d11ipcsink: Don't clear prepared sample on render
...
render() can be called multiple times for the same prepared sample
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4774 >
2023-06-06 17:54:44 +00:00
Seungha Yang
e4c43db5d5
d3d11basefilter: Forward video related metas if needed
...
The same as in GstVideoFilter
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4751 >
2023-06-02 00:33:52 +00:00
Seungha Yang
8e1677bd6a
d3d11videosink: Fix error on pause and play
...
The show_frame() can be called without prepare() call on paused to
playing state change. Thus the prepared buffer should not be cleared
on show_frame()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4700 >
2023-05-25 13:24:43 +00:00
Seungha Yang
f435d192e1
d3d11videosink: Don't use CS_OWNDC style
...
It's completely unnecessary since we never use
the device context (e.g., BeginPaint() or GetDC() never called).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4684 >
2023-05-20 03:16:47 +00:00
Seungha Yang
ad70dd64f9
d3d11videosink: Add render-rectangle property
...
... and resize HWND on GstVideoOverlay::set_render_rectangle even when
we are rendering without external HWND
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2563
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4653 >
2023-05-17 23:06:05 +00:00
Seungha Yang
d335eb8c7c
d3d11convert: Fix for runtime property update
...
Every setup happens in set_caps() method but basetransform will not
call the set_caps() if in/out caps were not changed
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4646 >
2023-05-16 16:03:35 +00:00
Seungha Yang
e34397ab09
d3d11: Update element meta
...
Make them consistent, update outdated description and fix some typos
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4619 >
2023-05-12 20:13:58 +00:00
Seungha Yang
ebcebe548d
d3d11videosink: Don't clear prepared buffer on unlock_stop()
...
That can be called between prepare() and render() which results in
unexpected error flow return
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4583 >
2023-05-10 16:20:41 +00:00
Seungha Yang
4449881b08
d3d11: Add support for IPC
...
Adding d3d11ipcsrc and d3d11ipcsink elements so that Direct3D11 textures
can be shared between processes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4514 >
2023-05-06 03:19:09 +09:00
Seungha Yang
4710f45e65
d3d11videosink: Fix for ignored initial render rectangle
...
Application can set target render rect before internal HWND
configuration
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2518
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4480 >
2023-04-26 19:39:09 +00:00
Seungha Yang
3811894d9c
d3d11overlay: Enhance documentation and fix typo
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4455 >
2023-04-20 18:05:27 +00:00
Thibault Saunier
03ac969240
d3d11: Fix typo in interlace mode name in enum
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4414 >
2023-04-18 14:56:41 +00:00
Seungha Yang
53dc1b96e2
d3d11compositor: Reconfigure resource only when output caps is changed
...
GstD3D11Converter setup is heavy operation since it requires
shader compile, GPU resource allocation, some math, mutex, etc.
We can avoid it if negotiated caps is not changed.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4439 >
2023-04-17 17:30:26 +00:00
Seungha Yang
c883ab593c
d3d11: Add d3d11overlay element
...
Similar to cairooverlay element but this element emits "draw"
signal with Direct3D11 render target view, so that an application
can render/overlay/blend on the given render target view
without any copy operation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4415 >
2023-04-17 23:22:57 +09:00
Seungha Yang
3d6a609590
d3d11compositor: Add "ignore-inactive-pads" property
...
Same as compositor element
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4438 >
2023-04-17 13:19:15 +00:00
Seungha Yang
7eefdd1b95
d3d11compositor: Skip zero alpha input
...
Blending such input is a waste of resource since nothing will
be rendered
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4438 >
2023-04-17 13:19:15 +00:00
Seungha Yang
af86c4b80e
d3d11videosink: Remove pointless GetDC call
...
We don't use the Win32 device context handle at all.
Removing code which was copied from GL code blindly
in early d3d11 implementation stage a long time ago
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4407 >
2023-04-12 19:54:31 +00:00
Wang Chuan
d7d0c969df
gstd3d11window: fix memory leak
...
GstStructure may leak when using external HWND
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4373 >
2023-04-10 12:12:27 +00:00
Seungha Yang
47fda2c51c
d3d11screencapturesrc: Add "window-capture-mode" property
...
... to support capturing only window's client area
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2425
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4324 >
2023-04-03 15:06:47 +00:00
Aleksandr Slobodeniuk
e683000573
d3d11videosink: fix race conditions in win32 window
...
One race condition is the fact that the window object
can be destroyed while running some routine in the UI
thread (such as resizing). To avoid that situation we make
UI thread hold a reference on the window object while it's
running.
Other probpematic case is when the window handle is reused:
if we stop and start the pipeline very fast,
so the sink creates a new window object that is going to use
the same window handle as the previous one.
And finally the case when the pipeline is stopped immediatelly
right after starting, this one is also handled in this commit.
NOTE: a unit test that reproduces this cases have been added
in the previous commit.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4260 >
2023-04-03 11:19:11 +00:00
Seungha Yang
7755cd2f7a
d3d11videosink: Enhancement for initial window size decision
...
Use AdjustWindowRect() method to calculate window size so that
video scene can be rendered on client area without black borders
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4323 >
2023-04-02 00:31:58 +09:00
Aleksandr Slobodeniuk
1f834eaacb
d3d11convert: add "method" property
...
It allows to select the sampling method, same
as "method" property of videoconvert.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4205 >
2023-03-21 12:08:54 +00:00
Aleksandr Slobodeniuk
4c9d4d30cb
d3d11convert: protect 'add-borders' with mutex
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4205 >
2023-03-21 12:08:54 +00:00
Seungha Yang
e47f08395f
d3d11videosink: Fix tearing in case of fullscreen mode
...
DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING and DXGI_PRESENT_ALLOW_TEARING should
be used only if required, when user wants Vsync off for example.
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2376
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4178 >
2023-03-15 22:56:02 +00:00
Seungha Yang
a1bd4afb8a
d3d11compositor: Fix composition error on release_pad()
...
Composition might be still in progress while it's being released
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4169 >
2023-03-15 04:50:49 +00:00
Seungha Yang
95ca40c4ab
d3d11screencapturesrc: Use keyed mutex instead of fence
...
D3D11 runtime might not support ID3D11Fence, and if so GstD3D11Fence
abstraction will use ID3D11Query instead. However, since the ID3D11Query
requires busy waiting, keyed mutex is better approach.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4094 >
2023-03-02 03:03:58 +09:00
Seungha Yang
ac869214ad
d3d11testsrc: Use keyed mutex for rendering patterns
...
D2D operations would not flush D3D commands. Use keyed mutex
to synchronize between them. Note that previous code was wrong
(Flush should be called inside of BeginDraw/EndDraw calls)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4081 >
2023-03-01 14:13:14 +00:00
Seungha Yang
025adaff4b
bad: Update indent
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4023 >
2023-02-28 10:12:31 +00:00
Seungha Yang
464c51a78a
d3d11testsrc: Add circular, blink and ball patterns
...
Note that circular and ball patterns will be rendered via
Direct2D (and Direct3D11 interop)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4070 >
2023-02-26 22:38:03 +09:00
Célestin Marot
81f121f244
d3d11overlaycompositor: fix texture width and height
...
The dimension of the overlay texture directly corresponds to the size of the overlay **buffer** which is given by its video meta.
The dimension at which the overlay should be displayed directly correspond to the overlay `render_width`and `render_height`.
This match the behavior of glimagesink
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4046 >
2023-02-22 15:18:12 +01:00
Seungha Yang
fd77f088a1
d3d11mpeg2dec: Promote rank to PRIMARY + 1
...
Make its rank higher than avdec_mpeg2video
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4014 >
2023-02-21 17:32:20 +00:00
Seungha Yang
26dd6c5c26
d3d11videosink: Fix rendering on external handle
...
Partial revert of the commit 068a5c1053
.
That introduced size mismatch between internal and external HWND
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4006 >
2023-02-20 22:35:27 +00:00
Seungha Yang
2e574a80d9
d3d11: Don't use g_alloca()
...
_alloca CRT function is deprecated. Moreover, stack allocation
for string is not a good idea. We can use _malloca inline
function instead, but all use of _alloca in d3d11 library/plugin
are not performance critical path at all.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3652 >
2023-01-24 20:27:43 +00:00
Seungha Yang
467a2408a1
d3d11compositor: Workaround blending artifacts on Intel platform
...
Disable vendor implemented converter in d3d11compositor to workaround
artifacts
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3770 >
2023-01-23 23:34:04 +09:00
Seungha Yang
7c92ed0bd0
d3d11videosink: Fixing focus lost on desktop layout change
...
Watch all message on the window thread, instead of internal window only.
Otherwise, some global window messages, such as desktop layout change,
wouldn't be handled by our window.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3593 >
2022-12-17 11:17:28 +00:00
Seungha Yang
068a5c1053
d3d11videosink: Move potentially time-consuming operations to ::prepare()
...
Move following tasks to ::prepare() from ::show_frame()
* CPU -> GPU upload
* GstD3D11Window object setup, including input caps change handling
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3574 >
2022-12-17 02:11:07 +09:00
Seungha Yang
04451b108a
d3d11videosink: Call ShowWindow() from window thread
...
... when rendering on external HWND. ShowWindow() will cause
synchronous message passing to window thread and then can be blocked.
At the same time, window thread can wait for GStreamer thread.
Instead of the synchronous call, queue the task to window message
and performs from the window thread.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3583 >
2022-12-16 22:18:14 +09:00
Seungha Yang
a27c5c81df
d3d11videosink: Fix deadlock when parent window is busy
...
Deadlock sequence:
* From a streaming thread, d3d11videosink sends synchronous message
to the parent window, so that internal (child) window can be
constructed on the parent window's thread
* App thread (parent window thread) is waiting for pipeline's
state change (to GST_STATE_NULL) but streaming thread is
blocked and waiting for app thread
To avoid the deadlock, GstD3D11WindowWin32 should send message
to the parent window asynchronously.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3570 >
2022-12-15 17:37:48 +00:00