demux: dash: add timelines gathering
authorFrancois Cartegnie <fcvlcdev@free.fr>
Sat, 10 Jan 2015 20:21:55 +0000 (21:21 +0100)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 12 Jan 2015 19:21:57 +0000 (20:21 +0100)
modules/demux/dash/mpd/AdaptationSet.cpp
modules/demux/dash/mpd/Period.cpp
modules/demux/dash/mpd/SegmentInformation.cpp
modules/demux/dash/mpd/SegmentInformation.hpp

index 5aa8135..785a84c 100644 (file)
@@ -46,6 +46,7 @@ AdaptationSet::AdaptationSet(Period *period) :
 AdaptationSet::~AdaptationSet   ()
 {
     vlc_delete_all( this->representations );
+    childs.clear();
 }
 
 const std::string& AdaptationSet::getMimeType() const
@@ -88,6 +89,7 @@ const Representation *AdaptationSet::getRepresentationById(const std::string &id
 void                            AdaptationSet::addRepresentation        (Representation *rep)
 {
     this->representations.push_back(rep);
+    childs.push_back(rep);
 }
 
 
index 607f3d0..904107b 100644 (file)
@@ -44,6 +44,7 @@ Period::Period(MPD *mpd) :
 Period::~Period ()
 {
     vlc_delete_all( this->adaptationSets );
+    childs.clear();
 }
 
 const std::vector<AdaptationSet*>&  Period::getAdaptationSets() const
@@ -66,7 +67,10 @@ const std::vector<AdaptationSet*>   Period::getAdaptationSets(Streams::Type type
 void                                Period::addAdaptationSet(AdaptationSet *adaptationSet)
 {
     if ( adaptationSet != NULL )
+    {
         this->adaptationSets.push_back(adaptationSet);
+        childs.push_back(adaptationSet);
+    }
 }
 
 AdaptationSet * Period::getAdaptationSet(Streams::Type type) const
index fc80959..680b1af 100644 (file)
@@ -219,6 +219,16 @@ mtime_t SegmentInformation::getPlaybackTimeBySegmentNumber(uint64_t number) cons
     return time;
 }
 
+void SegmentInformation::collectTimelines(std::vector<SegmentTimeline *> *timelines) const
+{
+    if(mediaSegmentTemplate && mediaSegmentTemplate->segmentTimeline.Get())
+        timelines->push_back(mediaSegmentTemplate->segmentTimeline.Get());
+
+    std::vector<SegmentInformation *>::const_iterator it;
+    for(it = childs.begin(); it != childs.end(); it++)
+        (*it)->collectTimelines(timelines);
+}
+
 bool SegmentInformation::canBitswitch() const
 {
     if(bitswitch_policy == BITSWITCH_INHERIT)
index f099645..ef0de5b 100644 (file)
@@ -39,6 +39,7 @@ namespace dash
         class SegmentBase;
         class SegmentList;
         class SegmentTemplate;
+        class SegmentTimeline;
 
         /* common segment elements for period/adaptset/rep 5.3.9.1,
          * with properties inheritance */
@@ -73,10 +74,12 @@ namespace dash
                 ISegment * getSegment(SegmentInfoType, uint64_t = 0) const;
                 bool getSegmentNumberByTime(mtime_t, uint64_t *) const;
                 mtime_t getPlaybackTimeBySegmentNumber(uint64_t) const;
+                void collectTimelines(std::vector<SegmentTimeline *> *) const;
 
             protected:
                 std::vector<ISegment *> getSegments() const;
                 std::vector<ISegment *> getSegments(SegmentInfoType) const;
+                std::vector<SegmentInformation *> childs;
 
             private:
                 void setSegmentList(SegmentList *);