summaryrefslogtreecommitdiff
path: root/modules/media/gtkgstpaintable.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/media/gtkgstpaintable.c')
-rw-r--r--modules/media/gtkgstpaintable.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/modules/media/gtkgstpaintable.c b/modules/media/gtkgstpaintable.c
index ba5aefca4b..06abcd7583 100644
--- a/modules/media/gtkgstpaintable.c
+++ b/modules/media/gtkgstpaintable.c
@@ -117,20 +117,39 @@ gtk_gst_paintable_video_renderer_create_video_sink (GstPlayerVideoRenderer *rend
{
GtkGstPaintable *self = GTK_GST_PAINTABLE (renderer);
GstElement *sink, *glsinkbin;
+ GdkGLContext *ctx;
sink = g_object_new (GTK_TYPE_GST_SINK,
"paintable", self,
"gl-context", self->context,
NULL);
- if (self->context == NULL)
- return sink;
+ if (self->context != NULL)
+ g_object_get (GTK_GST_SINK (sink), "gl-context", &ctx, NULL);
+
+ if (self->context != NULL && ctx != NULL)
+ {
+ glsinkbin = gst_element_factory_make ("glsinkbin", NULL);
+
+ g_object_set (glsinkbin, "sink", sink, NULL);
+ g_object_unref (ctx);
- glsinkbin = gst_element_factory_make ("glsinkbin", NULL);
+ return glsinkbin;
+ }
+ else
+ {
+ if (self->context != NULL)
+ {
+ g_warning ("GstGL context creation failed, falling back to non-GL playback");
- g_object_set (glsinkbin, "sink", sink, NULL);
+ g_object_unref (sink);
+ sink = g_object_new (GTK_TYPE_GST_SINK,
+ "paintable", self,
+ NULL);
+ }
- return glsinkbin;
+ return sink;
+ }
}
static void