]> git.sesse.net Git - vlc/commitdiff
demux: dash: enable passive seek for templates as well
authorFrancois Cartegnie <fcvlcdev@free.fr>
Sat, 3 Jan 2015 20:16:08 +0000 (21:16 +0100)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Sat, 3 Jan 2015 20:18:53 +0000 (21:18 +0100)
modules/demux/dash/mpd/SegmentInformation.cpp

index 8bbc2d62b088d74c2a8ad0452d0656d5f585b20c..7b74359be61cb1676a8a78538ae3d6e1d982e412 100644 (file)
@@ -159,15 +159,29 @@ ISegment * SegmentInformation::getSegment(SegmentInfoType type, uint64_t pos) co
 
 bool SegmentInformation::getSegmentNumberByTime(mtime_t time, uint64_t *ret) const
 {
-    SegmentList *segList = inheritSegmentList();
-    if ( segList->getDuration() )
+    SegmentList *segList;
+    SegmentTemplate *segTemplate;
+    uint64_t timescale;
+    mtime_t duration = 0;
+    if ( (segList = inheritSegmentList()) )
+    {
+        timescale = segList->timescale.Get();
+        duration = segList->getDuration();
+    }
+    else if( (segTemplate = inheritSegmentTemplate(INFOTYPE_MEDIA)) )
+    {
+        timescale = segTemplate->timescale.Get();
+        duration = segTemplate->duration.Get();
+    }
+
+    if(duration)
     {
-        uint64_t timescale = segList->timescale.Get();
         if(!timescale)
-            timescale = getTimescale();
-        *ret = time / (CLOCK_FREQ * segList->getDuration() / timescale);
+            timescale = getTimescale(); /* inherit */
+        *ret = time / (CLOCK_FREQ * duration / timescale);
         return true;
     }
+
     return false;
 }