[vlc-commits] demux: adaptative: seek on subsegments by time
Francois Cartegnie
git at videolan.org
Fri May 15 21:29:30 CEST 2015
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri May 15 17:12:44 2015 +0200| [727ef47639dc87cd9ba909b52bccd2f5e6476541] | committer: Francois Cartegnie
demux: adaptative: seek on subsegments by time
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=727ef47639dc87cd9ba909b52bccd2f5e6476541
---
.../adaptative/playlist/SegmentInformation.cpp | 36 ++++++++++++--------
1 file changed, 21 insertions(+), 15 deletions(-)
diff --git a/modules/demux/adaptative/playlist/SegmentInformation.cpp b/modules/demux/adaptative/playlist/SegmentInformation.cpp
index 3200b9a..e8b2ee8 100644
--- a/modules/demux/adaptative/playlist/SegmentInformation.cpp
+++ b/modules/demux/adaptative/playlist/SegmentInformation.cpp
@@ -171,26 +171,32 @@ ISegment * SegmentInformation::getSegment(SegmentInfoType type, uint64_t pos) co
bool SegmentInformation::getSegmentNumberByTime(mtime_t time, uint64_t *ret) const
{
- SegmentList *segList;
MediaSegmentTemplate *mediaTemplate;
- uint64_t timescale = 1;
- mtime_t duration = 0;
-
if( (mediaTemplate = inheritSegmentTemplate()) )
{
- timescale = mediaTemplate->inheritTimescale();
- duration = mediaTemplate->duration.Get();
- }
- else if ( (segList = inheritSegmentList()) )
- {
- timescale = segList->inheritTimescale();
- duration = segList->duration.Get();
+ uint64_t timescale = mediaTemplate->inheritTimescale();
+ mtime_t duration = mediaTemplate->duration.Get();
+ if(duration)
+ {
+ *ret = time / (CLOCK_FREQ * duration / timescale);
+ return true;
+ }
}
-
- if(duration)
+ else
{
- *ret = time / (CLOCK_FREQ * duration / timescale);
- return true;
+ const std::vector<ISegment *> segments = getSegments(INFOTYPE_MEDIA);
+ std::vector<ISegment *>::const_iterator it;
+ *ret = 0;
+ for(it = segments.begin(); it != segments.end(); ++it)
+ {
+ if((*it)->startTime.Get() > VLC_TS_INVALID &&
+ (*it)->startTime.Get() > time &&
+ it != segments.begin())
+ {
+ return true;
+ }
+ (*ret)++;
+ }
}
return false;
More information about the vlc-commits
mailing list