vlc | branch: master | Francois Cartegnie <[email protected]> | Sun Jun 7 14:11:11 2015 +0200| [0771fb4bb24c3920a48642cc4026d5629a3157e6] | committer: Francois Cartegnie
demux: adaptative: compute segment time in segmentlist > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0771fb4bb24c3920a48642cc4026d5629a3157e6 --- .../adaptative/playlist/SegmentInformation.cpp | 10 +++------ modules/demux/adaptative/playlist/SegmentList.cpp | 23 ++++++++++++++++++++ modules/demux/adaptative/playlist/SegmentList.h | 1 + 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/modules/demux/adaptative/playlist/SegmentInformation.cpp b/modules/demux/adaptative/playlist/SegmentInformation.cpp index 725f95d..963d96f 100644 --- a/modules/demux/adaptative/playlist/SegmentInformation.cpp +++ b/modules/demux/adaptative/playlist/SegmentInformation.cpp @@ -223,11 +223,10 @@ mtime_t SegmentInformation::getPlaybackTimeBySegmentNumber(uint64_t number) cons { SegmentList *segList; MediaSegmentTemplate *mediaTemplate; - uint64_t timescale = 1; mtime_t time = 0; if( (mediaTemplate = inheritSegmentTemplate()) ) { - timescale = mediaTemplate->inheritTimescale(); + uint64_t timescale = mediaTemplate->inheritTimescale(); if(mediaTemplate->segmentTimeline.Get()) { time = mediaTemplate->segmentTimeline.Get()-> @@ -237,16 +236,13 @@ mtime_t SegmentInformation::getPlaybackTimeBySegmentNumber(uint64_t number) cons { time = number * mediaTemplate->duration.Get(); } + time = CLOCK_FREQ * time / timescale; } else if ( (segList = inheritSegmentList()) ) { - timescale = segList->inheritTimescale(); - time = number * segList->duration.Get(); + time = segList->getPlaybackTimeBySegmentNumber(number); } - if(time) - time = CLOCK_FREQ * time / timescale; - return time; } diff --git a/modules/demux/adaptative/playlist/SegmentList.cpp b/modules/demux/adaptative/playlist/SegmentList.cpp index a298941..e2486eb 100644 --- a/modules/demux/adaptative/playlist/SegmentList.cpp +++ b/modules/demux/adaptative/playlist/SegmentList.cpp @@ -86,6 +86,29 @@ void SegmentList::pruneBySegmentNumber(uint64_t tobelownum) } } +mtime_t SegmentList::getPlaybackTimeBySegmentNumber(uint64_t number) +{ + if(number < pruned || segments.empty()) + return 0; + + uint64_t timescale = inheritTimescale(); + mtime_t time = segments.at(0)->startTime.Get(); + + if(segments.at(0)->duration.Get()) + { + number -= pruned; + + for(size_t i=0; i<number && i<segments.size(); i++) + time += segments.at(i)->duration.Get(); + } + else + { + time = number * duration.Get(); + } + + return CLOCK_FREQ * time / timescale; +} + std::size_t SegmentList::getOffset() const { return pruned; diff --git a/modules/demux/adaptative/playlist/SegmentList.h b/modules/demux/adaptative/playlist/SegmentList.h index 69e7aef..a32a460 100644 --- a/modules/demux/adaptative/playlist/SegmentList.h +++ b/modules/demux/adaptative/playlist/SegmentList.h @@ -49,6 +49,7 @@ namespace adaptative void addSegment(Segment *seg); void mergeWith(SegmentList *); void pruneBySegmentNumber(uint64_t); + mtime_t getPlaybackTimeBySegmentNumber(uint64_t); std::size_t getOffset() const; private: _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
