Commit graph

57 commits

Author SHA1 Message Date
Aaron Boxer
7cb6dbefba d3dvideosink: improve concurrency on hidden window create/destroy 2019-12-18 13:15:06 -05:00
Aaron Boxer
eff0117b5a d3dvideosink: use thread pool to handle events from hidden window event queue
window event queue now does not lock on the class lock, so we can now shut
it down without releasing the class lock, thus avoiding a potential race when
stopping the sink.
2019-12-18 13:15:06 -05:00
Aaron Boxer
027eb5ef20 d3dvideosink: improve concurrency on internal window create/destroy
Remove timeout and rely on condition variable instead to indicate thread
start.
2019-12-18 13:15:06 -05:00
Aaron Boxer
adfbce336a d3dvideosink: only warn about HWND already set if new HWND is not NULL 2019-12-18 13:15:06 -05:00
Aaron Boxer
84403dbae3 d3dvideosink: add more null checks 2019-12-18 13:15:05 -05:00
Aaron Boxer
06862d7ff5 d3dvideosink: check ref count and device before resetting display 2019-12-18 13:15:05 -05:00
Aaron Boxer
85c1550b92 d3dvideosink: use class lock when checking d3d formats, and cache format list 2019-12-18 13:15:05 -05:00
Aaron Boxer
d7af30bab9 d3dvideosink: destroy device just before final d3d release call
and free overlays after swap chain is released
2019-12-18 13:15:05 -05:00
Aaron Boxer
5e3520a302 d3dvideosink: add two forward declarations 2019-12-18 13:15:05 -05:00
Aaron Boxer
49211bdf74 d3dvideosink: use class lock when setting pool config 2019-12-18 13:15:05 -05:00
Aaron Boxer
fb6c2e8533 d3dvideosink: use class lock when allocating pool buffer 2019-12-18 13:15:05 -05:00
Aaron Boxer
8710eb0656 d3dvideosink: pass hidden window hwnd to GST_DEBUG, rather than NULL 2019-12-18 13:15:05 -05:00
Aaron Boxer
54ce3d5011 d3dvideosink: fix typo 2019-12-18 13:15:05 -05:00
Seungha Yang
4eac9d0ae6 d3dvideosink: Fix warning for unhandled enum in switch
d3dhelpers.c:135:3: warning: enumeration value 'D3DFMT_D32_LOCKABLE' not handled in switch [-Wswitch]
2019-12-05 04:31:54 +00:00
Aaron Boxer
d3426cf15b d3dvideosink: use parent buffer pool to release buffers
In certain cases, the sink's buffer pool will not call the parent's
release_buffer method, so the pool does not clean up properly
after the buffer is released.
2019-12-04 23:00:35 +00:00
Aaron Boxer
86b01bb291 d3dvideosink: support OverlayComposition for GPU overlay compositing 2019-11-06 01:05:33 +00:00
Aaron Boxer
6d3429af34 documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
Seungha Yang
736df5604f d3dvideosink: Fix crash on WinProc handler
... caused by null pointer dereference. The d3dvideosink object might
not available yet on the handler.
2019-08-15 17:55:29 +09:00
Aaron Boxer
68ae46ae14 d3dhelpers.c: fix typo in debug output 2019-01-30 11:27:42 -05:00
Nirbheek Chauhan
09f814a00a d3dvideosink: Remove unused variable
Fixes a compiler warning.
2018-11-13 09:55:56 +05:30
Seungha Yang
f4dc780168 d3dvideosink: Fix calculating buffer size of packed format
The Pitch (i.e., stride) of D3DLOCKED_RECT structure is already
respecting required stride value.
2018-11-06 11:51:39 +00:00
Seungha Yang
6c6d351665 d3dvideosink: Set actual buffer size to buffer pool
If configured size of buffer pool and actual buffer size are mismatched,
pool will do unwanted buffer resize.

Fixes #801
2018-11-06 11:51:39 +00:00
Seungha Yang
dee5201392 d3dvideosink: Use lock/cond to wait internal window construction
We can save one (or possibly more) sleep time by using lock/cond
2018-11-06 11:51:39 +00:00
Seungha Yang
b3279c3fce d3dvideosink: Don't leak GThread object
Need to call g_thread_join() to avoid leak
2018-11-06 11:51:39 +00:00
Seungha Yang
2a3207bfc1 d3dvideosink: Remove white space 2018-11-06 11:51:39 +00:00
Sebastian Dröge
634cd87c76 gst: Clear floating flag in constructor of all GstObject subclasses that are not owned by any parent
https://bugzilla.gnome.org/show_bug.cgi?id=743062
2017-05-17 10:40:23 +03:00
Thibault Saunier
78022a6e0c docs: Port all docstring to gtk-doc markdown 2017-04-12 12:57:57 -03:00
Scott D Phillips
c7ee3b5d5f Remove 'return' from void functions
https://bugzilla.gnome.org/show_bug.cgi?id=774293
2016-11-12 10:53:02 +02:00
Sebastian Dröge
dea792292e d3dvideosink: Replace some more gst_caps_to_string() with GST_PTR_FORMAT
https://bugzilla.gnome.org/show_bug.cgi?id=768146
2016-06-28 19:27:09 +03:00
Sebastian Dröge
d8b1efe13a d3dvideosink: Don't try to recreate swapchain while the window is minimized
It will fail and cause the sink to crash. Instead wait until the window is
visible again before checking if the swapchain really has to be recreated.

https://bugzilla.gnome.org/show_bug.cgi?id=741608
2015-11-30 19:53:28 +02:00
Fabio Cetrini
79f57e62dc d3dvideosink: Avoid frame rendering while the window is completely hidden
https://bugzilla.gnome.org/show_bug.cgi?id=749856
2015-06-10 15:03:31 +02:00
Roman Nowicki
29098129be d3dvideosink: release existing D3D swap chain on init
https://bugzilla.gnome.org/show_bug.cgi?id=745159
2015-02-25 16:19:57 +02:00
Sebastian Dröge
e36c27cd46 d3dvideosink: Don't initialize the render window swap chain while the device is lost and we're waiting for reset
https://bugzilla.gnome.org/show_bug.cgi?id=744615
2015-02-24 11:19:48 +02:00
Sebastian Dröge
d1d31dae6d d3dvideosink: Deactivate the fallback pool and unref the fallback buffer when resetting
Otherwise we will still have a reference to the surface left, which would
prevent activating the sink again later. E.g. after we lost the device.

Hopefully fixes https://bugzilla.gnome.org/show_bug.cgi?id=744615
2015-02-18 12:45:22 +02:00
Sebastian Dröge
4ec87d9690 d3dvideosink: Open Direct3D devices in a threadsafe way
Otherwise we'll get crashes when using the device from multiple
threads, e.g. when using multiple sinks at once.

https://bugzilla.gnome.org/show_bug.cgi?id=707523
2014-07-15 13:30:16 +02:00
Sebastian Dröge
c134930dbe d3dvideosink: Always lock the D3D surfaces in write mode
Locking them in readonly mode can give different stride to mapping
in write mode, which then causes rendering to be broken.

Happened on all (many?) NVIDIA GPUs.

Thanks to voskater15@gmail.com for hinting at the problem.

https://bugzilla.gnome.org/show_bug.cgi?id=712809
2014-07-03 19:10:26 +02:00
Sebastian Dröge
73c40a3132 d3dhelpers: Swap UV planes properly for YV12 as compared to I420
If we only do it in one place colors will look funny.
2014-07-03 19:06:26 +02:00
Sebastian Dröge
25974ac0a9 d3dvideosink: Don't leak all surfaces
This was broken when disabling the buffer pool exporting.

Also disable buffer pool a bit more efficient...
2014-07-02 10:33:15 +02:00
Sebastian Dröge
28d250ec3f d3dvideosink: PostMessage() takes integers as last parameters, not pointers 2014-07-02 10:33:15 +02:00
Sebastian Dröge
677608bfb7 d3dvideosink: Remove unused variable 2014-07-02 10:33:15 +02:00
Eric Trousset
f54efc206f d3dvideosink: Release D3D surfaces when shutting down the sink
https://bugzilla.gnome.org/show_bug.cgi?id=726026
2014-06-23 20:44:23 +02:00
Tim-Philipp Müller
3f1eb8ee71 d3dvideosink: post proper error message when window disappears 2014-04-08 17:52:12 +01:00
Sebastian Dröge
c84278ae04 d3dvideosink: Only pass a dest rectangle if set, otherwise pass NULL
Call with an uninitialized rectangle will cause errors.

https://bugzilla.gnome.org/show_bug.cgi?id=714998
2014-04-02 23:10:01 +02:00
Alexey Chernov
d96999328a d3dvideosink: First destroy the window, then unregister the class
It's impossible to create another pipeline with d3dvideosink after disposing
the previous one due to some problem in d3dvideosink. The message is: "Unable
to register Direct3D hidden window class".

I've evaluated the problem and it's that UnregisterClass() in working thread is
called before DestroyWindow() and UnregisterClass() does nothing.

https://bugzilla.gnome.org/show_bug.cgi?id=722622
2014-01-21 09:45:07 +01:00
Andoni Morales Alastruey
ef7a8c2ca8 d3dvideosink: disable buffer pools
On a device lost, all the surfaces allocated in the
device need to be released before resetting the device,
which can't be done for the allocated buffers.

https://bugzilla.gnome.org/show_bug.cgi?id=706566
2013-09-02 18:21:11 +02:00
Andoni Morales Alastruey
7f18295321 d3dvideosink: use bilinear filter as much as possible
Use the bilinear scalling filter when the magnifier or the minifier
filters are avaible. Some graphics cards do not provide minifier filters
but we want to use it for upscalling if it's available

https://bugzilla.gnome.org/show_bug.cgi?id=697176
2013-04-04 11:39:45 +02:00
Sebastian Dröge
42965f5aa0 d3dvideosink: Make sure that all buffers in our pool contain our own memory 2013-03-27 09:09:59 +01:00
Sebastian Dröge
ff30417bd9 d3dvideosink: Add support for crop meta 2013-03-26 14:27:43 +01:00
Sebastian Dröge
81304a7956 d3dvideosink: Implement a buffer pool that shares D3D surfaces with upstream 2013-03-26 13:39:46 +01:00
Sebastian Dröge
abede65bbc d3dvideosink: Allocate a new offscreen surface for every buffer
This is a preparation for implementing a buffer pool.
2013-03-26 13:39:46 +01:00