[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