GstVaapiWindowX11Private))
struct _GstVaapiWindowX11Private {
- gboolean create_window;
GstVaapiDisplay *display;
Window xid;
+ unsigned int create_window : 1;
+ unsigned int is_visible : 1;
};
enum {
GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv;
Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
+ if (priv->is_visible)
+ return TRUE;
+
x11_trap_errors();
XMapWindow(dpy, priv->xid);
- x11_wait_event(dpy, priv->xid, MapNotify);
- return x11_untrap_errors() == 0;
+ if (priv->create_window)
+ x11_wait_event(dpy, priv->xid, MapNotify);
+ if (x11_untrap_errors() != 0)
+ return FALSE;
+
+ priv->is_visible = TRUE;
+ return TRUE;
}
static gboolean
GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv;
Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
+ if (!priv->is_visible)
+ return TRUE;
+
x11_trap_errors();
XUnmapWindow(dpy, priv->xid);
- x11_wait_event(dpy, priv->xid, UnmapNotify);
- return x11_untrap_errors() == 0;
+ if (priv->create_window)
+ x11_wait_event(dpy, priv->xid, UnmapNotify);
+ if (x11_untrap_errors() != 0)
+ return FALSE;
+
+ priv->is_visible = FALSE;
+ return TRUE;
}
static gboolean
dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
priv->xid = x11_create_window(dpy, width, height);
- if (!gst_vaapi_window_x11_show(window))
+ if (!priv->xid)
return FALSE;
- x11_trap_errors();
XRaiseWindow(dpy, priv->xid);
- XSync(dpy, False);
- return x11_untrap_errors() == 0;
+ return TRUE;
}
static void
Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
if (priv->xid) {
- if (priv->create_window) {
- gst_vaapi_window_x11_hide(window);
+ if (priv->create_window)
XDestroyWindow(dpy, priv->xid);
- }
priv->xid = None;
}
GstVaapiWindowX11Private *priv = GST_VAAPI_WINDOW_X11_GET_PRIVATE(window);
window->priv = priv;
- priv->create_window = TRUE;
priv->display = NULL;
priv->xid = None;
+ priv->create_window = TRUE;
+ priv->is_visible = FALSE;
}
GstVaapiWindow *
if (!window)
g_error("could not create window");
+ gst_vaapi_window_show(window);
+
if (!gst_vaapi_window_put_surface(window, surface, flags))
g_error("could not render surface");
if (!win)
g_error("could not create X window");
- XMapRaised(dpy, win);
- XSync(dpy, False);
-
window = gst_vaapi_window_x11_new_with_xid(display, win);
if (!window)
g_error("could not create window");
+ gst_vaapi_window_show(window);
+
if (!gst_vaapi_window_put_surface(window, surface, flags))
g_error("could not render surface");