diff options
author | Petri Hintukainen <phintuka@users.sourceforge.net> | 2011-10-16 20:52:49 +0300 |
---|---|---|
committer | Petri Hintukainen <phintuka@users.sourceforge.net> | 2011-10-16 20:52:49 +0300 |
commit | 68a893cefd56a81ff3af304cda6ee897a1506ed3 (patch) | |
tree | 210247d695bbe60c6eb6d68ab88f512cbe64252a | |
parent | 82eccdbd9a348225c04d2e3c7caa7830eb5da08a (diff) | |
download | xine-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.
-rw-r--r-- | src/demuxers/demux_ts.c | 29 | ||||
-rw-r--r-- | src/xine-engine/xine_internal.h | 2 |
2 files changed, 31 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; diff --git a/src/xine-engine/xine_internal.h b/src/xine-engine/xine_internal.h index 7566c83e0..939876ebe 100644 --- a/src/xine-engine/xine_internal.h +++ b/src/xine-engine/xine_internal.h @@ -519,6 +519,8 @@ int _x_get_spu_channel (xine_stream_t *stream) XINE_PROTECTED; /* sent by dvb frontend to inform ts demuxer of new pids */ #define XINE_EVENT_PIDS_CHANGE 0x80000000 +/* sent by BluRay input plugin to inform ts demuxer about end of clip */ +#define XINE_EVENT_END_OF_CLIP 0x80000001 /* * pids change event - inform ts demuxer of new pids |