mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47:17 +00:00
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>
This commit is contained in:
parent
0db1ff532d
commit
04451b108a
1 changed files with 11 additions and 1 deletions
|
@ -43,6 +43,7 @@ G_LOCK_DEFINE_STATIC (create_lock);
|
|||
#define WM_GST_D3D11_CONSTRUCT_INTERNAL_WINDOW (WM_USER + 2)
|
||||
#define WM_GST_D3D11_DESTROY_INTERNAL_WINDOW (WM_USER + 3)
|
||||
#define WM_GST_D3D11_MOVE_WINDOW (WM_USER + 4)
|
||||
#define WM_GST_D3D11_SHOW_WINDOW (WM_USER + 5)
|
||||
|
||||
static LRESULT CALLBACK window_proc (HWND hWnd, UINT uMsg, WPARAM wParam,
|
||||
LPARAM lParam);
|
||||
|
@ -822,6 +823,9 @@ gst_d3d11_window_win32_handle_window_proc (GstD3D11WindowWin32 * self,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case WM_GST_D3D11_SHOW_WINDOW:
|
||||
ShowWindow (self->internal_hwnd, SW_SHOW);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1140,9 +1144,15 @@ gst_d3d11_window_win32_show (GstD3D11Window * window)
|
|||
GetSystemMetrics (SM_CYCAPTION);
|
||||
MoveWindow (self->internal_hwnd, rect.left, rect.top, width,
|
||||
height, FALSE);
|
||||
ShowWindow (self->internal_hwnd, SW_SHOW);
|
||||
} else if (self->internal_hwnd) {
|
||||
/* ShowWindow will throw message to message pumping thread (app thread)
|
||||
* synchroniously, which can be blocked at the moment.
|
||||
* Post message to internal hwnd and do that from message pumping thread
|
||||
*/
|
||||
PostMessageA (self->internal_hwnd, WM_GST_D3D11_SHOW_WINDOW, 0, 0);
|
||||
}
|
||||
|
||||
ShowWindow (self->internal_hwnd, SW_SHOW);
|
||||
self->visible = TRUE;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue