}
static void
+gst_aggregator_pad_set_flushing (GstAggregatorPad * aggpad)
+{
+ PAD_LOCK (aggpad);
+ g_atomic_int_set (&aggpad->priv->flushing, TRUE);
+ gst_buffer_replace (&aggpad->priv->buffer, NULL);
+ PAD_BROADCAST_EVENT (aggpad);
+ PAD_UNLOCK (aggpad);
+}
+
+
+static void
gst_aggregator_flush_start (GstAggregator * self, GstAggregatorPad * aggpad,
GstEvent * event)
{
GstAggregatorPrivate *priv = self->priv;
GstAggregatorPadPrivate *padpriv = aggpad->priv;
- g_atomic_int_set (&aggpad->priv->flushing, TRUE);
-
- /* Remove pad buffer and wake up the streaming thread */
- gst_aggregator_pad_drop_buffer (aggpad);
+ gst_aggregator_pad_set_flushing (aggpad);
PAD_FLUSH_LOCK (aggpad);
PAD_LOCK (aggpad);
gst_aggregator_release_pad (GstElement * element, GstPad * pad)
{
GstAggregator *self = GST_AGGREGATOR (element);
-
GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
GST_INFO_OBJECT (pad, "Removing pad");
SRC_LOCK (self);
- g_atomic_int_set (&aggpad->priv->flushing, TRUE);
- gst_aggregator_pad_drop_buffer (aggpad);
+ gst_aggregator_pad_set_flushing (aggpad);
gst_element_remove_pad (element, pad);
SRC_BROADCAST (self);
GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
if (active == FALSE) {
- PAD_LOCK (aggpad);
- g_atomic_int_set (&aggpad->priv->flushing, TRUE);
- gst_buffer_replace (&aggpad->priv->buffer, NULL);
- PAD_BROADCAST_EVENT (aggpad);
- PAD_UNLOCK (aggpad);
+ gst_aggregator_pad_set_flushing (aggpad);
} else {
PAD_LOCK (aggpad);
g_atomic_int_set (&aggpad->priv->flushing, FALSE);