summaryrefslogtreecommitdiff
path: root/libs
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 /libs
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.
Diffstat (limited to 'libs')
-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;
}