From 7ec9c5181d69625b58781c1eca84d9a1a1cc20de Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Wed, 16 Feb 2022 21:27:10 -0800 Subject: [PATCH] media: support OpenGL-based video playback on macOS If we have GStreamer on macOS we likely have support for CGL to get an OpenGL context we can use. This provides the missing pieces to get accelerated video playback in gtk4-widget-factory working. --- modules/media/gtkgstsink.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/modules/media/gtkgstsink.c b/modules/media/gtkgstsink.c index c2708da148..529952fffc 100644 --- a/modules/media/gtkgstsink.c +++ b/modules/media/gtkgstsink.c @@ -48,6 +48,10 @@ #include #endif +#ifdef GDK_WINDOWING_MACOS +#include +#endif + #include enum { @@ -497,6 +501,29 @@ gtk_gst_sink_initialize_gl (GtkGstSink *self) } else #endif +#if defined(GST_GL_HAVE_PLATFORM_CGL) && defined(GDK_WINDOWING_MACOS) + if (GDK_IS_MACOS_DISPLAY (display)) + { + platform = GST_GL_PLATFORM_CGL; + + GST_DEBUG_OBJECT (self, "got CGL on macOS!"); + + gl_api = gst_gl_context_get_current_gl_api (platform, NULL, NULL); + gl_handle = gst_gl_context_get_current_gl_context (platform); + + if (gl_handle) + { + self->gst_display = gst_gl_display_new (); + self->gst_app_context = gst_gl_context_new_wrapped (self->gst_display, gl_handle, platform, gl_api); + } + else + { + GST_ERROR_OBJECT (self, "Failed to get handle from GdkGLContext, not using macOS CGL"); + return FALSE; + } + } + else +#endif #if GST_GL_HAVE_WINDOW_WIN32 && (GST_GL_HAVE_PLATFORM_WGL || GST_GL_HAVE_PLATFORM_EGL) && defined (GDK_WINDOWING_WIN32) if (GDK_IS_WIN32_DISPLAY (display)) {