From 7c3bfbb5123a1a0b2a38bde1cd8cc7afaaf92fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 24 Jul 2017 18:38:57 +0300 Subject: [PATCH] aggregator: Remove the GAP event from the queue before queueing up the GAP buffer Otherwise check_events() will not remove the GAP event (as the queue tail is not the event anymore but the GAP buffer), then the GAP buffer is handled, then the GAP event is handled again, ... forever. --- gst-libs/gst/base/gstaggregator.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gst-libs/gst/base/gstaggregator.c b/gst-libs/gst/base/gstaggregator.c index 33752e1f4e..4431cbf5e3 100644 --- a/gst-libs/gst/base/gstaggregator.c +++ b/gst-libs/gst/base/gstaggregator.c @@ -1476,6 +1476,10 @@ gst_aggregator_default_sink_event (GstAggregator * self, GST_BUFFER_FLAG_SET (gapbuf, GST_BUFFER_FLAG_GAP); GST_BUFFER_FLAG_SET (gapbuf, GST_BUFFER_FLAG_DROPPABLE); + /* Remove GAP event so we can replace it with the buffer */ + if (g_queue_peek_tail (&aggpad->priv->buffers) == event) + gst_event_unref (g_queue_pop_tail (&aggpad->priv->buffers)); + if (gst_aggregator_pad_chain_internal (self, aggpad, gapbuf, FALSE) != GST_FLOW_OK) { GST_WARNING_OBJECT (self, "Failed to chain gap buffer");