summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosep Torra <n770galaxy@gmail.com>2012-11-13 22:40:25 +0100
committerJosep Torra <n770galaxy@gmail.com>2012-11-13 22:40:25 +0100
commit0c01b7885494cfd4d5c7c6852036c9a0fb52bdf0 (patch)
treeea5092589ce95632abcfa2fb5d2b291b554707cf
parent0b3e0ed080fabe87ead446609bc688f5279437ee (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.c19
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