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.
This commit is contained in:
Chun-wei Fan 2021-01-05 14:30:08 +08:00
parent fb31581bb4
commit 397a71ca8b

View File

@ -118,6 +118,18 @@ gtk_gst_paintable_video_renderer_create_video_sink (GstPlayerVideoRenderer *rend
GtkGstPaintable *self = GTK_GST_PAINTABLE (renderer); GtkGstPaintable *self = GTK_GST_PAINTABLE (renderer);
GstElement *sink, *glsinkbin; 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, sink = g_object_new (GTK_TYPE_GST_SINK,
"paintable", self, "paintable", self,
"gl-context", self->context, "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); g_object_set (glsinkbin, "sink", sink, NULL);
return glsinkbin; return glsinkbin;
#endif
} }
static void static void