From f8c91368e93f852222cbdc35221ce2747ceb0895 Mon Sep 17 00:00:00 2001 From: gb Date: Mon, 15 Mar 2010 16:57:37 +0000 Subject: [PATCH] Factor out. --- gst-libs/gst/vaapi/gstvaapiwindow_x11.c | 67 ++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapiwindow_x11.c b/gst-libs/gst/vaapi/gstvaapiwindow_x11.c index c995a49..ad5cc3a 100644 --- a/gst-libs/gst/vaapi/gstvaapiwindow_x11.c +++ b/gst-libs/gst/vaapi/gstvaapiwindow_x11.c @@ -113,8 +113,10 @@ x11_create_window(Display *display, unsigned int width, unsigned int height) vis, xswa_mask, &xswa ); - if (window) - XSelectInput(display, window, x11_event_mask); + if (!window) + return None; + + XSelectInput(display, window, x11_event_mask); return window; } @@ -159,6 +161,30 @@ static void x11_wait_event(Display *dpy, Window w, int type) } static gboolean +gst_vaapi_window_x11_show(GstVaapiWindow *window) +{ + GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv; + Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display); + + x11_trap_errors(); + XMapWindow(dpy, priv->xid); + x11_wait_event(dpy, priv->xid, MapNotify); + return x11_untrap_errors() == 0; +} + +static gboolean +gst_vaapi_window_x11_hide(GstVaapiWindow *window) +{ + GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv; + Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display); + + x11_trap_errors(); + XUnmapWindow(dpy, priv->xid); + x11_wait_event(dpy, priv->xid, UnmapNotify); + return x11_untrap_errors() == 0; +} + +static gboolean gst_vaapi_window_x11_create(GstVaapiWindow *window, guint width, guint height) { GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv; @@ -170,9 +196,13 @@ gst_vaapi_window_x11_create(GstVaapiWindow *window, guint width, guint height) dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display); priv->xid = x11_create_window(dpy, width, height); - XMapRaised(dpy, priv->xid); - x11_wait_event(dpy, priv->xid, MapNotify); - return TRUE; + if (!gst_vaapi_window_x11_show(window)) + return FALSE; + + x11_trap_errors(); + XRaiseWindow(dpy, priv->xid); + XSync(dpy, False); + return x11_untrap_errors() == 0; } static void @@ -182,8 +212,7 @@ gst_vaapi_window_x11_destroy(GstVaapiWindow *window) Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display); if (priv->create_window && priv->xid) { - XUnmapWindow(dpy, priv->xid); - x11_wait_event(dpy, priv->xid, UnmapNotify); + gst_vaapi_window_x11_hide(window); XDestroyWindow(dpy, priv->xid); priv->xid = None; } @@ -193,30 +222,6 @@ gst_vaapi_window_x11_destroy(GstVaapiWindow *window) } static gboolean -gst_vaapi_window_x11_show(GstVaapiWindow *window) -{ - GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv; - Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display); - - x11_trap_errors(); - XMapWindow(dpy, priv->xid); - x11_wait_event(dpy, priv->xid, MapNotify); - return x11_untrap_errors() == 0; -} - -static gboolean -gst_vaapi_window_x11_hide(GstVaapiWindow *window) -{ - GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv; - Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display); - - x11_trap_errors(); - XUnmapWindow(dpy, priv->xid); - x11_wait_event(dpy, priv->xid, UnmapNotify); - return x11_untrap_errors() == 0; -} - -static gboolean gst_vaapi_window_x11_resize(GstVaapiWindow *window, guint width, guint height) { GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv; -- 2.7.4