vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Jun 18 16:18:43 2015 +0200| [0a6a4489f1bdec209322a469569df7008085c04c] | committer: Francois Cartegnie
demux: adaptative: ensure data is dropped while restarting > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0a6a4489f1bdec209322a469569df7008085c04c --- modules/demux/adaptative/Streams.cpp | 32 ++++++++++++++++++++++++-------- modules/demux/adaptative/Streams.hpp | 1 + 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/modules/demux/adaptative/Streams.cpp b/modules/demux/adaptative/Streams.cpp index c786e65..4cdb18e 100644 --- a/modules/demux/adaptative/Streams.cpp +++ b/modules/demux/adaptative/Streams.cpp @@ -287,6 +287,7 @@ BaseStreamOutput::BaseStreamOutput(demux_t *demux, const std::string &name) : seekable = true; restarting = false; demuxstream = NULL; + b_drop = false; fakeesout = new es_out_t; if (!fakeesout) @@ -370,12 +371,20 @@ void BaseStreamOutput::setPosition(mtime_t nztime) if(pair->p_queue && pair->p_queue->i_dts > VLC_TS_0 + nztime) pair->drop(); } + /* disable appending until restarted */ + b_drop = true; + vlc_mutex_unlock(&lock); + + if(reinitsOnSeek()) + restart(); + + vlc_mutex_lock(&lock); + b_drop = false; pcr = VLC_TS_INVALID; vlc_mutex_unlock(&lock); + es_out_Control(realdemux->out, ES_OUT_SET_NEXT_DISPLAY_TIME, VLC_TS_0 + nztime); - if(reinitsOnSeek()) - restart(); } bool BaseStreamOutput::restart() @@ -516,14 +525,21 @@ int BaseStreamOutput::esOutSend(es_out_t *fakees, es_out_id_t *p_es, block_t *p_ { BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys; vlc_mutex_lock(&me->lock); - std::list<Demuxed *>::const_iterator it; - for(it=me->queues.begin(); it!=me->queues.end();++it) + if(me->b_drop) { - Demuxed *pair = *it; - if(pair->es_id == p_es) + block_ChainRelease( p_block ); + } + else + { + std::list<Demuxed *>::const_iterator it; + for(it=me->queues.begin(); it!=me->queues.end();++it) { - block_ChainLastAppend(&pair->pp_queue_last, p_block); - break; + Demuxed *pair = *it; + if(pair->es_id == p_es) + { + block_ChainLastAppend(&pair->pp_queue_last, p_block); + break; + } } } vlc_mutex_unlock(&me->lock); diff --git a/modules/demux/adaptative/Streams.hpp b/modules/demux/adaptative/Streams.hpp index da0e5b5..9e0c589 100644 --- a/modules/demux/adaptative/Streams.hpp +++ b/modules/demux/adaptative/Streams.hpp @@ -164,6 +164,7 @@ namespace adaptative es_format_t fmtcpy; }; std::list<Demuxed *> queues; + bool b_drop; vlc_mutex_t lock; void sendToDecoderUnlocked(mtime_t); bool restart(); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
