[vlc-commits] demux: adaptive: add segment change duration event

Francois Cartegnie git at videolan.org
Wed Sep 21 18:52:33 CEST 2016


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Sep 21 16:46:43 2016 +0200| [d0f23a4441207559058baaf893d1043f89d82485] | committer: Francois Cartegnie

demux: adaptive: add segment change duration event

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d0f23a4441207559058baaf893d1043f89d82485
---

 modules/demux/adaptive/SegmentTracker.cpp | 15 +++++++++++++++
 modules/demux/adaptive/SegmentTracker.hpp |  7 +++++++
 2 files changed, 22 insertions(+)

diff --git a/modules/demux/adaptive/SegmentTracker.cpp b/modules/demux/adaptive/SegmentTracker.cpp
index 3146827..168acd9 100644
--- a/modules/demux/adaptive/SegmentTracker.cpp
+++ b/modules/demux/adaptive/SegmentTracker.cpp
@@ -68,6 +68,13 @@ SegmentTrackerEvent::SegmentTrackerEvent(const ID &id, mtime_t current, mtime_t
     u.buffering.id = &id;
 }
 
+SegmentTrackerEvent::SegmentTrackerEvent(const ID &id, mtime_t duration)
+{
+    type = SEGMENT_CHANGE;
+    u.segment.duration = duration;
+    u.segment.id = &id;
+}
+
 SegmentTracker::SegmentTracker(AbstractAdaptationLogic *logic_, BaseAdaptationSet *adaptSet)
 {
     first = true;
@@ -241,6 +248,14 @@ SegmentChunk * SegmentTracker::getNextChunk(bool switch_allowed,
 
     SegmentChunk *chunk = segment->toChunk(next, rep, connManager);
 
+    /* Notify new segment length for stats / logic */
+    if(chunk)
+    {
+        const Timescale timescale = rep->inheritTimescale();
+        notify(SegmentTrackerEvent(rep->getAdaptationSet()->getID(),
+                                   timescale.ToTime(segment->duration.Get())));
+    }
+
     /* We need to check segment/chunk format changes, as we can't rely on representation's (HLS)*/
     if(chunk && format != chunk->getStreamFormat())
     {
diff --git a/modules/demux/adaptive/SegmentTracker.hpp b/modules/demux/adaptive/SegmentTracker.hpp
index fa8e360..e5b6f5a 100644
--- a/modules/demux/adaptive/SegmentTracker.hpp
+++ b/modules/demux/adaptive/SegmentTracker.hpp
@@ -58,6 +58,7 @@ namespace adaptive
             SegmentTrackerEvent(const StreamFormat *);
             SegmentTrackerEvent(const ID &, bool);
             SegmentTrackerEvent(const ID &, mtime_t, mtime_t);
+            SegmentTrackerEvent(const ID &, mtime_t);
             enum
             {
                 DISCONTINUITY,
@@ -65,6 +66,7 @@ namespace adaptive
                 FORMATCHANGE,
                 BUFFERING_STATE,
                 BUFFERING_LEVEL_CHANGE,
+                SEGMENT_CHANGE,
             } type;
             union
             {
@@ -92,6 +94,11 @@ namespace adaptive
                    mtime_t current;
                    mtime_t target;
                } buffering_level;
+               struct
+               {
+                    const ID *id;
+                   mtime_t duration;
+               } segment;
             } u;
     };
 



More information about the vlc-commits mailing list