basesink: copy last_sample on DRAIN
authorWim Taymans <wtaymans@redhat.com>
Mon, 24 Mar 2014 15:34:27 +0000 (16:34 +0100)
committerWim Taymans <wtaymans@redhat.com>
Mon, 24 Mar 2014 15:34:27 +0000 (16:34 +0100)
Make sure we don't hold a ref to a buffer from before the DRAIN query by
making a copy of the last_buffer.

libs/gst/base/gstbasesink.c

index ef10085..2d99272 100644 (file)
@@ -4827,8 +4827,18 @@ gst_base_sink_default_query (GstBaseSink * basesink, GstQuery * query)
       break;
     }
     case GST_QUERY_DRAIN:
+    {
+      GstBuffer *old;
+
+      GST_OBJECT_LOCK (basesink);
+      if ((old = basesink->priv->last_buffer))
+        basesink->priv->last_buffer = gst_buffer_copy (old);
+      GST_OBJECT_UNLOCK (basesink);
+      if (old)
+        gst_buffer_unref (old);
       res = TRUE;
       break;
+    }
     default:
       res =
           gst_pad_query_default (basesink->sinkpad, GST_OBJECT_CAST (basesink),