summaryrefslogtreecommitdiff
path: root/src/demuxers
diff options
context:
space:
mode:
authorPetri Hintukainen <phintuka@users.sourceforge.net>2011-10-16 20:52:49 +0300
committerPetri Hintukainen <phintuka@users.sourceforge.net>2011-10-16 20:52:49 +0300
commit68a893cefd56a81ff3af304cda6ee897a1506ed3 (patch)
tree210247d695bbe60c6eb6d68ab88f512cbe64252a /src/demuxers
parent82eccdbd9a348225c04d2e3c7caa7830eb5da08a (diff)
downloadxine-lib-68a893cefd56a81ff3af304cda6ee897a1506ed3.tar.gz
xine-lib-68a893cefd56a81ff3af304cda6ee897a1506ed3.tar.bz2
Added internal event XINE_EVENT_END_OF_CLIP
This event is used by BluRay input plugin to flush demux_ts caches at end of clip.
Diffstat (limited to 'src/demuxers')
-rw-r--r--src/demuxers/demux_ts.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index 5d6b8cb8c..f22526054 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -540,6 +540,30 @@ static void demux_ts_update_spu_channel(demux_ts_t *this)
this->video_fifo->put(this->video_fifo, buf);
}
+static void demux_ts_flush_media(demux_ts_media *m)
+{
+ if (m->buf) {
+ m->buf->content = m->buf->mem;
+ m->buf->size = m->buffered_bytes;
+ m->buf->type = m->type;
+ m->buf->decoder_flags |= BUF_FLAG_FRAME_END;
+ m->buf->pts = m->pts;
+ m->buf->extra_info->input_normpos = m->input_normpos;
+ m->buf->extra_info->input_time = m->input_time;
+ m->fifo->put(m->fifo, m->buf);
+ m->buffered_bytes = 0;
+ m->buf = NULL;
+ }
+}
+
+static void demux_ts_flush(demux_ts_t *this)
+{
+ unsigned int i;
+ for (i = 0; i < this->media_num; ++i) {
+ demux_ts_flush_media(&this->media[i]);
+ }
+}
+
/*
* demux_ts_parse_pat
*
@@ -2076,6 +2100,11 @@ static void demux_ts_event_handler (demux_ts_t *this) {
switch (event->type) {
+ case XINE_EVENT_END_OF_CLIP:
+ /* flush all streams */
+ demux_ts_flush(this);
+ /* fall thru */
+
case XINE_EVENT_PIDS_CHANGE:
this->videoPid = INVALID_PID;