summaryrefslogtreecommitdiff
path: root/libs/gst/base/gstbasesink.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/gst/base/gstbasesink.c')
-rw-r--r--libs/gst/base/gstbasesink.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
index 44f2ab472..14c2371b2 100644
--- a/libs/gst/base/gstbasesink.c
+++ b/libs/gst/base/gstbasesink.c
@@ -4805,6 +4805,18 @@ default_element_query (GstElement * element, GstQuery * query)
return res;
}
+static void
+gst_base_sink_drain (GstBaseSink * basesink)
+{
+ GstBuffer *old;
+
+ GST_OBJECT_LOCK (basesink);
+ if ((old = basesink->priv->last_buffer))
+ basesink->priv->last_buffer = gst_buffer_copy_deep (old);
+ GST_OBJECT_UNLOCK (basesink);
+ if (old)
+ gst_buffer_unref (old);
+}
static gboolean
gst_base_sink_default_query (GstBaseSink * basesink, GstQuery * query)
@@ -4817,6 +4829,7 @@ gst_base_sink_default_query (GstBaseSink * basesink, GstQuery * query)
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_ALLOCATION:
{
+ gst_base_sink_drain (basesink);
if (bclass->propose_allocation)
res = bclass->propose_allocation (basesink, query);
else
@@ -4853,14 +4866,7 @@ gst_base_sink_default_query (GstBaseSink * basesink, GstQuery * query)
}
case GST_QUERY_DRAIN:
{
- GstBuffer *old;
-
- GST_OBJECT_LOCK (basesink);
- if ((old = basesink->priv->last_buffer))
- basesink->priv->last_buffer = gst_buffer_copy_deep (old);
- GST_OBJECT_UNLOCK (basesink);
- if (old)
- gst_buffer_unref (old);
+ gst_base_sink_drain (basesink);
res = TRUE;
break;
}