[vlc-commits] demux: dash: prune expired live timeline elements
Francois Cartegnie
git at videolan.org
Tue Jan 13 15:10:41 CET 2015
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Tue Jan 13 15:10:03 2015 +0100| [e5de71d0643498aa82aba38ddfc4d3cc295ef20f] | committer: Francois Cartegnie
demux: dash: prune expired live timeline elements
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e5de71d0643498aa82aba38ddfc4d3cc295ef20f
---
modules/demux/dash/DASHManager.cpp | 12 +++++++++++-
modules/demux/dash/SegmentTracker.cpp | 8 ++++++++
modules/demux/dash/SegmentTracker.hpp | 1 +
modules/demux/dash/Streams.cpp | 5 +++++
modules/demux/dash/Streams.hpp | 1 +
modules/demux/dash/mpd/MPD.cpp | 6 +++++-
modules/demux/dash/mpd/MPD.h | 2 +-
7 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/modules/demux/dash/DASHManager.cpp b/modules/demux/dash/DASHManager.cpp
index 5652c8a..b6dca19 100644
--- a/modules/demux/dash/DASHManager.cpp
+++ b/modules/demux/dash/DASHManager.cpp
@@ -223,10 +223,20 @@ bool DASHManager::updateMPD()
return false;
}
+ mtime_t minsegmentTime = 0;
+ for(int type=0; type<Streams::count; type++)
+ {
+ if(!streams[type])
+ continue;
+ mtime_t segmentTime = streams[type]->getPosition();
+ if(!minsegmentTime || segmentTime < minsegmentTime)
+ minsegmentTime = segmentTime;
+ }
+
MPD *newmpd = MPDFactory::create(parser.getRootNode(), mpdstream, parser.getProfile());
if(newmpd)
{
- mpd->mergeWith(newmpd);
+ mpd->mergeWith(newmpd, minsegmentTime);
delete newmpd;
}
stream_Delete(mpdstream);
diff --git a/modules/demux/dash/SegmentTracker.cpp b/modules/demux/dash/SegmentTracker.cpp
index 8559dc4..4284647 100644
--- a/modules/demux/dash/SegmentTracker.cpp
+++ b/modules/demux/dash/SegmentTracker.cpp
@@ -108,3 +108,11 @@ bool SegmentTracker::setPosition(mtime_t time, bool tryonly)
}
return false;
}
+
+mtime_t SegmentTracker::getSegmentStart() const
+{
+ if(prevRepresentation)
+ return prevRepresentation->getPlaybackTimeBySegmentNumber(count);
+ else
+ return 0;
+}
diff --git a/modules/demux/dash/SegmentTracker.hpp b/modules/demux/dash/SegmentTracker.hpp
index d76d525..22a35eb 100644
--- a/modules/demux/dash/SegmentTracker.hpp
+++ b/modules/demux/dash/SegmentTracker.hpp
@@ -57,6 +57,7 @@ namespace dash
void resetCounter();
http::Chunk* getNextChunk(Streams::Type);
bool setPosition(mtime_t, bool);
+ mtime_t getSegmentStart() const;
private:
bool initializing;
diff --git a/modules/demux/dash/Streams.cpp b/modules/demux/dash/Streams.cpp
index 9e2ac47..b85c8e3 100644
--- a/modules/demux/dash/Streams.cpp
+++ b/modules/demux/dash/Streams.cpp
@@ -223,6 +223,11 @@ bool Stream::setPosition(mtime_t time, bool tryonly)
return ret;
}
+mtime_t Stream::getPosition() const
+{
+ return segmentTracker->getSegmentStart();
+}
+
AbstractStreamOutput::AbstractStreamOutput(demux_t *demux)
{
realdemux = demux;
diff --git a/modules/demux/dash/Streams.hpp b/modules/demux/dash/Streams.hpp
index 10404f4..e0d3fcc 100644
--- a/modules/demux/dash/Streams.hpp
+++ b/modules/demux/dash/Streams.hpp
@@ -56,6 +56,7 @@ namespace dash
bool seekAble() const;
size_t read(http::HTTPConnectionManager *);
bool setPosition(mtime_t, bool);
+ mtime_t getPosition() const;
private:
http::Chunk *getChunk();
diff --git a/modules/demux/dash/mpd/MPD.cpp b/modules/demux/dash/mpd/MPD.cpp
index f55556f..79499ed 100644
--- a/modules/demux/dash/mpd/MPD.cpp
+++ b/modules/demux/dash/mpd/MPD.cpp
@@ -154,7 +154,7 @@ void MPD::getTimeLinesBoundaries(mtime_t *min, mtime_t *max) const
}
}
-void MPD::mergeWith(MPD *updatedMPD)
+void MPD::mergeWith(MPD *updatedMPD, mtime_t prunebarrier)
{
availabilityEndTime.Set(updatedMPD->availabilityEndTime.Get());
/* Only merge timelines for now */
@@ -166,6 +166,10 @@ void MPD::mergeWith(MPD *updatedMPD)
updatedMPD->periods.at(i)->collectTimelines(&timelinesUpdate);
for(size_t j = 0; j < timelines.size() && j < timelinesUpdate.size(); j++)
+ {
timelines.at(j)->mergeWith(*timelinesUpdate.at(j));
+ if(prunebarrier)
+ timelines.at(j)->prune(prunebarrier);
+ }
}
}
diff --git a/modules/demux/dash/mpd/MPD.h b/modules/demux/dash/mpd/MPD.h
index d3908e1..f6cf5fe 100644
--- a/modules/demux/dash/mpd/MPD.h
+++ b/modules/demux/dash/mpd/MPD.h
@@ -60,7 +60,7 @@ namespace dash
virtual Period* getFirstPeriod();
virtual Period* getNextPeriod(Period *period);
- void mergeWith(MPD *);
+ void mergeWith(MPD *, mtime_t = 0);
void getTimeLinesBoundaries(mtime_t *, mtime_t *) const;
Property<time_t> duration;
More information about the vlc-commits
mailing list