vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Fri Jan 13 14:20:27 2017 +0100| [849488eee62f72467fe66dc7b4f77efb1343d19b] | committer: Francois Cartegnie
adaptive: dash: handle suggestedPresentationDelay > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=849488eee62f72467fe66dc7b4f77efb1343d19b --- modules/demux/adaptive/playlist/AbstractPlaylist.cpp | 1 + modules/demux/adaptive/playlist/AbstractPlaylist.hpp | 1 + modules/demux/adaptive/playlist/SegmentInformation.cpp | 8 ++++++-- modules/demux/dash/mpd/IsoffMainParser.cpp | 4 ++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/demux/adaptive/playlist/AbstractPlaylist.cpp b/modules/demux/adaptive/playlist/AbstractPlaylist.cpp index fb2b7da..75a3848 100644 --- a/modules/demux/adaptive/playlist/AbstractPlaylist.cpp +++ b/modules/demux/adaptive/playlist/AbstractPlaylist.cpp @@ -45,6 +45,7 @@ AbstractPlaylist::AbstractPlaylist (vlc_object_t *p_object_) : maxSegmentDuration.Set( 0 ); minBufferTime = 0; timeShiftBufferDepth.Set( 0 ); + suggestedPresentationDelay.Set( 0 ); } AbstractPlaylist::~AbstractPlaylist() diff --git a/modules/demux/adaptive/playlist/AbstractPlaylist.hpp b/modules/demux/adaptive/playlist/AbstractPlaylist.hpp index ac69107..51cf19e 100644 --- a/modules/demux/adaptive/playlist/AbstractPlaylist.hpp +++ b/modules/demux/adaptive/playlist/AbstractPlaylist.hpp @@ -68,6 +68,7 @@ namespace adaptive Property<mtime_t> minUpdatePeriod; Property<mtime_t> maxSegmentDuration; Property<mtime_t> timeShiftBufferDepth; + Property<mtime_t> suggestedPresentationDelay; protected: vlc_object_t *p_object; diff --git a/modules/demux/adaptive/playlist/SegmentInformation.cpp b/modules/demux/adaptive/playlist/SegmentInformation.cpp index 69c965f..0fdac94 100644 --- a/modules/demux/adaptive/playlist/SegmentInformation.cpp +++ b/modules/demux/adaptive/playlist/SegmentInformation.cpp @@ -192,11 +192,15 @@ uint64_t SegmentInformation::getLiveStartSegmentNumber(uint64_t def) const /* Else compute, current time and timeshiftdepth based */ else if( mediaSegmentTemplate->duration.Get() ) { - const mtime_t i_buffer_depth = getPlaylist()->timeShiftBufferDepth.Get(); + mtime_t i_delay = getPlaylist()->suggestedPresentationDelay.Get(); + + if( i_delay == 0 || i_delay > getPlaylist()->timeShiftBufferDepth.Get() ) + i_delay = getPlaylist()->timeShiftBufferDepth.Get(); + const uint64_t startnumber = mediaSegmentTemplate->startNumber.Get(); end = mediaSegmentTemplate->getCurrentLiveTemplateNumber(); - const uint64_t count = timescale.ToScaled( i_buffer_depth ) / mediaSegmentTemplate->duration.Get(); + const uint64_t count = timescale.ToScaled( i_delay ) / mediaSegmentTemplate->duration.Get(); if( startnumber + count >= end ) start = startnumber; else diff --git a/modules/demux/dash/mpd/IsoffMainParser.cpp b/modules/demux/dash/mpd/IsoffMainParser.cpp index d9ed049..aa57816 100644 --- a/modules/demux/dash/mpd/IsoffMainParser.cpp +++ b/modules/demux/dash/mpd/IsoffMainParser.cpp @@ -124,6 +124,10 @@ void IsoffMainParser::parseMPDAttributes (MPD *mpd, xml::Node *node) it = attr.find("timeShiftBufferDepth"); if(it != attr.end()) mpd->timeShiftBufferDepth.Set(IsoTime(it->second) * CLOCK_FREQ); + + it = attr.find("suggestedPresentationDelay"); + if(it != attr.end()) + mpd->suggestedPresentationDelay.Set(IsoTime(it->second) * CLOCK_FREQ); } void IsoffMainParser::parsePeriods(MPD *mpd, Node *root) _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits