diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.c b/gst-libs/gst/gl/egl/gstglcontext_egl.c index 868e766c22..a9b41ad79f 100644 --- a/gst-libs/gst/gl/egl/gstglcontext_egl.c +++ b/gst-libs/gst/gl/egl/gstglcontext_egl.c @@ -51,6 +51,9 @@ #if GST_GL_HAVE_WINDOW_DISPMANX #include "../dispmanx/gstglwindow_dispmanx_egl.h" #endif +#if GST_GL_HAVE_WINDOW_GBM +#include "../gbm/gstglwindow_gbm_egl.h" +#endif #define GST_CAT_DEFAULT gst_gl_context_debug @@ -520,6 +523,12 @@ gst_gl_context_egl_create_context (GstGLContext * context, gst_gl_window_dispmanx_egl_create_window ((GstGLWindowDispmanxEGL *) context->window); } +#endif +#if GST_GL_HAVE_WINDOW_GBM + if (GST_IS_GL_WINDOW_GBM_EGL (context->window)) { + gst_gl_window_gbm_egl_create_window ((GstGLWindowGBMEGL *) + context->window); + } #endif } diff --git a/gst-libs/gst/gl/gbm/gstglwindow_gbm_egl.c b/gst-libs/gst/gl/gbm/gstglwindow_gbm_egl.c index 6cd4c33c99..04d1eec1f8 100644 --- a/gst-libs/gst/gl/gbm/gstglwindow_gbm_egl.c +++ b/gst-libs/gst/gl/gbm/gstglwindow_gbm_egl.c @@ -83,16 +83,6 @@ gst_gl_window_gbm_egl_init (GstGLWindowGBMEGL * window_gbm) static guintptr gst_gl_window_gbm_egl_get_window_handle (GstGLWindow * window) { - GstGLWindowGBMEGL *window_egl = GST_GL_WINDOW_GBM_EGL (window); - - /* This function is called in here, and not in the open() - * vmethod. The reason for this is explained inside the - * gst_gl_window_gbm_init_surface() function. */ - if (window_egl->gbm_surf == NULL) { - if (!gst_gl_window_gbm_init_surface (window_egl)) - return 0; - } - return (guintptr) GST_GL_WINDOW_GBM_EGL (window)->gbm_surf; } @@ -293,7 +283,11 @@ gst_gl_window_gbm_init_surface (GstGLWindowGBMEGL * window_egl) * contains some function pointers that are set to NULL and * shouldn't be. This is because Mesa's eglInitialize() loads * the DRI2 driver and the relevant functions aren't available - * until then. */ + * until then. + * + * Therefore, this function is called instead inside + * gst_gl_window_gbm_egl_create_window(), which in turn is + * called inside gst_gl_context_egl_create_context(). */ GstGLWindow *window = GST_GL_WINDOW (window_egl); GstGLDisplayGBM *display = (GstGLDisplayGBM *) window->display; @@ -355,3 +349,10 @@ gst_gl_window_gbm_egl_new (GstGLDisplay * display) return window_egl; } + + +gboolean +gst_gl_window_gbm_egl_create_window (GstGLWindowGBMEGL * window_egl) +{ + return gst_gl_window_gbm_init_surface (window_egl); +} diff --git a/gst-libs/gst/gl/gbm/gstglwindow_gbm_egl.h b/gst-libs/gst/gl/gbm/gstglwindow_gbm_egl.h index ba2a03fbb6..3d132a24b1 100644 --- a/gst-libs/gst/gl/gbm/gstglwindow_gbm_egl.h +++ b/gst-libs/gst/gl/gbm/gstglwindow_gbm_egl.h @@ -63,6 +63,7 @@ struct _GstGLWindowGBMEGLClass { GType gst_gl_window_gbm_egl_get_type (void); GstGLWindowGBMEGL * gst_gl_window_gbm_egl_new (GstGLDisplay * display); +gboolean gst_gl_window_gbm_egl_create_window (GstGLWindowGBMEGL * window_egl); G_END_DECLS