glimagesink: release stored buffers on drain query
authorJulien Isorce <j.isorce@samsung.com>
Tue, 11 Nov 2014 23:49:59 +0000 (23:49 +0000)
committerJulien Isorce <j.isorce@samsung.com>
Wed, 12 Nov 2014 00:08:04 +0000 (00:08 +0000)
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732694

ext/gl/gstglimagesink.c

index 9bc5448..b8bfe1a 100644 (file)
@@ -564,6 +564,26 @@ gst_glimage_sink_query (GstBaseSink * bsink, GstQuery * query)
       return gst_gl_handle_context_query ((GstElement *) glimage_sink, query,
           &glimage_sink->display, &glimage_sink->other_context);
     }
+    case GST_QUERY_DRAIN:
+    {
+      GstBuffer *buf = NULL;
+
+      GST_GLIMAGE_SINK_LOCK (glimage_sink);
+      glimage_sink->redisplay_texture = 0;
+      buf = glimage_sink->stored_buffer;
+      glimage_sink->stored_buffer = NULL;
+      GST_GLIMAGE_SINK_UNLOCK (glimage_sink);
+
+      if (buf)
+        gst_buffer_unref (buf);
+
+      gst_buffer_replace (&glimage_sink->next_buffer, NULL);
+      gst_gl_upload_release_buffer (glimage_sink->upload);
+      glimage_sink->upload = NULL;
+
+      res = GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
+      break;
+    }
     default:
       res = GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
       break;