From b73679e13d23d39c9e34bb01909bf42649ea6dda Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Fri, 15 Jul 2011 12:08:40 +0200 Subject: [PATCH] mpegtsbase: Store incoming newsegments --- gst/mpegtsdemux/mpegtsbase.c | 26 +++++++++++++++++++++++--- gst/mpegtsdemux/mpegtsbase.h | 5 ++++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c index 463090a..e5bf683 100644 --- a/gst/mpegtsdemux/mpegtsbase.c +++ b/gst/mpegtsdemux/mpegtsbase.c @@ -210,6 +210,8 @@ mpegts_base_reset (MpegTSBase * base) /* base->pat = NULL; */ /* pmt pids will be added and removed dynamically */ + gst_segment_init (&base->segment, GST_FORMAT_UNDEFINED); + if (klass->reset) klass->reset (base); } @@ -241,6 +243,8 @@ mpegts_base_init (MpegTSBase * base, MpegTSBaseClass * klass) base->mode = BASE_MODE_STREAMING; base->seen_pat = FALSE; base->first_pat_offset = -1; + + gst_segment_init (&base->segment, GST_FORMAT_UNDEFINED); } static void @@ -1008,7 +1012,7 @@ mpegts_base_get_tags_from_eit (MpegTSBase * base, GstStructure * eit_info) static gboolean mpegts_base_sink_event (GstPad * pad, GstEvent * event) { - gboolean res; + gboolean res = TRUE; MpegTSBase *base = GST_MPEGTS_BASE (gst_object_get_parent (GST_OBJECT (pad))); GST_WARNING_OBJECT (base, "Got event %s", @@ -1016,11 +1020,27 @@ mpegts_base_sink_event (GstPad * pad, GstEvent * event) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_NEWSEGMENT: - /* FIXME : STORE NEW SEGMENT ! */ + { + gboolean update; + gdouble rate, applied_rate; + GstFormat format; + gint64 start, stop, position; + + gst_event_parse_new_segment_full (event, &update, &rate, &applied_rate, + &format, &start, &stop, &position); + GST_DEBUG_OBJECT (base, + "Segment update:%d, rate:%f, applied_rate:%f, format:%s", update, + rate, applied_rate, gst_format_get_name (format)); + GST_DEBUG_OBJECT (base, + " start:%" G_GINT64_FORMAT ", stop:%" G_GINT64_FORMAT + ", position:%" G_GINT64_FORMAT, start, stop, position); + gst_segment_set_newsegment_full (&base->segment, update, rate, + applied_rate, format, start, stop, position); gst_event_unref (event); - res = FALSE; + } break; case GST_EVENT_FLUSH_START: + gst_segment_init (&base->segment, GST_FORMAT_UNDEFINED); mpegts_packetizer_flush (base->packetizer); /* Passthrough */ default: diff --git a/gst/mpegtsdemux/mpegtsbase.h b/gst/mpegtsdemux/mpegtsbase.h index 44ea90a..719af7b 100644 --- a/gst/mpegtsdemux/mpegtsbase.h +++ b/gst/mpegtsdemux/mpegtsbase.h @@ -120,8 +120,11 @@ struct _MpegTSBase { /* Whether we saw a PAT yet */ gboolean seen_pat; - /*Offset from the origin to the first PAT (pullmode) */ + /* Offset from the origin to the first PAT (pullmode) */ guint64 first_pat_offset; + + /* Upstream segment */ + GstSegment segment; }; struct _MpegTSBaseClass { -- 2.7.4