vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Fri Sep 16 10:43:09 2016 +0200| [c958babfdfb33148177e3989f97529eca959bfea] | committer: Francois Cartegnie
demux: adaptive: add stream buffering state event > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c958babfdfb33148177e3989f97529eca959bfea --- modules/demux/adaptive/SegmentTracker.cpp | 12 ++++++++++++ modules/demux/adaptive/SegmentTracker.hpp | 12 +++++++++++- modules/demux/adaptive/Streams.cpp | 6 ++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/modules/demux/adaptive/SegmentTracker.cpp b/modules/demux/adaptive/SegmentTracker.cpp index e75ed32..2f03b8b 100644 --- a/modules/demux/adaptive/SegmentTracker.cpp +++ b/modules/demux/adaptive/SegmentTracker.cpp @@ -53,6 +53,13 @@ SegmentTrackerEvent::SegmentTrackerEvent(const StreamFormat *fmt) u.format.f = fmt; } +SegmentTrackerEvent::SegmentTrackerEvent(const ID &id, bool enabled) +{ + type = BUFFERING_STATE; + u.buffering.enabled = enabled; + u.buffering.id = &id; +} + SegmentTracker::SegmentTracker(AbstractAdaptationLogic *logic_, BaseAdaptationSet *adaptSet) { first = true; @@ -302,6 +309,11 @@ mtime_t SegmentTracker::getMinAheadTime() const return 0; } +void SegmentTracker::notifyBufferingState(bool enabled) const +{ + notify(SegmentTrackerEvent(adaptationSet->getID(), enabled)); +} + void SegmentTracker::registerListener(SegmentTrackerListenerInterface *listener) { listeners.push_back(listener); diff --git a/modules/demux/adaptive/SegmentTracker.hpp b/modules/demux/adaptive/SegmentTracker.hpp index e85d006..bdc0955 100644 --- a/modules/demux/adaptive/SegmentTracker.hpp +++ b/modules/demux/adaptive/SegmentTracker.hpp @@ -20,13 +20,15 @@ #ifndef SEGMENTTRACKER_HPP #define SEGMENTTRACKER_HPP -#include <StreamFormat.hpp> +#include "StreamFormat.hpp" #include <vlc_common.h> #include <list> namespace adaptive { + class ID; + namespace http { class AbstractConnectionManager; @@ -54,11 +56,13 @@ namespace adaptive SegmentTrackerEvent(SegmentChunk *); SegmentTrackerEvent(BaseRepresentation *, BaseRepresentation *); SegmentTrackerEvent(const StreamFormat *); + SegmentTrackerEvent(const ID &, bool); enum { DISCONTINUITY, SWITCHING, FORMATCHANGE, + BUFFERING_STATE, } type; union { @@ -75,6 +79,11 @@ namespace adaptive { const StreamFormat *f; } format; + struct + { + const ID *id; + bool enabled; + } buffering; } u; }; @@ -98,6 +107,7 @@ namespace adaptive void setPositionByNumber(uint64_t, bool); mtime_t getPlaybackTime() const; /* Current segment start time if selected */ mtime_t getMinAheadTime() const; + void notifyBufferingState(bool) const; void registerListener(SegmentTrackerListenerInterface *); void updateSelected(); diff --git a/modules/demux/adaptive/Streams.cpp b/modules/demux/adaptive/Streams.cpp index be2da33..dcb325b 100644 --- a/modules/demux/adaptive/Streams.cpp +++ b/modules/demux/adaptive/Streams.cpp @@ -23,6 +23,7 @@ #endif #include "Streams.hpp" +#include "logic/AbstractAdaptationLogic.h" #include "http/HTTPConnection.hpp" #include "http/HTTPConnectionManager.h" #include "playlist/BaseRepresentation.h" @@ -77,6 +78,7 @@ bool AbstractStream::init(const StreamFormat &format_, SegmentTracker *tracker, format = format_; segmentTracker = tracker; segmentTracker->registerListener(this); + segmentTracker->notifyBufferingState(true); connManager = conn; return true; } @@ -97,6 +99,8 @@ bool AbstractStream::init(const StreamFormat &format_, SegmentTracker *tracker, AbstractStream::~AbstractStream() { delete currentChunk; + if(segmentTracker) + segmentTracker->notifyBufferingState(false); delete segmentTracker; delete demuxer; @@ -234,6 +238,8 @@ bool AbstractStream::restartDemux() void AbstractStream::setDisabled(bool b) { + if(disabled != b) + segmentTracker->notifyBufferingState(!b); disabled = b; } _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits