vlc | branch: master | Francois Cartegnie <[email protected]> | Fri May 24 17:11:05 2019 +0200| [aa63b8cdea58b6d68c0717dbe1a9e51afdc7393d] | committer: Francois Cartegnie
demux: smooth: don't create empty segments list just for init > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=aa63b8cdea58b6d68c0717dbe1a9e51afdc7393d --- .../demux/adaptive/playlist/SegmentInformation.hpp | 2 +- modules/demux/smooth/playlist/Parser.cpp | 89 +++++++++++----------- modules/demux/smooth/playlist/Representation.cpp | 10 +++ modules/demux/smooth/playlist/Representation.hpp | 4 +- 4 files changed, 57 insertions(+), 48 deletions(-) diff --git a/modules/demux/adaptive/playlist/SegmentInformation.hpp b/modules/demux/adaptive/playlist/SegmentInformation.hpp index 2dbedbf6f8..7970ce0e83 100644 --- a/modules/demux/adaptive/playlist/SegmentInformation.hpp +++ b/modules/demux/adaptive/playlist/SegmentInformation.hpp @@ -93,7 +93,7 @@ namespace adaptive protected: std::size_t getAllSegments(std::vector<ISegment *> &) const; - std::size_t getSegments(SegmentInfoType, std::vector<ISegment *>&) const; + virtual std::size_t getSegments(SegmentInfoType, std::vector<ISegment *>&) const; std::vector<SegmentInformation *> childs; SegmentInformation * getChildByID( const ID & ); SegmentInformation *parent; diff --git a/modules/demux/smooth/playlist/Parser.cpp b/modules/demux/smooth/playlist/Parser.cpp index 85c8d76cfc..ffbe9a63e5 100644 --- a/modules/demux/smooth/playlist/Parser.cpp +++ b/modules/demux/smooth/playlist/Parser.cpp @@ -149,67 +149,64 @@ static void ParseQualityLevel(BaseAdaptationSet *adaptSet, Node *qualNode, const if(rep) { rep->setID(ID(id)); - SegmentList *segmentList = new (std::nothrow) SegmentList(rep); - if(segmentList) - { - if(qualNode->hasAttribute("Bitrate")) - rep->setBandwidth(Integer<uint64_t>(qualNode->getAttributeValue("Bitrate"))); - if(qualNode->hasAttribute("MaxWidth")) - rep->setWidth(Integer<uint64_t>(qualNode->getAttributeValue("MaxWidth"))); - else if(qualNode->hasAttribute("Width")) - rep->setWidth(Integer<uint64_t>(qualNode->getAttributeValue("Width"))); + if(qualNode->hasAttribute("Bitrate")) + rep->setBandwidth(Integer<uint64_t>(qualNode->getAttributeValue("Bitrate"))); - if(qualNode->hasAttribute("MaxHeight")) - rep->setHeight(Integer<uint64_t>(qualNode->getAttributeValue("MaxHeight"))); - else if(qualNode->hasAttribute("Height")) - rep->setHeight(Integer<uint64_t>(qualNode->getAttributeValue("Height"))); + if(qualNode->hasAttribute("MaxWidth")) + rep->setWidth(Integer<uint64_t>(qualNode->getAttributeValue("MaxWidth"))); + else if(qualNode->hasAttribute("Width")) + rep->setWidth(Integer<uint64_t>(qualNode->getAttributeValue("Width"))); - if(qualNode->hasAttribute("FourCC")) - rep->addCodecs(qualNode->getAttributeValue("FourCC")); + if(qualNode->hasAttribute("MaxHeight")) + rep->setHeight(Integer<uint64_t>(qualNode->getAttributeValue("MaxHeight"))); + else if(qualNode->hasAttribute("Height")) + rep->setHeight(Integer<uint64_t>(qualNode->getAttributeValue("Height"))); - ForgedInitSegment *initSegment = new (std::nothrow) - ForgedInitSegment(segmentList, type, - adaptSet->inheritTimescale(), - adaptSet->getPlaylist()->duration.Get()); - if(initSegment) - { - initSegment->setTrackID(trackid); + if(qualNode->hasAttribute("FourCC")) + rep->addCodecs(qualNode->getAttributeValue("FourCC")); + + ForgedInitSegment *initSegment = new (std::nothrow) + ForgedInitSegment(rep, type, + adaptSet->inheritTimescale(), + adaptSet->getPlaylist()->duration.Get()); + if(initSegment) + { + initSegment->setTrackID(trackid); + + if(!adaptSet->getLang().empty()) + initSegment->setLanguage(adaptSet->getLang()); - if(!adaptSet->getLang().empty()) - initSegment->setLanguage(adaptSet->getLang()); + if(rep->getWidth() > 0 && rep->getHeight() > 0) + initSegment->setVideoSize(rep->getWidth(), rep->getHeight()); - if(rep->getWidth() > 0 && rep->getHeight() > 0) - initSegment->setVideoSize(rep->getWidth(), rep->getHeight()); + if(qualNode->hasAttribute("FourCC")) + initSegment->setFourCC(qualNode->getAttributeValue("FourCC")); - if(qualNode->hasAttribute("FourCC")) - initSegment->setFourCC(qualNode->getAttributeValue("FourCC")); + if(qualNode->hasAttribute("PacketSize")) + initSegment->setPacketSize(Integer<uint16_t>(qualNode->getAttributeValue("PacketSize"))); - if(qualNode->hasAttribute("PacketSize")) - initSegment->setPacketSize(Integer<uint16_t>(qualNode->getAttributeValue("PacketSize"))); + if(qualNode->hasAttribute("Channels")) + initSegment->setChannels(Integer<uint16_t>(qualNode->getAttributeValue("Channels"))); - if(qualNode->hasAttribute("Channels")) - initSegment->setChannels(Integer<uint16_t>(qualNode->getAttributeValue("Channels"))); + if(qualNode->hasAttribute("SamplingRate")) + initSegment->setSamplingRate(Integer<uint32_t>(qualNode->getAttributeValue("SamplingRate"))); - if(qualNode->hasAttribute("SamplingRate")) - initSegment->setSamplingRate(Integer<uint32_t>(qualNode->getAttributeValue("SamplingRate"))); + if(qualNode->hasAttribute("BitsPerSample")) + initSegment->setBitsPerSample(Integer<uint32_t>(qualNode->getAttributeValue("BitsPerSample"))); - if(qualNode->hasAttribute("BitsPerSample")) - initSegment->setBitsPerSample(Integer<uint32_t>(qualNode->getAttributeValue("BitsPerSample"))); + if(qualNode->hasAttribute("CodecPrivateData")) + initSegment->setCodecPrivateData(qualNode->getAttributeValue("CodecPrivateData")); - if(qualNode->hasAttribute("CodecPrivateData")) - initSegment->setCodecPrivateData(qualNode->getAttributeValue("CodecPrivateData")); + if(qualNode->hasAttribute("AudioTag")) + initSegment->setAudioTag(Integer<uint16_t>(qualNode->getAttributeValue("AudioTag"))); - if(qualNode->hasAttribute("AudioTag")) - initSegment->setAudioTag(Integer<uint16_t>(qualNode->getAttributeValue("AudioTag"))); + if(qualNode->hasAttribute("WaveFormatEx")) + initSegment->setWaveFormatEx(qualNode->getAttributeValue("WaveFormatEx")); - if(qualNode->hasAttribute("WaveFormatEx")) - initSegment->setWaveFormatEx(qualNode->getAttributeValue("WaveFormatEx")); + initSegment->setSourceUrl("forged://"); - initSegment->setSourceUrl("forged://"); - segmentList->initialisationSegment.Set(initSegment); - } - rep->appendSegmentList(segmentList); + rep->initialisationSegment.Set(initSegment); adaptSet->addRepresentation(rep); } diff --git a/modules/demux/smooth/playlist/Representation.cpp b/modules/demux/smooth/playlist/Representation.cpp index cbae08ed56..9021de5c5c 100644 --- a/modules/demux/smooth/playlist/Representation.cpp +++ b/modules/demux/smooth/playlist/Representation.cpp @@ -43,6 +43,16 @@ StreamFormat Representation::getStreamFormat() const return StreamFormat(StreamFormat::MP4); } +std::size_t Representation::getSegments(SegmentInfoType type, std::vector<ISegment *> &retSegments) const +{ + if(type == INFOTYPE_INIT && initialisationSegment.Get()) + { + retSegments.push_back(initialisationSegment.Get()); + return retSegments.size(); + } + return BaseRepresentation::getSegments(type, retSegments); +} + std::string Representation::contextualize(size_t number, const std::string &component, const BaseSegmentTemplate *basetempl) const { diff --git a/modules/demux/smooth/playlist/Representation.hpp b/modules/demux/smooth/playlist/Representation.hpp index ada12f4d42..fb4087aecb 100644 --- a/modules/demux/smooth/playlist/Representation.hpp +++ b/modules/demux/smooth/playlist/Representation.hpp @@ -38,12 +38,14 @@ namespace smooth using namespace adaptive; using namespace adaptive::playlist; - class Representation : public BaseRepresentation + class Representation : public BaseRepresentation, + public Initializable<Segment> { public: Representation(BaseAdaptationSet *); virtual ~Representation (); + virtual std::size_t getSegments(SegmentInfoType, std::vector<ISegment *>&) const; /* reimpl */ virtual StreamFormat getStreamFormat() const; /* reimpl */ /* for segment templates */ _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
