summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Sauer <ensonic@users.sf.net>2017-10-03 12:36:10 +0200
committerTim-Philipp Müller <tim@centricular.com>2017-12-02 15:10:27 +0000
commit4808f4836c4a552f6cf6d0da61f1770caf20d3b4 (patch)
tree0de60d0e40a4e2857b85435326a010c882773063
parenta82e6bc650dac35c1cce6021eb555e5151a6a496 (diff)
aggregator: cleanup event forwarding
Don't copy the whole event struct. Set the input params when we call the forwarding helper. Initialize the internal fields and return values in the helper.
-rw-r--r--libs/gst/base/gstaggregator.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/libs/gst/base/gstaggregator.c b/libs/gst/base/gstaggregator.c
index 289268a2c..afeb9ba2b 100644
--- a/libs/gst/base/gstaggregator.c
+++ b/libs/gst/base/gstaggregator.c
@@ -320,13 +320,16 @@ struct _GstAggregatorPrivate
gint64 latency; /* protected by both src_lock and all pad locks */
};
+/* Seek event forwarding helper */
typedef struct
{
+ /* parameters */
GstEvent *event;
- gboolean result;
gboolean flush;
gboolean only_to_active_pads;
+ /* results */
+ gboolean result;
gboolean one_actually_seeked;
} EventData;
@@ -1944,22 +1947,17 @@ gst_aggregator_event_forward_func (GstPad * pad, gpointer user_data)
return FALSE;
}
-static EventData
+static void
gst_aggregator_forward_event_to_all_sinkpads (GstAggregator * self,
- GstEvent * event, gboolean flush, gboolean only_to_active_pads)
+ EventData * evdata)
{
- EventData evdata;
-
- evdata.event = event;
- evdata.result = TRUE;
- evdata.flush = flush;
- evdata.one_actually_seeked = FALSE;
- evdata.only_to_active_pads = only_to_active_pads;
+ evdata->result = TRUE;
+ evdata->one_actually_seeked = FALSE;
/* We first need to set all pads as flushing in a first pass
* as flush_start flush_stop is sometimes sent synchronously
* while we send the seek event */
- if (flush) {
+ if (evdata->flush) {
GList *l;
GST_OBJECT_LOCK (self);
@@ -1974,11 +1972,9 @@ gst_aggregator_forward_event_to_all_sinkpads (GstAggregator * self,
GST_OBJECT_UNLOCK (self);
}
- gst_pad_forward (self->srcpad, gst_aggregator_event_forward_func, &evdata);
-
- gst_event_unref (event);
+ gst_pad_forward (self->srcpad, gst_aggregator_event_forward_func, evdata);
- return evdata;
+ gst_event_unref (evdata->event);
}
static gboolean
@@ -1990,7 +1986,7 @@ gst_aggregator_do_seek (GstAggregator * self, GstEvent * event)
GstSeekType start_type, stop_type;
gint64 start, stop;
gboolean flush;
- EventData evdata;
+ EventData evdata = { 0, };
GstAggregatorPrivate *priv = self->priv;
gst_event_parse_seek (event, &rate, &fmt, &flags, &start_type,
@@ -2014,8 +2010,10 @@ gst_aggregator_do_seek (GstAggregator * self, GstEvent * event)
GST_OBJECT_UNLOCK (self);
/* forward the seek upstream */
- evdata =
- gst_aggregator_forward_event_to_all_sinkpads (self, event, flush, FALSE);
+ evdata.event = event;
+ evdata.flush = flush;
+ evdata.only_to_active_pads = FALSE;
+ gst_aggregator_forward_event_to_all_sinkpads (self, &evdata);
event = NULL;
if (!evdata.result || !evdata.one_actually_seeked) {
@@ -2033,7 +2031,7 @@ gst_aggregator_do_seek (GstAggregator * self, GstEvent * event)
static gboolean
gst_aggregator_default_src_event (GstAggregator * self, GstEvent * event)
{
- EventData evdata;
+ EventData evdata = { 0, };
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
@@ -2050,9 +2048,10 @@ gst_aggregator_default_src_event (GstAggregator * self, GstEvent * event)
/* Don't forward QOS events to pads that had no active buffer yet. Otherwise
* they will receive a QOS event that has earliest_time=0 (because we can't
* have negative timestamps), and consider their buffer as too late */
- evdata =
- gst_aggregator_forward_event_to_all_sinkpads (self, event, FALSE,
- GST_EVENT_TYPE (event) == GST_EVENT_QOS);
+ evdata.event = event;
+ evdata.flush = FALSE;
+ evdata.only_to_active_pads = GST_EVENT_TYPE (event) == GST_EVENT_QOS;
+ gst_aggregator_forward_event_to_all_sinkpads (self, &evdata);
return evdata.result;
}