vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Jun  8 
18:09:05 2016 +0200| [e67651833d800e7eee3f35fc411965d64fa4b16e] | committer: 
Francois Cartegnie

demux: adaptive: add duration when splitting using index

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

 modules/demux/adaptive/playlist/SegmentInformation.cpp |   14 +++++++++-----
 modules/demux/adaptive/playlist/SegmentInformation.hpp |    1 +
 modules/demux/dash/mp4/IndexReader.cpp                 |    3 ++-
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/modules/demux/adaptive/playlist/SegmentInformation.cpp 
b/modules/demux/adaptive/playlist/SegmentInformation.cpp
index 018a4f8..e1a65a0 100644
--- a/modules/demux/adaptive/playlist/SegmentInformation.cpp
+++ b/modules/demux/adaptive/playlist/SegmentInformation.cpp
@@ -477,7 +477,7 @@ void 
SegmentInformation::setSegmentTemplate(MediaSegmentTemplate *templ)
 }
 
 static void insertIntoSegment(std::vector<ISegment *> &seglist, size_t start,
-                              size_t end, stime_t time)
+                              size_t end, stime_t time, stime_t duration)
 {
     std::vector<ISegment *>::iterator segIt;
     for(segIt = seglist.begin(); segIt < seglist.end(); ++segIt)
@@ -488,6 +488,7 @@ static void insertIntoSegment(std::vector<ISegment *> 
&seglist, size_t start,
         {
             SubSegment *subsegment = new SubSegment(segment, start, (end != 0) 
? end : 0);
             subsegment->startTime.Set(time);
+            subsegment->duration.Set(duration);
             segment->addSubSegment(subsegment);
             break;
         }
@@ -502,7 +503,7 @@ void 
SegmentInformation::SplitUsingIndex(std::vector<SplitPoint> &splitlist)
     stime_t prevtime = 0;
     const uint64_t i_timescale = inheritTimescale();
 
-    SplitPoint split = {0,0};
+    SplitPoint split = {0,0,0};
     std::vector<SplitPoint>::const_iterator splitIt;
     for(splitIt = splitlist.begin(); splitIt < splitlist.end(); ++splitIt)
     {
@@ -510,7 +511,8 @@ void 
SegmentInformation::SplitUsingIndex(std::vector<SplitPoint> &splitlist)
         if(splitIt != splitlist.begin())
         {
             /* do previous splitpoint */
-            insertIntoSegment(seglist, prevstart, split.offset - 1, prevtime);
+            const stime_t duration = (split.duration * i_timescale / 
CLOCK_FREQ);
+            insertIntoSegment(seglist, prevstart, split.offset - 1, prevtime, 
duration);
         }
         prevstart = split.offset;
         prevtime = split.time * i_timescale / CLOCK_FREQ;
@@ -518,11 +520,13 @@ void 
SegmentInformation::SplitUsingIndex(std::vector<SplitPoint> &splitlist)
 
     if(splitlist.size() == 1)
     {
-        insertIntoSegment(seglist, prevstart, 0, prevtime);
+        const stime_t duration = (split.duration * i_timescale / CLOCK_FREQ);
+        insertIntoSegment(seglist, prevstart, 0, prevtime, duration);
     }
     else if(splitlist.size() > 1)
     {
-        insertIntoSegment(seglist, prevstart, split.offset - 1, prevtime);
+        const stime_t duration = (split.duration * i_timescale / CLOCK_FREQ);
+        insertIntoSegment(seglist, prevstart, split.offset - 1, prevtime, 
duration);
     }
 }
 
diff --git a/modules/demux/adaptive/playlist/SegmentInformation.hpp 
b/modules/demux/adaptive/playlist/SegmentInformation.hpp
index a5c97f6..859af00 100644
--- a/modules/demux/adaptive/playlist/SegmentInformation.hpp
+++ b/modules/demux/adaptive/playlist/SegmentInformation.hpp
@@ -63,6 +63,7 @@ namespace adaptive
                     public:
                         size_t offset;
                         mtime_t time;
+                        mtime_t duration;
                 };
                 void SplitUsingIndex(std::vector<SplitPoint>&);
 
diff --git a/modules/demux/dash/mp4/IndexReader.cpp 
b/modules/demux/dash/mp4/IndexReader.cpp
index 92a2727..d539d22 100644
--- a/modules/demux/dash/mp4/IndexReader.cpp
+++ b/modules/demux/dash/mp4/IndexReader.cpp
@@ -52,8 +52,9 @@ bool IndexReader::parseIndex(block_t *p_block, 
BaseRepresentation *rep, uint64_t
         {
             splitlist.push_back(point);
             point.offset += sidx->p_items[i].i_referenced_size;
-            point.time += CLOCK_FREQ * sidx->p_items[i].i_subsegment_duration /
+            point.duration = CLOCK_FREQ * 
sidx->p_items[i].i_subsegment_duration /
                     sidx->i_timescale;
+            point.time += point.duration;
         }
         rep->SplitUsingIndex(splitlist);
         rep->getPlaylist()->debug();

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to