From: Christian Hergert Date: Thu, 17 Feb 2022 05:27:10 +0000 (-0800) Subject: media: support OpenGL-based video playback on macOS X-Git-Tag: archive/raspbian/4.6.5+ds-1+rpi1~1^2~19^2~3^2~92^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7ec9c5181d69625b58781c1eca84d9a1a1cc20de;p=gtk4.git 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. --- 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)) {