Commit d9699932 authored by Alexey Chernov's avatar Alexey Chernov Committed by Sebastian Dröge

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
parent e58a00b2
......@@ -684,7 +684,8 @@ fallback:
}
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;
......@@ -2590,12 +2591,12 @@ d3d_hidden_window_thread (GstD3DVideoSinkClass * klass)
error:
if (!ret)
klass->d3d.error_exit = TRUE;
if (reged)
UnregisterClass (WndClass.lpszClassName, WndClass.hInstance);
if (hWnd) {
DestroyWindow (hWnd);
klass->d3d.hidden_window = 0;
}
if (reged)
UnregisterClass (WndClass.lpszClassName, WndClass.hInstance);
d3d_class_display_device_destroy (klass);
return ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment