[gtk/no-gl-context] gstreamer media backend: Disable OpenGL on Windows




commit 397a71ca8bfbe92352b40f113b427477430d2521
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Tue Jan 5 14:30:08 2021 +0800

    gstreamer media backend: Disable OpenGL on Windows
    
    ...for at least WGL, since we are not allowed to use wglMakeCurrent(),
    which is eventually called by gdk_gl_context_make_current() to share WGL
    contexts across different threads, which will cause a crash.
    
    This means, we cannot enable WGL in the gstreamer media backend on
    Windows.

 modules/media/gtkgstpaintable.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)
---
diff --git a/modules/media/gtkgstpaintable.c b/modules/media/gtkgstpaintable.c
index 470a5f59e4..5bd789c1f3 100644
--- a/modules/media/gtkgstpaintable.c
+++ b/modules/media/gtkgstpaintable.c
@@ -118,6 +118,18 @@ gtk_gst_paintable_video_renderer_create_video_sink (GstPlayerVideoRenderer *rend
   GtkGstPaintable *self = GTK_GST_PAINTABLE (renderer);
   GstElement *sink, *glsinkbin;
 
+#if GST_GL_HAVE_WINDOW_WIN32 && GST_GL_HAVE_PLATFORM_WGL && defined (GDK_WINDOWING_WIN32)
+  /*
+   * Unfortunately, we can't connect the GstGLContext with our GDKGLContext,
+   * since gdk_gl_context_make_current(), which calls wglMakeCurrent(), does not
+   * allow us to share WGL contexts across threads, which will cause a crash.
+   * See MR !3034, so no WGL in the gstreamer media backend :(
+   */
+  sink = g_object_new (GTK_TYPE_GST_SINK,
+                       "paintable", self,
+                       NULL);
+  return sink;
+#else
   sink = g_object_new (GTK_TYPE_GST_SINK,
                        "paintable", self,
                        "gl-context", self->context,
@@ -131,6 +143,7 @@ gtk_gst_paintable_video_renderer_create_video_sink (GstPlayerVideoRenderer *rend
   g_object_set (glsinkbin, "sink", sink, NULL);
 
   return glsinkbin;
+#endif
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]