diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | sys/glsink/glimagesink.c | 12 |
2 files changed, 19 insertions, 0 deletions
@@ -1,5 +1,12 @@ 2007-06-06 Jan Schmidt <thaytan@mad.scientist.com> + * 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. + +2007-06-06 Jan Schmidt <thaytan@mad.scientist.com> + * gst/mpegvideoparse/mpegpacketiser.c: (mpeg_util_parse_extension_packet), (mpeg_util_parse_sequence_hdr), (mpeg_util_parse_picture_hdr): 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); |