[800/906] glimagesink: avoid to draw texture while releasing stored buffer
authorJulien Isorce <julien.isorce@collabora.co.uk>
Wed, 28 Aug 2013 09:32:29 +0000 (10:32 +0100)
committerMatthew Waters <ystreet00@gmail.com>
Sat, 15 Mar 2014 17:37:01 +0000 (18:37 +0100)
Spoted by generic/cube example with ClientDrawCallback set to
returning TRUE (it means drawing as fast as possible)

gst/gl/gstglimagesink.c

index f438e57..89857f5 100644 (file)
@@ -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,