summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@gnome.org>2014-07-08 16:48:08 +0200
committerThibault Saunier <tsaunier@gnome.org>2014-07-16 17:05:25 +0200
commit9233c6ac6974120f9d1ea2e1fc49aa6a7801255f (patch)
tree47c281be442f92a3a3f11b3c5b9d1f0b1af0a398
parente79e96e59dad6410594a7ae1080c9c4cd8fc5b08 (diff)
downloadgstreamer-plugins-bad-9233c6ac6974120f9d1ea2e1fc49aa6a7801255f.tar.gz
aggregator: Handle event seqnum
-rw-r--r--gst-libs/gst/base/gstaggregator.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/gst-libs/gst/base/gstaggregator.c b/gst-libs/gst/base/gstaggregator.c
index 8a3a3bfb5..93a8033bb 100644
--- a/gst-libs/gst/base/gstaggregator.c
+++ b/gst-libs/gst/base/gstaggregator.c
@@ -165,6 +165,7 @@ struct _GstAggregatorPrivate
GMutex mcontext_lock;
GList *gsources;
+ gint seqnum;
gboolean send_stream_start;
gboolean send_segment;
gboolean flush_seeking;
@@ -328,8 +329,15 @@ _push_mandatory_events (GstAggregator * self)
if (g_atomic_int_get (&self->priv->send_segment)) {
if (!g_atomic_int_get (&self->priv->flush_seeking)) {
- GST_INFO_OBJECT (self, "pushing segment");
- gst_pad_push_event (self->srcpad, gst_event_new_segment (&self->segment));
+ GstEvent *segev = gst_event_new_segment (&self->segment);
+
+ if (!self->priv->seqnum)
+ self->priv->seqnum = gst_event_get_seqnum (segev);
+ else
+ gst_event_set_seqnum (segev, self->priv->seqnum);
+
+ GST_DEBUG_OBJECT (self, "pushing segment %" GST_PTR_FORMAT, segev);
+ gst_pad_push_event (self->srcpad, segev);
g_atomic_int_set (&self->priv->send_segment, FALSE);
}
}
@@ -370,10 +378,13 @@ gst_aggregator_finish_buffer (GstAggregator * self, GstBuffer * buffer)
static void
_push_eos (GstAggregator * self)
{
+ GstEvent *event;
_push_mandatory_events (self);
self->priv->send_eos = FALSE;
- gst_pad_push_event (self->srcpad, gst_event_new_eos ());
+ event = gst_event_new_eos ();
+ gst_event_set_seqnum (event, self->priv->seqnum);
+ gst_pad_push_event (self->srcpad, event);
}
@@ -935,7 +946,11 @@ _src_event (GstAggregator * self, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
{
+ gst_event_ref (event);
res = _do_seek (self, event);
+ if (res)
+ self->priv->seqnum = gst_event_get_seqnum (event);
+ gst_event_unref (event);
event = NULL;
goto done;
}