media: Only force GL if we're using a GL renderer

When we are not using a GL renderer, getting GL textures
is no advantage to us, so don't make gstreamer send its
frames as GL memory in this case.
This commit is contained in:
Matthias Clasen 2021-01-01 12:12:35 -05:00
parent 53fe751371
commit 536a67ec96

View File

@ -20,10 +20,11 @@
#include "config.h" #include "config.h"
#include "gtkgstpaintableprivate.h" #include "gtkgstpaintableprivate.h"
#include "gtkgstsinkprivate.h" #include "gtkgstsinkprivate.h"
#include <gtk/gtk.h>
#include <gst/player/gstplayer-video-renderer.h> #include <gst/player/gstplayer-video-renderer.h>
#include <gsk/gl/gskglrenderer.h>
#include <math.h> #include <math.h>
@ -122,6 +123,9 @@ gtk_gst_paintable_video_renderer_create_video_sink (GstPlayerVideoRenderer *rend
"gl-context", self->context, "gl-context", self->context,
NULL); NULL);
if (self->context == NULL)
return sink;
glsinkbin = gst_element_factory_make ("glsinkbin", NULL); glsinkbin = gst_element_factory_make ("glsinkbin", NULL);
g_object_set (glsinkbin, "sink", sink, NULL); g_object_set (glsinkbin, "sink", sink, NULL);
@ -175,10 +179,20 @@ gtk_gst_paintable_realize (GtkGstPaintable *self,
GdkSurface *surface) GdkSurface *surface)
{ {
GError *error = NULL; GError *error = NULL;
GtkNative *native;
GskRenderer *renderer;
if (self->context) if (self->context)
return; return;
native = gtk_native_get_for_surface (surface);
renderer = gtk_native_get_renderer (native);
if (!GSK_IS_GL_RENDERER (renderer))
{
GST_INFO ("not using GL with a %s renderer\n", G_OBJECT_TYPE_NAME (renderer));
return;
}
self->context = gdk_surface_create_gl_context (surface, &error); self->context = gdk_surface_create_gl_context (surface, &error);
if (self->context == NULL) if (self->context == NULL)
{ {