diff options
author | Josep Torra <n770galaxy@gmail.com> | 2012-11-13 22:40:25 +0100 |
---|---|---|
committer | Josep Torra <n770galaxy@gmail.com> | 2012-11-13 22:40:25 +0100 |
commit | 0c01b7885494cfd4d5c7c6852036c9a0fb52bdf0 (patch) | |
tree | ea5092589ce95632abcfa2fb5d2b291b554707cf | |
parent | 0b3e0ed080fabe87ead446609bc688f5279437ee (diff) |
tsdemux: forward upstream time segments after flushestsdemux
Also reset segment info and drop the segment event when demuxer is
flushed.
Restore demuxer segment with the info stored in base when demuxer is
going to push data again.
-rw-r--r-- | gst/mpegtsdemux/tsdemux.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index 971761fd7..7d4248f6c 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -324,7 +324,7 @@ gst_ts_demux_reset (MpegTSBase * base) demux->program_number = -1; demux->calculate_update_segment = FALSE; - gst_segment_init (&demux->segment, GST_FORMAT_TIME); + gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED); if (demux->segment_event) { gst_event_unref (demux->segment_event); demux->segment_event = NULL; @@ -1384,6 +1384,16 @@ calculate_and_push_newsegment (GstTSDemux * demux, TSDemuxStream * stream) GST_DEBUG ("Creating new newsegment for stream %p", stream); + /* 0) Recover segment info from base */ + if (demux->segment.format == GST_FORMAT_UNDEFINED) { + if (base->segment.format == GST_FORMAT_TIME) { + demux->segment = base->segment; + demux->segment_event = gst_event_new_segment (&demux->segment); + } else { + gst_segment_init (&demux->segment, GST_FORMAT_TIME); + } + } + /* 1) If we need to calculate an update newsegment, do it * 2) If we need to calculate a new newsegment, do it * 3) If an update_segment is valid, push it @@ -1588,6 +1598,13 @@ gst_ts_demux_flush (MpegTSBase * base) GstTSDemux *demux = GST_TS_DEMUX_CAST (base); gst_ts_demux_flush_streams (demux); + + if (demux->segment_event) { + gst_event_unref (demux->segment_event); + demux->segment_event = NULL; + } + demux->calculate_update_segment = FALSE; + gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED); } static GstFlowReturn |