[vlc-commits] demux: adaptative: add getFirstDTS
Francois Cartegnie
git at videolan.org
Thu Jun 18 17:32:47 CEST 2015
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | 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 */
More information about the vlc-commits
mailing list