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

Reply via email to