]> git.sesse.net Git - vlc/commitdiff
stream_filter: dash: add segment start time
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 1 Dec 2014 16:36:47 +0000 (17:36 +0100)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Thu, 18 Dec 2014 20:23:50 +0000 (21:23 +0100)
modules/stream_filter/dash/mpd/Representation.cpp
modules/stream_filter/dash/mpd/Segment.cpp
modules/stream_filter/dash/mpd/Segment.h

index cda86dcebb273405f197158b6e61284a9b934629..ffbe46cfcd5c9ada884a9a87ab1e6e698d18c864 100644 (file)
@@ -231,7 +231,7 @@ MPD * Representation::getMPD() const
 }
 
 static void insertIntoSegment(std::vector<Segment *> &seglist, size_t start,
-                              size_t end)
+                              size_t end, mtime_t time)
 {
     std::vector<Segment *>::iterator segIt;
     for(segIt = seglist.begin(); segIt < seglist.end(); segIt++)
@@ -244,6 +244,7 @@ static void insertIntoSegment(std::vector<Segment *> &seglist, size_t start,
                                                     start + segment->getOffset(),
                                                     end + segment->getOffset());
             segment->addSubSegment(subsegment);
+            segment->setStartTime(time);
             break;
         }
     }
@@ -254,6 +255,7 @@ void Representation::SplitUsingIndex(std::vector<SplitPoint> &splitlist)
     std::vector<Segment *> seglist = segmentList->getSegments();
     std::vector<SplitPoint>::const_iterator splitIt;
     size_t start = 0, end = 0;
+    mtime_t time = 0;
 
     for(splitIt = splitlist.begin(); splitIt < splitlist.end(); splitIt++)
     {
@@ -262,7 +264,8 @@ void Representation::SplitUsingIndex(std::vector<SplitPoint> &splitlist)
         end = split.offset;
         if(splitIt == splitlist.begin() && split.offset == 0)
             continue;
-        insertIntoSegment(seglist, start, end);
+        time = split.time;
+        insertIntoSegment(seglist, start, end, time);
         end++;
     }
 
@@ -270,6 +273,6 @@ void Representation::SplitUsingIndex(std::vector<SplitPoint> &splitlist)
     {
         start = end;
         end = 0;
-        insertIntoSegment(seglist, start, end);
+        insertIntoSegment(seglist, start, end, time);
     }
 }
index 0397c1107819f3ba950531484938e5479dcd89e0..4557dae99991f3f9c195044c5d45cc07b9dc7355 100644 (file)
@@ -25,6 +25,8 @@
 # include "config.h"
 #endif
 
+#define __STDC_CONSTANT_MACROS
+
 #include "Segment.h"
 #include "Representation.h"
 #include "MPD.h"
@@ -38,7 +40,8 @@ using namespace dash::http;
 ISegment::ISegment(const ICanonicalUrl *parent):
     ICanonicalUrl( parent ),
     startByte  (0),
-    endByte    (0)
+    endByte    (0),
+    startTime  (VLC_TS_INVALID)
 {
     debugName = "Segment";
     classId = CLASSID_ISEGMENT;
@@ -81,6 +84,16 @@ void ISegment::setByteRange(size_t start, size_t end)
     endByte   = end;
 }
 
+void ISegment::setStartTime(mtime_t ztime)
+{
+    startTime = ztime;
+}
+
+mtime_t ISegment::getStartTime() const
+{
+    return startTime;
+}
+
 size_t ISegment::getOffset() const
 {
     return startByte;
index 4e09c5dcd083cfc2424802156d848bcd0227269f..ae77aced56446fb57f6c0d831d9318bb23d81f93 100644 (file)
@@ -53,6 +53,8 @@ namespace dash
                 virtual void                            done            ();
                 virtual dash::http::Chunk*              toChunk         ();
                 virtual void                            setByteRange    (size_t start, size_t end);
+                virtual void                            setStartTime    (mtime_t ztime);
+                virtual mtime_t                         getStartTime    () const;
                 virtual size_t                          getOffset       () const;
                 virtual std::vector<ISegment*>          subSegments     () = 0;
                 virtual std::string                     toString        () const;
@@ -65,6 +67,7 @@ namespace dash
             protected:
                 size_t                  startByte;
                 size_t                  endByte;
+                mtime_t                 startTime;
                 std::string             debugName;
                 int                     classId;