vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Thu May 7 17:17:27 2015 +0200| [d8a926a2b8fb6b0a94c0be8b19b4fcfcd8cc08aa] | committer: Francois Cartegnie
demux: dash: set SegmentBase as segment itself Fixes playback with single file, simple profile > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d8a926a2b8fb6b0a94c0be8b19b4fcfcd8cc08aa --- modules/demux/adaptative/playlist/SegmentBase.cpp | 3 +- modules/demux/adaptative/playlist/SegmentBase.h | 7 ++- .../adaptative/playlist/SegmentInformation.cpp | 4 ++ modules/demux/dash/mpd/IsoffMainParser.cpp | 49 ++++++-------------- 4 files changed, 26 insertions(+), 37 deletions(-) diff --git a/modules/demux/adaptative/playlist/SegmentBase.cpp b/modules/demux/adaptative/playlist/SegmentBase.cpp index 1900f54..573751c 100644 --- a/modules/demux/adaptative/playlist/SegmentBase.cpp +++ b/modules/demux/adaptative/playlist/SegmentBase.cpp @@ -26,7 +26,8 @@ using namespace adaptative::playlist; -SegmentBase::SegmentBase () : +SegmentBase::SegmentBase(ICanonicalUrl *parent) : + Segment(parent), Initializable(), Indexable() { diff --git a/modules/demux/adaptative/playlist/SegmentBase.h b/modules/demux/adaptative/playlist/SegmentBase.h index be6f41b..f9c55ad 100644 --- a/modules/demux/adaptative/playlist/SegmentBase.h +++ b/modules/demux/adaptative/playlist/SegmentBase.h @@ -27,16 +27,19 @@ #include "Segment.h" #include "SegmentInfoCommon.h" +#include "../tools/Properties.hpp" namespace adaptative { namespace playlist { - class SegmentBase : public Initializable<Segment>, + /* SegmentBase can contain only one segment */ + class SegmentBase : public Segment, + public Initializable<Segment>, public Indexable<Segment> { public: - SegmentBase (); + SegmentBase (ICanonicalUrl *); virtual ~SegmentBase (); }; } diff --git a/modules/demux/adaptative/playlist/SegmentInformation.cpp b/modules/demux/adaptative/playlist/SegmentInformation.cpp index ec4b49a..350d460 100644 --- a/modules/demux/adaptative/playlist/SegmentInformation.cpp +++ b/modules/demux/adaptative/playlist/SegmentInformation.cpp @@ -101,6 +101,10 @@ vector<ISegment *> SegmentInformation::getSegments(SegmentInfoType type) const retSegments.insert( retSegments.end(), list.begin(), list.end() ); } } + else if( segmentBase ) + { + retSegments.push_back( segmentBase ); + } } break; diff --git a/modules/demux/dash/mpd/IsoffMainParser.cpp b/modules/demux/dash/mpd/IsoffMainParser.cpp index d024bad..1ba08be 100644 --- a/modules/demux/dash/mpd/IsoffMainParser.cpp +++ b/modules/demux/dash/mpd/IsoffMainParser.cpp @@ -257,51 +257,32 @@ void IsoffMainParser::setRepresentations (Node *adaptationSetNode, Adaptation } size_t IsoffMainParser::parseSegmentBase(Node * segmentBaseNode, SegmentInformation *info) { - size_t list_count = 0; + SegmentBase *base; - if(!segmentBaseNode) + if(!segmentBaseNode || !(base = new (std::nothrow) SegmentBase(info))) return 0; - else if(segmentBaseNode->hasAttribute("indexRange")) + if(segmentBaseNode->hasAttribute("indexRange")) { - SegmentList *list = new SegmentList(); - Segment *seg; - size_t start = 0, end = 0; if (std::sscanf(segmentBaseNode->getAttributeValue("indexRange").c_str(), "%zu-%zu", &start, &end) == 2) { - IndexSegment *index = new DashIndexSegment(info); - index->setByteRange(start, end); - list->indexSegment.Set(index); - /* index must be before data, so data starts at index end */ - seg = new Segment(info); - seg->setByteRange(end + 1, 0); - } - else - { - seg = new Segment(info); + IndexSegment *index = new (std::nothrow) DashIndexSegment(info); + if(index) + { + index->setByteRange(start, end); + base->indexSegment.Set(index); + /* index must be before data, so data starts at index end */ + base->setByteRange(end + 1, 0); + } } + } - list_count++; - list->addSegment(seg); - info->setSegmentList(list); + parseInitSegment(DOMHelper::getFirstChildElementByName(segmentBaseNode, "Initialization"), base, info); - Node *initSeg = DOMHelper::getFirstChildElementByName(segmentBaseNode, "Initialization"); - if(initSeg) - { - SegmentBase *base = new SegmentBase(); - parseInitSegment(initSeg, base, info); - info->setSegmentBase(base); - } - } - else - { - SegmentBase *base = new SegmentBase(); - parseInitSegment(DOMHelper::getFirstChildElementByName(segmentBaseNode, "Initialization"), base, info); - info->setSegmentBase(base); - } + info->setSegmentBase(base); - return list_count; + return 1; } size_t IsoffMainParser::parseSegmentList(Node * segListNode, SegmentInformation *info) _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits