mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-21 21:46:22 +00:00
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
This commit is contained in:
parent
e58a00b2a2
commit
d96999328a
1 changed files with 4 additions and 3 deletions
|
@ -684,7 +684,8 @@ fallback:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_d3dsurface_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
|
gst_d3dsurface_buffer_pool_release_buffer (GstBufferPool * bpool,
|
||||||
|
GstBuffer * buffer)
|
||||||
{
|
{
|
||||||
GstMemory *mem = NULL;
|
GstMemory *mem = NULL;
|
||||||
|
|
||||||
|
@ -2590,12 +2591,12 @@ d3d_hidden_window_thread (GstD3DVideoSinkClass * klass)
|
||||||
error:
|
error:
|
||||||
if (!ret)
|
if (!ret)
|
||||||
klass->d3d.error_exit = TRUE;
|
klass->d3d.error_exit = TRUE;
|
||||||
if (reged)
|
|
||||||
UnregisterClass (WndClass.lpszClassName, WndClass.hInstance);
|
|
||||||
if (hWnd) {
|
if (hWnd) {
|
||||||
DestroyWindow (hWnd);
|
DestroyWindow (hWnd);
|
||||||
klass->d3d.hidden_window = 0;
|
klass->d3d.hidden_window = 0;
|
||||||
}
|
}
|
||||||
|
if (reged)
|
||||||
|
UnregisterClass (WndClass.lpszClassName, WndClass.hInstance);
|
||||||
d3d_class_display_device_destroy (klass);
|
d3d_class_display_device_destroy (klass);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in a new issue