vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Jun 18 12:30:13 2015 +0200| [2a18a3bf3d6553b5941ded2f3984ac5d3564f86a] | committer: Francois Cartegnie
demux: adaptative: add getFirstDTS > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2a18a3bf3d6553b5941ded2f3984ac5d3564f86a --- modules/demux/adaptative/PlaylistManager.cpp | 13 ++++++++++++ modules/demux/adaptative/PlaylistManager.h | 1 + modules/demux/adaptative/Streams.cpp | 29 ++++++++++++++++++++++++++ modules/demux/adaptative/Streams.hpp | 3 +++ 4 files changed, 46 insertions(+) diff --git a/modules/demux/adaptative/PlaylistManager.cpp b/modules/demux/adaptative/PlaylistManager.cpp index 4caa4be..b6b1657 100644 --- a/modules/demux/adaptative/PlaylistManager.cpp +++ b/modules/demux/adaptative/PlaylistManager.cpp @@ -150,6 +150,19 @@ mtime_t PlaylistManager::getPCR() const return pcr; } +mtime_t PlaylistManager::getFirstDTS() const +{ + mtime_t dts = VLC_TS_INVALID; + for(int type=0; type<StreamTypeCount; type++) + { + if(!streams[type]) + continue; + if(dts == VLC_TS_INVALID || dts > streams[type]->getFirstDTS()) + dts = streams[type]->getFirstDTS(); + } + return dts; +} + int PlaylistManager::getGroup() const { for(int type=0; type<StreamTypeCount; type++) diff --git a/modules/demux/adaptative/PlaylistManager.h b/modules/demux/adaptative/PlaylistManager.h index 6b35094..4cfd5de 100644 --- a/modules/demux/adaptative/PlaylistManager.h +++ b/modules/demux/adaptative/PlaylistManager.h @@ -55,6 +55,7 @@ namespace adaptative Stream::status demux(mtime_t); mtime_t getDuration() const; mtime_t getPCR() const; + mtime_t getFirstDTS() const; int getGroup() const; int esCount() const; bool setPosition(mtime_t); diff --git a/modules/demux/adaptative/Streams.cpp b/modules/demux/adaptative/Streams.cpp index c5a8807..a338c71 100644 --- a/modules/demux/adaptative/Streams.cpp +++ b/modules/demux/adaptative/Streams.cpp @@ -107,6 +107,11 @@ mtime_t Stream::getPCR() const return output->getPCR(); } +mtime_t Stream::getFirstDTS() const +{ + return output->getFirstDTS(); +} + int Stream::getGroup() const { return output->getGroup(); @@ -314,6 +319,30 @@ BaseStreamOutput::~BaseStreamOutput() vlc_mutex_destroy(&lock); } +mtime_t BaseStreamOutput::getFirstDTS() const +{ + mtime_t ret = VLC_TS_INVALID; + vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock)); + std::list<Demuxed *>::const_iterator it; + for(it=queues.begin(); it!=queues.end();++it) + { + const Demuxed *pair = *it; + const block_t *p_block = pair->p_queue; + while( p_block && p_block->i_dts == VLC_TS_INVALID ) + { + p_block = p_block->p_next; + } + + if(p_block) + { + ret = p_block->i_dts; + break; + } + } + vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock)); + return ret; +} + int BaseStreamOutput::esCount() const { return queues.size(); diff --git a/modules/demux/adaptative/Streams.hpp b/modules/demux/adaptative/Streams.hpp index 132da24..29144d6 100644 --- a/modules/demux/adaptative/Streams.hpp +++ b/modules/demux/adaptative/Streams.hpp @@ -65,6 +65,7 @@ namespace adaptative SegmentTracker *, AbstractStreamOutputFactory &); bool isEOF() const; mtime_t getPCR() const; + mtime_t getFirstDTS() const; int getGroup() const; int esCount() const; bool seekAble() const; @@ -95,6 +96,7 @@ namespace adaptative virtual void pushBlock(block_t *) = 0; virtual mtime_t getPCR() const; + virtual mtime_t getFirstDTS() const = 0; virtual int getGroup() const; virtual int esCount() const = 0; virtual bool seekAble() const = 0; @@ -127,6 +129,7 @@ namespace adaptative BaseStreamOutput(demux_t *, const std::string &); virtual ~BaseStreamOutput(); virtual void pushBlock(block_t *); /* reimpl */ + virtual mtime_t getFirstDTS() const; /* reimpl */ virtual int esCount() const; /* reimpl */ virtual bool seekAble() const; /* reimpl */ virtual void setPosition(mtime_t); /* reimpl */ _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
