Blame SOURCES/0001-video-sink-clear-buffer-in-flush.patch

b31db4
From 6dd67050554caf7e689a0de28807631b56d01b16 Mon Sep 17 00:00:00 2001
b31db4
From: Wim Taymans <wtaymans@redhat.com>
b31db4
Date: Tue, 19 May 2015 13:31:12 +0200
b31db4
Subject: [PATCH] video-sink: clear buffer in flush
b31db4
b31db4
We need to release our refs to the buffer in FLUSH_START so that
b31db4
upstream can free and reuse the memory.
b31db4
---
b31db4
 clutter-gst/clutter-gst-video-sink.c | 26 ++++++++++++++++++++++++++
b31db4
 1 file changed, 26 insertions(+)
b31db4
b31db4
diff --git a/clutter-gst/clutter-gst-video-sink.c b/clutter-gst/clutter-gst-video-sink.c
b31db4
index 63867d4..ef6d996 100644
b31db4
--- a/clutter-gst/clutter-gst-video-sink.c
b31db4
+++ b/clutter-gst/clutter-gst-video-sink.c
b31db4
@@ -1971,6 +1971,31 @@ clutter_gst_video_sink_propose_allocation (GstBaseSink * base_sink, GstQuery * q
b31db4
   return TRUE;
b31db4
 }
b31db4
 
b31db4
+static gboolean
b31db4
+clutter_gst_video_sink_event (GstBaseSink * basesink, GstEvent * event)
b31db4
+{
b31db4
+  ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (basesink);
b31db4
+  ClutterGstVideoSinkPrivate *priv = sink->priv;
b31db4
+  ClutterGstSource *gst_source = priv->source;
b31db4
+
b31db4
+  switch (GST_EVENT_TYPE (event)) {
b31db4
+    case GST_EVENT_FLUSH_START:
b31db4
+      g_mutex_lock (&gst_source->buffer_lock);
b31db4
+      if (gst_source->buffer) {
b31db4
+        GST_DEBUG ("Freeing existing buffer %p", gst_source->buffer);
b31db4
+        gst_buffer_unref (gst_source->buffer);
b31db4
+        gst_source->buffer = NULL;
b31db4
+      }
b31db4
+      g_mutex_unlock (&gst_source->buffer_lock);
b31db4
+      break;
b31db4
+
b31db4
+    default:
b31db4
+      break;
b31db4
+  }
b31db4
+
b31db4
+  return GST_BASE_SINK_CLASS (parent_class)->event (basesink, event);
b31db4
+}
b31db4
+
b31db4
 static void
b31db4
 clutter_gst_video_sink_class_init (ClutterGstVideoSinkClass * klass)
b31db4
 {
b31db4
@@ -2007,6 +2032,7 @@ clutter_gst_video_sink_class_init (ClutterGstVideoSinkClass * klass)
b31db4
   gstbase_sink_class->set_caps = clutter_gst_video_sink_set_caps;
b31db4
   gstbase_sink_class->get_caps = clutter_gst_video_sink_get_caps;
b31db4
   gstbase_sink_class->propose_allocation = clutter_gst_video_sink_propose_allocation;
b31db4
+  gstbase_sink_class->event = clutter_gst_video_sink_event;
b31db4
 
b31db4
   /**
b31db4
    * ClutterGstVideoSink:texture:
b31db4
-- 
b31db4
2.1.0
b31db4