]> git.sesse.net Git - vlc/blobdiff - modules/demux/dash/mpd/IsoffMainParser.cpp
demux: dash: add basic seeking using next segment
[vlc] / modules / demux / dash / mpd / IsoffMainParser.cpp
index 7e9ba65fa3cb31d857d877cae1f8f502be8674ab..ed5aea84640d86214415df69c5218fafc8bb0699 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "IsoffMainParser.h"
 #include "SegmentTemplate.h"
-#include "SegmentInfoDefault.h"
 #include "ProgramInformation.h"
 #include "xml/DOMHelper.h"
 #include <vlc_strings.h>
@@ -271,12 +270,19 @@ void IsoffMainParser::parseSegmentBase(Node * segmentBaseNode, SegmentInformatio
 size_t IsoffMainParser::parseSegmentList(Node * segListNode, SegmentInformation *info)
 {
     size_t total = 0;
+    mtime_t totaltime = 0;
     if(segListNode)
     {
         std::vector<Node *> segments = DOMHelper::getElementByTagName(segListNode, "SegmentURL", false);
         SegmentList *list;
         if(!segments.empty() && (list = new (std::nothrow) SegmentList()))
         {
+            if(segListNode->hasAttribute("duration"))
+                list->setDuration(Integer<mtime_t>(segListNode->getAttributeValue("duration")));
+
+            if(segListNode->hasAttribute("timescale"))
+                list->timescale.Set(Integer<uint64_t>(segListNode->getAttributeValue("timescale")));
+
             std::vector<Node *>::const_iterator it;
             for(it = segments.begin(); it != segments.end(); it++)
             {
@@ -298,6 +304,12 @@ size_t IsoffMainParser::parseSegmentList(Node * segListNode, SegmentInformation
                     seg->setByteRange(atoi(range.substr(0, pos).c_str()), atoi(range.substr(pos + 1, range.size()).c_str()));
                 }
 
+                if(totaltime || list->getDuration())
+                {
+                    seg->startTime.Set(totaltime);
+                    totaltime += list->getDuration();
+                }
+
                 list->addSegment(seg);
                 total++;
             }