vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Jul 22 16:11:42 2015 +0200| [cccdd7e34152186fdd2f0d44ea8cdee8eecee2ea] | committer: Francois Cartegnie
demux: adaptative: don't flag eof if still demuxed data in buffer > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cccdd7e34152186fdd2f0d44ea8cdee8eecee2ea --- modules/demux/adaptative/Streams.cpp | 24 +++++++++++++++++++++--- modules/demux/adaptative/Streams.hpp | 2 ++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/modules/demux/adaptative/Streams.cpp b/modules/demux/adaptative/Streams.cpp index f465470..33fa5ba 100644 --- a/modules/demux/adaptative/Streams.cpp +++ b/modules/demux/adaptative/Streams.cpp @@ -180,14 +180,19 @@ Stream::status Stream::demux(HTTPConnectionManager *connManager, mtime_t nz_dead { /* need to read, demuxer still buffering, ... */ if(read(connManager) <= 0) - return Stream::status_eof; - - if(nz_deadline + VLC_TS_0 > output->getPCR()) /* need to read more */ + { + if(output->isEmpty()) + return Stream::status_eof; + } + else if(nz_deadline + VLC_TS_0 > output->getPCR()) /* need to read more */ + { return Stream::status_buffering; + } } if(send) output->sendToDecoder(nz_deadline); + return Stream::status_demuxed; } @@ -487,6 +492,19 @@ bool BaseStreamOutput::isSelected() const return b_selected; } +bool BaseStreamOutput::isEmpty() const +{ + bool b_empty = true; + vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock)); + std::list<Demuxed *>::const_iterator it; + for(it=queues.begin(); it!=queues.end() && b_empty; ++it) + { + b_empty = !(*it)->p_queue; + } + vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock)); + return b_empty; +} + void BaseStreamOutput::sendToDecoder(mtime_t nzdeadline) { vlc_mutex_lock(&lock); diff --git a/modules/demux/adaptative/Streams.hpp b/modules/demux/adaptative/Streams.hpp index ff7fb3b..1c0be95 100644 --- a/modules/demux/adaptative/Streams.hpp +++ b/modules/demux/adaptative/Streams.hpp @@ -114,6 +114,7 @@ namespace adaptative virtual bool seekAble() const = 0; virtual void setPosition(mtime_t) = 0; virtual void sendToDecoder(mtime_t) = 0; + virtual bool isEmpty() const = 0; virtual bool reinitsOnSeek() const = 0; virtual bool switchAllowed() const = 0; virtual bool isSelected() const = 0; @@ -145,6 +146,7 @@ namespace adaptative virtual bool seekAble() const; /* reimpl */ virtual void setPosition(mtime_t); /* reimpl */ virtual void sendToDecoder(mtime_t); /* reimpl */ + virtual bool isEmpty() const; /* reimpl */ virtual bool reinitsOnSeek() const; /* reimpl */ virtual bool switchAllowed() const; /* reimpl */ virtual bool isSelected() const; /* reimpl */ _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
