static gboolean gst_gl_window_wayland_egl_open (GstGLWindow * window, GError ** error) { GstGLDisplayWayland *display; GstGLWindowWaylandEGL *window_egl = GST_GL_WINDOW_WAYLAND_EGL (window); if (!GST_IS_GL_DISPLAY_WAYLAND (window->display)) { g_set_error (error, GST_GL_WINDOW_ERROR, GST_GL_WINDOW_ERROR_RESOURCE_UNAVAILABLE, "Failed to retrieve Wayland display (wrong type?)"); return FALSE; } display = GST_GL_DISPLAY_WAYLAND (window->display); if (!display->display) { g_set_error (error, GST_GL_WINDOW_ERROR, GST_GL_WINDOW_ERROR_RESOURCE_UNAVAILABLE, "Failed to retrieve Wayland display"); return FALSE; } window_egl->window.queue = wl_display_create_queue (display->display); window_egl->wl_source = wayland_event_source_new (display->display, window_egl->window.queue); if (!GST_GL_WINDOW_CLASS (parent_class)->open (window, error)) return FALSE; g_source_attach (window_egl->wl_source, g_main_context_get_thread_default ()); return TRUE; }
static void gst_gl_window_wayland_egl_close (GstGLWindow * window) { GstGLWindowWaylandEGL *window_egl; window_egl = GST_GL_WINDOW_WAYLAND_EGL (window); destroy_surfaces (window_egl); g_source_destroy (window_egl->wl_source); g_source_unref (window_egl->wl_source); window_egl->wl_source = NULL; GST_GL_WINDOW_CLASS (parent_class)->close (window); }
gboolean gst_gl_window_win32_open (GstGLWindow * window, GError ** error) { GstGLWindowWin32 *window_win32 = GST_GL_WINDOW_WIN32 (window); if (!GST_GL_WINDOW_CLASS (parent_class)->open (window, error)) return FALSE; window_win32->msg_source = win32_message_source_new (window_win32); g_source_set_callback (window_win32->msg_source, (GSourceFunc) msg_cb, NULL, NULL); g_source_attach (window_win32->msg_source, g_main_context_get_thread_default ()); return TRUE; }
static void gst_gl_window_dispmanx_egl_close (GstGLWindow * window) { GstGLWindowDispmanxEGL *window_egl; DISPMANX_UPDATE_HANDLE_T dispman_update; window_egl = GST_GL_WINDOW_DISPMANX_EGL (window); if (window_egl->native.element && window_egl->native.element != window_egl->foreign.element) { dispman_update = vc_dispmanx_update_start (0); vc_dispmanx_element_remove (dispman_update, window_egl->native.element); vc_dispmanx_update_submit_sync (dispman_update); } vc_dispmanx_display_close (window_egl->display); GST_GL_WINDOW_CLASS (parent_class)->close (window); }
static gboolean gst_gl_window_dispmanx_egl_open (GstGLWindow * window, GError ** error) { GstGLWindowDispmanxEGL *window_egl = GST_GL_WINDOW_DISPMANX_EGL (window); gint ret = graphics_get_display_size (0, &window_egl->dp_width, &window_egl->dp_height); if (ret < 0) { g_set_error (error, GST_GL_WINDOW_ERROR, GST_GL_WINDOW_ERROR_RESOURCE_UNAVAILABLE, "Can't open display"); return FALSE; } GST_DEBUG ("Got display size: %dx%d\n", window_egl->dp_width, window_egl->dp_height); window_egl->native.element = 0; return GST_GL_WINDOW_CLASS (parent_class)->open (window, error); }
void gst_gl_window_win32_close (GstGLWindow * window) { GstGLWindowWin32 *window_win32 = GST_GL_WINDOW_WIN32 (window); release_parent_win_id (window_win32); if (window_win32->internal_win_id) { RemoveProp (window_win32->internal_win_id, "gl_window"); if (!DestroyWindow (window_win32->internal_win_id)) GST_WARNING ("failed to destroy window %" G_GUINTPTR_FORMAT ", 0x%x", (guintptr) window_win32->internal_win_id, (unsigned int) GetLastError ()); } g_source_destroy (window_win32->msg_source); g_source_unref (window_win32->msg_source); window_win32->msg_source = NULL; GST_GL_WINDOW_CLASS (parent_class)->close (window); }