void gst_vaapi_window_egl_class_init (GstVaapiWindowEGLClass * klass) { GstVaapiObjectClass *const object_class = GST_VAAPI_OBJECT_CLASS (klass); GstVaapiWindowClass *const window_class = GST_VAAPI_WINDOW_CLASS (klass); object_class->finalize = (GstVaapiObjectFinalizeFunc) gst_vaapi_window_egl_destroy; window_class->create = (GstVaapiWindowCreateFunc) gst_vaapi_window_egl_create; window_class->show = (GstVaapiWindowShowFunc) gst_vaapi_window_egl_show; window_class->hide = (GstVaapiWindowHideFunc) gst_vaapi_window_egl_hide; window_class->get_geometry = (GstVaapiWindowGetGeometryFunc) gst_vaapi_window_egl_get_geometry; window_class->set_fullscreen = (GstVaapiWindowSetFullscreenFunc) gst_vaapi_window_egl_set_fullscreen; window_class->resize = (GstVaapiWindowResizeFunc) gst_vaapi_window_egl_resize; window_class->render = (GstVaapiWindowRenderFunc) gst_vaapi_window_egl_render; window_class->render_pixmap = (GstVaapiWindowRenderPixmapFunc) gst_vaapi_window_egl_render_pixmap; }
static void gst_vaapi_window_drm_class_init (GstVaapiWindowDRMClass * klass) { GstVaapiWindowClass *const window_class = GST_VAAPI_WINDOW_CLASS (klass); window_class->create = gst_vaapi_window_drm_create; window_class->show = gst_vaapi_window_drm_show; window_class->hide = gst_vaapi_window_drm_hide; window_class->resize = gst_vaapi_window_drm_resize; window_class->render = gst_vaapi_window_drm_render; }
/** * gst_vaapi_window_wayland_new: * @display: a #GstVaapiDisplay * @width: the requested window width, in pixels * @height: the requested windo height, in pixels * * Creates a window with the specified @width and @height. The window * will be attached to the @display and remains invisible to the user * until gst_vaapi_window_show() is called. * * Return value: the newly allocated #GstVaapiWindow object */ GstVaapiWindow * gst_vaapi_window_wayland_new (GstVaapiDisplay * display, guint width, guint height) { GST_DEBUG ("new window, size %ux%u", width, height); g_return_val_if_fail (GST_VAAPI_IS_DISPLAY_WAYLAND (display), NULL); return gst_vaapi_window_new_internal (GST_VAAPI_WINDOW_CLASS (gst_vaapi_window_wayland_class ()), display, GST_VAAPI_ID_INVALID, width, height); }
static void gst_vaapi_window_glx_class_init (GstVaapiWindowGLXClass * klass) { GObjectClass *const object_class = G_OBJECT_CLASS (klass); GstVaapiWindowClass *const window_class = GST_VAAPI_WINDOW_CLASS (klass); object_class->finalize = gst_vaapi_window_glx_finalize; window_class->resize = gst_vaapi_window_glx_resize; window_class->get_visual_id = gst_vaapi_window_glx_get_visual_id; window_class->get_colormap = gst_vaapi_window_glx_get_colormap; }
static void gst_vaapi_window_wayland_class_init (GstVaapiWindowWaylandClass * klass) { GstVaapiObjectClass *const object_class = GST_VAAPI_OBJECT_CLASS (klass); GstVaapiWindowClass *const window_class = GST_VAAPI_WINDOW_CLASS (klass); object_class->finalize = (GstVaapiObjectFinalizeFunc) gst_vaapi_window_wayland_destroy; window_class->create = gst_vaapi_window_wayland_create; window_class->show = gst_vaapi_window_wayland_show; window_class->hide = gst_vaapi_window_wayland_hide; window_class->render = gst_vaapi_window_wayland_render; window_class->resize = gst_vaapi_window_wayland_resize; window_class->set_fullscreen = gst_vaapi_window_wayland_set_fullscreen; window_class->unblock = gst_vaapi_window_wayland_unblock; window_class->unblock_cancel = gst_vaapi_window_wayland_unblock_cancel; }
static void gst_vaapi_window_wayland_class_init(GstVaapiWindowWaylandClass * klass) { GObjectClass * const object_class = G_OBJECT_CLASS(klass); GstVaapiWindowClass * const window_class = GST_VAAPI_WINDOW_CLASS(klass); g_type_class_add_private(klass, sizeof(GstVaapiWindowWaylandPrivate)); object_class->finalize = gst_vaapi_window_wayland_finalize; object_class->constructed = gst_vaapi_window_wayland_constructed; window_class->create = gst_vaapi_window_wayland_create; window_class->destroy = gst_vaapi_window_wayland_destroy; window_class->show = gst_vaapi_window_wayland_show; window_class->hide = gst_vaapi_window_wayland_hide; window_class->render = gst_vaapi_window_wayland_render; window_class->resize = gst_vaapi_window_wayland_resize; }
static gboolean gst_vaapi_window_glx_resize (GstVaapiWindow * window, guint width, guint height) { GstVaapiWindowGLXPrivate *const priv = GST_VAAPI_WINDOW_GLX_GET_PRIVATE (window); const GstVaapiWindowClass *const parent_klass = GST_VAAPI_WINDOW_CLASS (gst_vaapi_window_glx_parent_class); Display *const dpy = GST_VAAPI_WINDOW_NATIVE_DISPLAY (window); GLContextState old_cs; if (!parent_klass->resize (window, width, height)) return FALSE; GST_VAAPI_WINDOW_LOCK_DISPLAY (window); XSync (dpy, False); /* make sure resize completed */ if (gl_set_current_context (priv->gl_context, &old_cs)) { gl_resize (width, height); gl_set_current_context (&old_cs, NULL); } GST_VAAPI_WINDOW_UNLOCK_DISPLAY (window); return TRUE; }