summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Isorce <julien.isorce@collabora.co.uk>2013-08-28 10:32:29 +0100
committerJulien Isorce <julien.isorce@collabora.co.uk>2013-08-28 10:32:29 +0100
commitdde32ba74fe7aa360c39bd836d9f55ce236ae5e9 (patch)
tree119bfc8fd7aa77268bbacc29f69d302b507e1da3
parentbe9d8a67278f42aca1332a9a1fc717e49e417bac (diff)
glimagesink: avoid to draw texture while releasing stored buffer
Spoted by generic/cube example with ClientDrawCallback set to returning TRUE (it means drawing as fast as possible)
-rw-r--r--gst/gl/gstglimagesink.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gst/gl/gstglimagesink.c b/gst/gl/gstglimagesink.c
index f438e57..89857f5 100644
--- a/gst/gl/gstglimagesink.c
+++ b/gst/gl/gstglimagesink.c
@@ -487,10 +487,17 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition)
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
{
+ /* mark the redisplay_texture as unavailable (=0)
+ * to avoid drawing
+ */
+ GST_GLIMAGE_SINK_LOCK (glimage_sink);
+ glimage_sink->redisplay_texture = 0;
if (glimage_sink->stored_buffer) {
gst_buffer_unref (glimage_sink->stored_buffer);
glimage_sink->stored_buffer = NULL;
}
+ GST_GLIMAGE_SINK_UNLOCK (glimage_sink);
+
if (glimage_sink->upload) {
gst_object_unref (glimage_sink->upload);
glimage_sink->upload = NULL;
@@ -1008,7 +1015,8 @@ gst_glimage_sink_on_draw (const GstGLImageSink * gl_sink)
gl_sink->client_data);
if (doRedisplay) {
- GstGLContext *context = gst_gl_display_get_context (gl_sink->display);
+ GstGLContext *context =
+ gst_gl_display_get_context_unlocked (gl_sink->display);
GstGLWindow *window = gst_gl_context_get_window (context);
gst_gl_window_draw_unlocked (window,