basesink: need to deep-copy last buffer list in drain
authorHyunjun Ko <zzoon.ko@samsung.com>
Wed, 24 Jun 2015 05:19:04 +0000 (14:19 +0900)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 24 Jun 2015 08:52:56 +0000 (10:52 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=751420

libs/gst/base/gstbasesink.c

index 971d87a..d44e8fc 100644 (file)
@@ -4900,13 +4900,20 @@ static void
 gst_base_sink_drain (GstBaseSink * basesink)
 {
   GstBuffer *old;
+  GstBufferList *old_list;
 
   GST_OBJECT_LOCK (basesink);
   if ((old = basesink->priv->last_buffer))
     basesink->priv->last_buffer = gst_buffer_copy_deep (old);
+
+  if ((old_list = basesink->priv->last_buffer_list))
+    basesink->priv->last_buffer_list = gst_buffer_list_copy_deep (old_list);
   GST_OBJECT_UNLOCK (basesink);
+
   if (old)
     gst_buffer_unref (old);
+  if (old_list)
+    gst_mini_object_unref (GST_MINI_OBJECT_CAST (old_list));
 }
 
 static gboolean