summaryrefslogtreecommitdiffstats
path: root/sys/glsink
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@mad.scientist.com>2007-06-06 15:58:31 +0000
committerJan Schmidt <thaytan@mad.scientist.com>2007-06-06 15:58:31 +0000
commit1b26c3f023172f2ccc5dd770f47025a6bb6b9429 (patch)
treeb5f6c6ea789407acdc58dc64617bceda337fe5db /sys/glsink
parentceba19f69179da93e71fc1e582f1d7eb2bd4db16 (diff)
downloadgst-plugins-bad-1b26c3f023172f2ccc5dd770f47025a6bb6b9429.tar.gz
gst-plugins-bad-1b26c3f023172f2ccc5dd770f47025a6bb6b9429.tar.bz2
gst-plugins-bad-1b26c3f023172f2ccc5dd770f47025a6bb6b9429.zip
sys/glsink/glimagesink.c: Sprinkle in some XSync calls to avoid raciness with broken drivers (ATI) when re-using a si...
Original commit message from CVS: * sys/glsink/glimagesink.c: (gst_glimage_sink_stop), (gst_glimage_sink_create_window), (gst_glimage_sink_init_display): Sprinkle in some XSync calls to avoid raciness with broken drivers (ATI) when re-using a single glimagesink.
Diffstat (limited to 'sys/glsink')
-rw-r--r--sys/glsink/glimagesink.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/glsink/glimagesink.c b/sys/glsink/glimagesink.c
index 047fde56..b83ae973 100644
--- a/sys/glsink/glimagesink.c
+++ b/sys/glsink/glimagesink.c
@@ -355,8 +355,16 @@ gst_glimage_sink_stop (GstBaseSink * bsink)
glimage_sink = GST_GLIMAGE_SINK (bsink);
if (glimage_sink->display) {
+ if (glimage_sink->context) {
+ glXDestroyContext (glimage_sink->display, glimage_sink->context);
+ glimage_sink->context = NULL;
+ }
+ XSync (glimage_sink->display, False);
XCloseDisplay (glimage_sink->display);
+ glimage_sink->display = NULL;
}
+ glimage_sink->context = NULL;
+ glimage_sink->window = 0;
return TRUE;
}
@@ -696,6 +704,8 @@ gst_glimage_sink_create_window (GstGLImageSink * glimage_sink)
XMapWindow (glimage_sink->display, glimage_sink->window);
}
+ XSync (glimage_sink->display, False);
+
gst_x_overlay_got_xwindow_id (GST_X_OVERLAY (glimage_sink),
glimage_sink->window);
@@ -769,6 +779,8 @@ gst_glimage_sink_init_display (GstGLImageSink * glimage_sink)
window = XCreateWindow (glimage_sink->display, root, 0, 0,
100, 100, 0, visinfo->depth, InputOutput, visinfo->visual, mask, &attr);
+ XSync (glimage_sink->display, FALSE);
+
glXMakeCurrent (glimage_sink->display, window, glimage_sink->context);
glGetIntegerv (GL_MAX_TEXTURE_SIZE, &glimage_sink->max_texture_size);