[800/906] 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)
This commit is contained in:
Julien Isorce 2013-08-28 10:32:29 +01:00 committed by Matthew Waters
parent 940151bcd6
commit 2d876dfb70

View file

@ -487,10 +487,17 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition)
break; break;
case GST_STATE_CHANGE_PAUSED_TO_READY: 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) { if (glimage_sink->stored_buffer) {
gst_buffer_unref (glimage_sink->stored_buffer); gst_buffer_unref (glimage_sink->stored_buffer);
glimage_sink->stored_buffer = NULL; glimage_sink->stored_buffer = NULL;
} }
GST_GLIMAGE_SINK_UNLOCK (glimage_sink);
if (glimage_sink->upload) { if (glimage_sink->upload) {
gst_object_unref (glimage_sink->upload); gst_object_unref (glimage_sink->upload);
glimage_sink->upload = NULL; glimage_sink->upload = NULL;
@ -1008,7 +1015,8 @@ gst_glimage_sink_on_draw (const GstGLImageSink * gl_sink)
gl_sink->client_data); gl_sink->client_data);
if (doRedisplay) { 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); GstGLWindow *window = gst_gl_context_get_window (context);
gst_gl_window_draw_unlocked (window, gst_gl_window_draw_unlocked (window,