vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Apr 25 20:40:34 2019 +0200| [bd6224562fad4d7b5f29ad79761ab278d5e58c68] | committer: Francois Cartegnie
demux: adaptive: use bitstream switch information > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bd6224562fad4d7b5f29ad79761ab278d5e58c68 --- modules/demux/adaptive/Streams.cpp | 8 ++++++-- modules/demux/adaptive/plumbing/Demuxer.cpp | 6 +++--- modules/demux/adaptive/plumbing/Demuxer.hpp | 4 ++-- modules/demux/hls/HLSStreams.cpp | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/modules/demux/adaptive/Streams.cpp b/modules/demux/adaptive/Streams.cpp index acff1dd360..e15892f9ce 100644 --- a/modules/demux/adaptive/Streams.cpp +++ b/modules/demux/adaptive/Streams.cpp @@ -26,6 +26,7 @@ #include "logic/AbstractAdaptationLogic.h" #include "http/HTTPConnection.hpp" #include "http/HTTPConnectionManager.h" +#include "playlist/BaseAdaptationSet.h" #include "playlist/BaseRepresentation.h" #include "playlist/SegmentChunk.hpp" #include "plumbing/SourceStream.hpp" @@ -636,9 +637,12 @@ void AbstractStream::trackerEvent(const SegmentTrackerEvent &event) break; case SegmentTrackerEvent::SWITCHING: - if(demuxer && demuxer->needsRestartOnSwitch() && !inrestart) + if(demuxer && !inrestart) { - needrestart = true; + if(!demuxer->bitstreamSwitchCompatible() || + (event.u.switching.next && + !event.u.switching.next->getAdaptationSet()->isBitSwitchable())) + needrestart = true; } break; diff --git a/modules/demux/adaptive/plumbing/Demuxer.cpp b/modules/demux/adaptive/plumbing/Demuxer.cpp index 7c3e5edc73..3b6772e233 100644 --- a/modules/demux/adaptive/plumbing/Demuxer.cpp +++ b/modules/demux/adaptive/plumbing/Demuxer.cpp @@ -51,9 +51,9 @@ bool AbstractDemuxer::alwaysStartsFromZero() const return b_startsfromzero; } -bool AbstractDemuxer::needsRestartOnSwitch() const +bool AbstractDemuxer::bitstreamSwitchCompatible() const { - return !b_candetectswitches; + return b_candetectswitches; } bool AbstractDemuxer::needsRestartOnEachSegment() const @@ -61,7 +61,7 @@ bool AbstractDemuxer::needsRestartOnEachSegment() const return b_alwaysrestarts; } -void AbstractDemuxer::setCanDetectSwitches( bool b ) +void AbstractDemuxer::setBitstreamSwitchCompatible( bool b ) { b_candetectswitches = b; } diff --git a/modules/demux/adaptive/plumbing/Demuxer.hpp b/modules/demux/adaptive/plumbing/Demuxer.hpp index bc4a507317..e838f0c19f 100644 --- a/modules/demux/adaptive/plumbing/Demuxer.hpp +++ b/modules/demux/adaptive/plumbing/Demuxer.hpp @@ -40,9 +40,9 @@ namespace adaptive virtual void destroy() = 0; bool alwaysStartsFromZero() const; bool needsRestartOnSeek() const; - bool needsRestartOnSwitch() const; + bool bitstreamSwitchCompatible() const; bool needsRestartOnEachSegment() const; - void setCanDetectSwitches(bool); + void setBitstreamSwitchCompatible(bool); void setRestartsOnEachSegment(bool); protected: diff --git a/modules/demux/hls/HLSStreams.cpp b/modules/demux/hls/HLSStreams.cpp index bbeaab0235..7d01f80b55 100644 --- a/modules/demux/hls/HLSStreams.cpp +++ b/modules/demux/hls/HLSStreams.cpp @@ -137,7 +137,7 @@ AbstractDemuxer *HLSStream::newDemux(demux_t *p_realdemux, const StreamFormat &f case StreamFormat::MPEG2TS: ret = new Demuxer(p_realdemux, "ts", out, source); if(ret) - ret->setCanDetectSwitches(false); /* HLS and unique PAT/PMT versions */ + ret->setBitstreamSwitchCompatible(false); /* HLS and unique PAT/PMT versions */ break; case StreamFormat::MP4: _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
