vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Oct 14 17:56:23 2020 +0200| [961c06b95899d0b9f6246d0e2e7e6860c29eb72e] | committer: Francois Cartegnie
demux: adaptive: simplify subsegments > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=961c06b95899d0b9f6246d0e2e7e6860c29eb72e --- modules/demux/adaptive/playlist/Segment.cpp | 30 +++------------------- modules/demux/adaptive/playlist/Segment.h | 8 ++---- .../demux/adaptive/playlist/SegmentInformation.cpp | 18 ++++++------- modules/demux/adaptive/playlist/SegmentList.cpp | 10 +------- 4 files changed, 16 insertions(+), 50 deletions(-) diff --git a/modules/demux/adaptive/playlist/Segment.cpp b/modules/demux/adaptive/playlist/Segment.cpp index a61b0fc188..fbe171e6a5 100644 --- a/modules/demux/adaptive/playlist/Segment.cpp +++ b/modules/demux/adaptive/playlist/Segment.cpp @@ -213,7 +213,7 @@ void Segment::addSubSegment(SubSegment *subsegment) Segment::~Segment() { - std::vector<SubSegment*>::iterator it; + std::vector<ISegment*>::iterator it; for(it=subsegments.begin();it!=subsegments.end();++it) delete *it; } @@ -235,7 +235,7 @@ void Segment::debug(vlc_object_t *obj, int indent) const std::string text(indent, ' '); text.append("Segment"); msg_Dbg(obj, "%s", text.c_str()); - std::vector<SubSegment *>::const_iterator l; + std::vector<ISegment *>::const_iterator l; for(l = subsegments.begin(); l != subsegments.end(); ++l) (*l)->debug(obj, indent + 1); } @@ -256,20 +256,9 @@ Url Segment::getUrlSegment() const } } -std::vector<ISegment*> Segment::subSegments() +std::vector<ISegment*> & Segment::subSegments() { - std::vector<ISegment*> list; - if(!subsegments.empty()) - { - std::vector<SubSegment*>::iterator it; - for(it=subsegments.begin();it!=subsegments.end();++it) - list.push_back(*it); - } - else - { - list.push_back(this); - } - return list; + return subsegments; } InitSegment::InitSegment(ICanonicalUrl *parent) : @@ -305,14 +294,3 @@ Url SubSegment::getUrlSegment() const return getParentUrlSegment(); } -std::vector<ISegment*> SubSegment::subSegments() -{ - std::vector<ISegment*> list; - list.push_back(this); - return list; -} - -void SubSegment::addSubSegment(SubSegment *) -{ - -} diff --git a/modules/demux/adaptive/playlist/Segment.h b/modules/demux/adaptive/playlist/Segment.h index 46b4b131ad..595dcd9592 100644 --- a/modules/demux/adaptive/playlist/Segment.h +++ b/modules/demux/adaptive/playlist/Segment.h @@ -70,8 +70,6 @@ namespace adaptive virtual uint64_t getSequenceNumber() const; virtual bool isTemplate () const; virtual size_t getOffset () const; - virtual std::vector<ISegment*> subSegments () = 0; - virtual void addSubSegment (SubSegment *) = 0; virtual void debug (vlc_object_t *,int = 0) const; virtual bool contains (size_t byte) const; virtual int compare (ISegment *) const; @@ -104,13 +102,13 @@ namespace adaptive virtual SegmentChunk* createChunk(AbstractChunkSource *, BaseRepresentation *); /* impl */ virtual void setSourceUrl( const std::string &url ); virtual Url getUrlSegment() const; /* impl */ - virtual std::vector<ISegment*> subSegments(); + virtual std::vector<ISegment*> & subSegments(); virtual void debug(vlc_object_t *,int = 0) const; virtual void addSubSegment(SubSegment *); static const int CLASSID_SEGMENT = 1; protected: - std::vector<SubSegment *> subsegments; + std::vector<ISegment *> subsegments; Url sourceUrl; int size; }; @@ -135,8 +133,6 @@ namespace adaptive SubSegment(ISegment *, size_t start, size_t end); virtual SegmentChunk* createChunk(AbstractChunkSource *, BaseRepresentation *); /* impl */ virtual Url getUrlSegment() const; /* impl */ - virtual std::vector<ISegment*> subSegments(); - virtual void addSubSegment(SubSegment *); static const int CLASSID_SUBSEGMENT = 4; }; } diff --git a/modules/demux/adaptive/playlist/SegmentInformation.cpp b/modules/demux/adaptive/playlist/SegmentInformation.cpp index 0f70969e8e..6a71601645 100644 --- a/modules/demux/adaptive/playlist/SegmentInformation.cpp +++ b/modules/demux/adaptive/playlist/SegmentInformation.cpp @@ -107,13 +107,8 @@ std::size_t SegmentInformation::getSegments(SegmentInfoType type, std::vector<IS } else if ( segmentList && !segmentList->getSegments().empty() ) { - std::vector<ISegment *>::const_iterator it; - for(it=segmentList->getSegments().begin(); - it!=segmentList->getSegments().end(); ++it) - { - std::vector<ISegment *> list = (*it)->subSegments(); - retSegments.insert( retSegments.end(), list.begin(), list.end() ); - } + std::vector<ISegment *> list = segmentList->getSegments(); + retSegments.insert( retSegments.end(), list.begin(), list.end() ); } else if( segmentBase ) { @@ -401,7 +396,7 @@ static void insertIntoSegment(std::vector<ISegment *> &seglist, size_t start, SubSegment *subsegment = new SubSegment(segment, start, (end != 0) ? end : 0); subsegment->startTime.Set(time); subsegment->duration.Set(duration); - segment->addSubSegment(subsegment); + static_cast<Segment *>(segment)->addSubSegment(subsegment); break; } } @@ -409,8 +404,13 @@ static void insertIntoSegment(std::vector<ISegment *> &seglist, size_t start, void SegmentInformation::SplitUsingIndex(std::vector<SplitPoint> &splitlist) { + SegmentBase *segmentBase = inheritSegmentBase(); + if(!segmentBase) + return; + std::vector<ISegment *> seglist; - getSegments(INFOTYPE_MEDIA, seglist); + seglist.push_back( segmentBase ); + size_t prevstart = 0; stime_t prevtime = 0; diff --git a/modules/demux/adaptive/playlist/SegmentList.cpp b/modules/demux/adaptive/playlist/SegmentList.cpp index 7985e3ee85..3b47867e5f 100644 --- a/modules/demux/adaptive/playlist/SegmentList.cpp +++ b/modules/demux/adaptive/playlist/SegmentList.cpp @@ -135,15 +135,7 @@ void SegmentList::pruneBySegmentNumber(uint64_t tobelownum) bool SegmentList::getSegmentNumberByScaledTime(stime_t time, uint64_t *ret) const { - std::vector<ISegment *> allsubsegments; - std::vector<ISegment *>::const_iterator it; - for(it=segments.begin(); it!=segments.end(); ++it) - { - std::vector<ISegment *> list = (*it)->subSegments(); - allsubsegments.insert( allsubsegments.end(), list.begin(), list.end() ); - } - - return SegmentInfoCommon::getSegmentNumberByScaledTime(allsubsegments, time, ret); + return SegmentInfoCommon::getSegmentNumberByScaledTime(segments, time, ret); } bool SegmentList::getPlaybackTimeDurationBySegmentNumber(uint64_t number, _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
