mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
aggregator: Unify code to set a pad flushing
https://bugzilla.gnome.org/show_bug.cgi?id=747220
This commit is contained in:
parent
6981a8d15b
commit
38d8db801a
1 changed files with 14 additions and 12 deletions
|
@ -790,6 +790,17 @@ gst_aggregator_all_flush_stop_received_locked (GstAggregator * self)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
static void
|
||||||
gst_aggregator_flush_start (GstAggregator * self, GstAggregatorPad * aggpad,
|
gst_aggregator_flush_start (GstAggregator * self, GstAggregatorPad * aggpad,
|
||||||
GstEvent * event)
|
GstEvent * event)
|
||||||
|
@ -797,10 +808,7 @@ gst_aggregator_flush_start (GstAggregator * self, GstAggregatorPad * aggpad,
|
||||||
GstAggregatorPrivate *priv = self->priv;
|
GstAggregatorPrivate *priv = self->priv;
|
||||||
GstAggregatorPadPrivate *padpriv = aggpad->priv;
|
GstAggregatorPadPrivate *padpriv = aggpad->priv;
|
||||||
|
|
||||||
g_atomic_int_set (&aggpad->priv->flushing, TRUE);
|
gst_aggregator_pad_set_flushing (aggpad);
|
||||||
|
|
||||||
/* Remove pad buffer and wake up the streaming thread */
|
|
||||||
gst_aggregator_pad_drop_buffer (aggpad);
|
|
||||||
|
|
||||||
PAD_FLUSH_LOCK (aggpad);
|
PAD_FLUSH_LOCK (aggpad);
|
||||||
PAD_LOCK (aggpad);
|
PAD_LOCK (aggpad);
|
||||||
|
@ -1053,14 +1061,12 @@ static void
|
||||||
gst_aggregator_release_pad (GstElement * element, GstPad * pad)
|
gst_aggregator_release_pad (GstElement * element, GstPad * pad)
|
||||||
{
|
{
|
||||||
GstAggregator *self = GST_AGGREGATOR (element);
|
GstAggregator *self = GST_AGGREGATOR (element);
|
||||||
|
|
||||||
GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
|
GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
|
||||||
|
|
||||||
GST_INFO_OBJECT (pad, "Removing pad");
|
GST_INFO_OBJECT (pad, "Removing pad");
|
||||||
|
|
||||||
SRC_LOCK (self);
|
SRC_LOCK (self);
|
||||||
g_atomic_int_set (&aggpad->priv->flushing, TRUE);
|
gst_aggregator_pad_set_flushing (aggpad);
|
||||||
gst_aggregator_pad_drop_buffer (aggpad);
|
|
||||||
gst_element_remove_pad (element, pad);
|
gst_element_remove_pad (element, pad);
|
||||||
|
|
||||||
SRC_BROADCAST (self);
|
SRC_BROADCAST (self);
|
||||||
|
@ -1933,11 +1939,7 @@ gst_aggregator_pad_activate_mode_func (GstPad * pad,
|
||||||
GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
|
GstAggregatorPad *aggpad = GST_AGGREGATOR_PAD (pad);
|
||||||
|
|
||||||
if (active == FALSE) {
|
if (active == FALSE) {
|
||||||
PAD_LOCK (aggpad);
|
gst_aggregator_pad_set_flushing (aggpad);
|
||||||
g_atomic_int_set (&aggpad->priv->flushing, TRUE);
|
|
||||||
gst_buffer_replace (&aggpad->priv->buffer, NULL);
|
|
||||||
PAD_BROADCAST_EVENT (aggpad);
|
|
||||||
PAD_UNLOCK (aggpad);
|
|
||||||
} else {
|
} else {
|
||||||
PAD_LOCK (aggpad);
|
PAD_LOCK (aggpad);
|
||||||
g_atomic_int_set (&aggpad->priv->flushing, FALSE);
|
g_atomic_int_set (&aggpad->priv->flushing, FALSE);
|
||||||
|
|
Loading…
Reference in a new issue