vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Jul 22 16:55:28 2015 +0200| [23d44ceb6b760af015238a64ba45fb24ddf491e7] | committer: Francois Cartegnie
demux: adaptative: handle end of period > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=23d44ceb6b760af015238a64ba45fb24ddf491e7 --- modules/demux/adaptative/PlaylistManager.cpp | 8 ++++++++ modules/demux/adaptative/Streams.hpp | 2 +- modules/demux/dash/dash.cpp | 5 +++++ modules/demux/hls/hls.cpp | 4 ++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/demux/adaptative/PlaylistManager.cpp b/modules/demux/adaptative/PlaylistManager.cpp index 82dc63c..d65bede 100644 --- a/modules/demux/adaptative/PlaylistManager.cpp +++ b/modules/demux/adaptative/PlaylistManager.cpp @@ -157,6 +157,14 @@ Stream::status PlaylistManager::demux(mtime_t nzdeadline, bool send) } } + /* might be end of current period */ + if(i_return == Stream::status_eof && currentPeriod) + { + unsetPeriod(); + currentPeriod = playlist->getNextPeriod(currentPeriod); + i_return = (setupPeriod()) ? Stream::status_eop : Stream::status_eof; + } + return i_return; } diff --git a/modules/demux/adaptative/Streams.hpp b/modules/demux/adaptative/Streams.hpp index 1c0be95..b567ccd 100644 --- a/modules/demux/adaptative/Streams.hpp +++ b/modules/demux/adaptative/Streams.hpp @@ -77,7 +77,7 @@ namespace adaptative bool isSelected() const; bool reactivate(mtime_t); bool isDisabled() const; - typedef enum {status_eof, status_buffering, status_demuxed} status; + typedef enum {status_eof, status_eop, status_buffering, status_demuxed} status; status demux(HTTPConnectionManager *, mtime_t, bool); bool setPosition(mtime_t, bool); mtime_t getPosition() const; diff --git a/modules/demux/dash/dash.cpp b/modules/demux/dash/dash.cpp index fb996f0..82d6298 100644 --- a/modules/demux/dash/dash.cpp +++ b/modules/demux/dash/dash.cpp @@ -197,12 +197,17 @@ static int Demux(demux_t *p_demux) Stream::status status = p_sys->p_dashManager->demux(p_sys->i_nzpcr + DEMUX_INCREMENT, true); + switch(status) { case Stream::status_eof: return VLC_DEMUXER_EOF; case Stream::status_buffering: break; + case Stream::status_eop: + p_sys->i_nzpcr = VLC_TS_INVALID; + es_out_Control(p_demux->out, ES_OUT_RESET_PCR); + break; case Stream::status_demuxed: if( p_sys->i_nzpcr != VLC_TS_INVALID ) { diff --git a/modules/demux/hls/hls.cpp b/modules/demux/hls/hls.cpp index 19984dd..2e85ca3 100644 --- a/modules/demux/hls/hls.cpp +++ b/modules/demux/hls/hls.cpp @@ -241,6 +241,10 @@ static int Demux(demux_t *p_demux) return VLC_DEMUXER_EOF; case Stream::status_buffering: break; + case Stream::status_eop: + p_sys->i_nzpcr = VLC_TS_INVALID; + es_out_Control(p_demux->out, ES_OUT_RESET_PCR); + break; case Stream::status_demuxed: if( p_sys->i_nzpcr != VLC_TS_INVALID ) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
