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
