glimagesink: release stored buffers on drain query
authorJulien Isorce <j.isorce@samsung.com>
Tue, 11 Nov 2014 23:49:59 +0000 (23:49 +0000)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:49 +0000 (19:31 +0000)
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732694

ext/gl/gstglimagesink.c

index 9bc5448d3fd7c91cb5d1a81dcd946144b0624a11..b8bfe1a5133ca4280819d125fcf239ae630042ac 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;