Resolving infinite loop issue on live MPD handling 06/7706/1
authorJacques Samain <[email protected]>
Fri, 21 Jul 2017 13:55:25 +0000 (15:55 +0200)
committerJacques Samain <[email protected]>
Fri, 21 Jul 2017 13:55:25 +0000 (15:55 +0200)
Change-Id: I7d667a0d5360a20a95fa5c4072dd15ededc33400
Signed-off-by: Jacques Samain <[email protected]>
MPD/MPDWrapper.cpp
MPD/SegmentTemplateStream.cpp

index 2f66834..20d4aa5 100644 (file)
@@ -46,9 +46,9 @@ IMPD* MPDWrapper::getMPD      ()
 }
 
 void   MPDWrapper::updateMPD   (IMPD* mpd)
-{ 
-//Assumptions here: 
-//    *only one period in the MPD 
+{
+//Assumptions here:
+//    *only one period in the MPD
 //    *only triggered if using SegmentTimeline dynamic MPD
     EnterCriticalSection(&this->monitorMutex);
     this->period = mpd->GetPeriods().at(0);
@@ -75,8 +75,8 @@ void  MPDWrapper::findVideoAdaptationSet      (IMPD* mpd)
                 return;
             }
         }
-        //Not found in the new set of adaptation logc => select the first one 
-        this->videoAdaptationSet = adaptationSets.at(0);    
+        //Not found in the new set of adaptation logc => select the first one
+        this->videoAdaptationSet = adaptationSets.at(0);
     }
     else
     {
@@ -568,7 +568,7 @@ MediaObject*        MPDWrapper::getNextSegment      (viper::managers::StreamType type, bool
 {
     IRepresentation* representation;
     std::map<dash::mpd::IRepresentation *, IRepresentationStream *> *representations;
-    
+
     EnterCriticalSection(&this->monitorMutex);
     switch(type)
     {
@@ -625,17 +625,19 @@ MediaObject*      MPDWrapper::getNextSegment      (viper::managers::StreamType type, bool
                 LeaveCriticalSection(&this->monitorMutex);
                 return NULL;
             }
-            
+
             //Need to update representationStream here as it was updated with the mpd:
             switch(type)
             {
                 case viper::managers::StreamType::AUDIO:
                     representation = this->audioRepresentation;
                     representations = this->audioRepresentations;
+                    segmentNumber = this->audioSegmentNumber;
                     break;
                 case viper::managers::StreamType::VIDEO:
                     representation = this->videoRepresentation;
                     representations = this->videoRepresentations;
+                    segmentNumber = this->videoSegmentNumber;
                     break;
                 default:
                     break;
@@ -646,7 +648,7 @@ MediaObject*        MPDWrapper::getNextSegment      (viper::managers::StreamType type, bool
     seg = representationStream->getMediaSegment(segmentNumber);
     if(seg != NULL)
     {
-        MediaObject *media = new MediaObject(seg, representation, withFeedBack); 
+        MediaObject *media = new MediaObject(seg, representation, withFeedBack);
         segmentNumber++;
         switch(type)
         {
index 409d8e5..ee51cf0 100644 (file)
@@ -219,7 +219,7 @@ uint64_t SegmentTemplateStream::getTime(size_t segmentNumber)
     if(segmentNumber < this->segmentStartTimes.size())
        return this->segmentStartTimes.at(segmentNumber);
     else
-       return 0;
+       return this->segmentStartTimes.at(this->segmentStartTimes.size()-1);
 }
 
 size_t SegmentTemplateStream::getSegmentNumber(uint64_t time)