[gtk/wip/chergert/macos-gst-cgl] media: support OpenGL-based video playback on macOS
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/macos-gst-cgl] media: support OpenGL-based video playback on macOS
- Date: Thu, 17 Feb 2022 05:29:40 +0000 (UTC)
commit 3d19d4c0edf8b741a145e11db40fe0fb9d88b983
Author: Christian Hergert <christian hergert me>
Date: Wed Feb 16 21:27:10 2022 -0800
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..cb0fe21251 100644
--- a/modules/media/gtkgstsink.c
+++ b/modules/media/gtkgstsink.c
@@ -48,6 +48,10 @@
#include <gst/gl/egl/gstgldisplay_egl.h>
#endif
+#ifdef GDK_WINDOWING_MACOS
+#include <gdk/macos/gdkmacos.h>
+#endif
+
#include <gst/gl/gstglfuncs.h>
enum {
@@ -497,6 +501,29 @@ gtk_gst_sink_initialize_gl (GtkGstSink *self)
}
else
#endif
+#ifdef GST_GL_HAVE_PLATFORM_CGL
+ 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))
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]