From 093574053fae243ec5fcfd6adae8185053b1e896 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 24 Mar 2014 16:34:27 +0100 Subject: [PATCH] basesink: copy last_sample on DRAIN 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 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index ef10085..2d99272 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -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), -- 2.7.4