[vlc-commits] demux: adaptative: seek on subsegments by time

Francois Cartegnie git at videolan.org
Fri May 15 21:29:30 CEST 2015


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri May 15 17:12:44 2015 +0200| [727ef47639dc87cd9ba909b52bccd2f5e6476541] | committer: Francois Cartegnie

demux: adaptative: seek on subsegments by time

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=727ef47639dc87cd9ba909b52bccd2f5e6476541
---

 .../adaptative/playlist/SegmentInformation.cpp     |   36 ++++++++++++--------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/modules/demux/adaptative/playlist/SegmentInformation.cpp b/modules/demux/adaptative/playlist/SegmentInformation.cpp
index 3200b9a..e8b2ee8 100644
--- a/modules/demux/adaptative/playlist/SegmentInformation.cpp
+++ b/modules/demux/adaptative/playlist/SegmentInformation.cpp
@@ -171,26 +171,32 @@ ISegment * SegmentInformation::getSegment(SegmentInfoType type, uint64_t pos) co
 
 bool SegmentInformation::getSegmentNumberByTime(mtime_t time, uint64_t *ret) const
 {
-    SegmentList *segList;
     MediaSegmentTemplate *mediaTemplate;
-    uint64_t timescale = 1;
-    mtime_t duration = 0;
-
     if( (mediaTemplate = inheritSegmentTemplate()) )
     {
-        timescale = mediaTemplate->inheritTimescale();
-        duration = mediaTemplate->duration.Get();
-    }
-    else if ( (segList = inheritSegmentList()) )
-    {
-        timescale = segList->inheritTimescale();
-        duration = segList->duration.Get();
+        uint64_t timescale = mediaTemplate->inheritTimescale();
+        mtime_t duration = mediaTemplate->duration.Get();
+        if(duration)
+        {
+            *ret = time / (CLOCK_FREQ * duration / timescale);
+            return true;
+        }
     }
-
-    if(duration)
+    else
     {
-        *ret = time / (CLOCK_FREQ * duration / timescale);
-        return true;
+        const std::vector<ISegment *> segments = getSegments(INFOTYPE_MEDIA);
+        std::vector<ISegment *>::const_iterator it;
+        *ret = 0;
+        for(it = segments.begin(); it != segments.end(); ++it)
+        {
+            if((*it)->startTime.Get() > VLC_TS_INVALID &&
+               (*it)->startTime.Get() > time &&
+                it != segments.begin())
+            {
+                return true;
+            }
+            (*ret)++;
+        }
     }
 
     return false;



More information about the vlc-commits mailing list