moving MPDFetching to MultimediaManager class, DASHReceiver might have two instances... 32/7732/1
authorJacques Samain <[email protected]>
Mon, 24 Jul 2017 13:11:58 +0000 (15:11 +0200)
committerJacques Samain <[email protected]>
Mon, 24 Jul 2017 13:11:58 +0000 (15:11 +0200)
Change-Id: Ifae7dab2db80d8b1a17ff7749cdfb879958cfee1
Signed-off-by: Jacques Samain <[email protected]>
12 files changed:
Input/DASHManager.cpp
Input/DASHManager.h
Input/DASHReceiver.cpp
Input/DASHReceiver.h
Input/ICNConnectionConsumerApi.cpp
Input/IDASHManagerObserver.h
Input/IDASHReceiverObserver.h
Managers/IStreamObserver.h
Managers/MultimediaManager.cpp
Managers/MultimediaManager.h
Managers/MultimediaStream.cpp
Managers/MultimediaStream.h

index b3ff830..0c39335 100644 (file)
@@ -160,7 +160,3 @@ void DASHManager::onBufferStateChanged(BufferType type, uint32_t fillstateInPerc
     if(this->adaptationLogic->isBufferBased())
         this->receiver->OnSegmentBufferStateChanged(fillstateInPercent, maxC);
 }
-void DASHManager::fetchMPD()
-{
-    this->multimediaStream->fetchMPD();
-}
index 4bd301e..3b9bf00 100644 (file)
@@ -61,7 +61,6 @@ public:
     void setTargetDownloadingTime(double);
     MediaObject* getSegment();
     void onBufferStateChanged(BufferType type, uint32_t fillstateInPercent, int maxC);
-    void fetchMPD();
 
 private:
     float                                               beta;
index 1af8ad0..59514e5 100644 (file)
@@ -42,8 +42,7 @@ DASHReceiver::DASHReceiver          (viper::managers::StreamType type, MPDWrappe
     isLooping                   (false),
     beta                        (beta),
     drop                        (drop),
-    bufferingThread             (NULL),
-    mpdFetcherThread            (NULL)
+    bufferingThread             (NULL)
 {
     readMax = 32768;
     readBuffer = (uint8_t*)malloc(sizeof(uint8_t)*readMax);
@@ -96,15 +95,6 @@ bool                 DASHReceiver::Start                                             ()
         this->isBuffering = false;
         return false;
     }
-    //if dynamic, set up the fetching loop
-    if(!strcmp(this->mpdWrapper->getType().c_str(), "dynamic"))
-    {
-           this->mpdFetcherThread = createThreadPortable(DoMPDFetching, this);
-           if(this->mpdFetcherThread == NULL)
-           {
-               std::cout << "mpd Fetcher thread is NULL. Need to think of how to handle this?" << std::endl;
-           }
-       }
     return true;
 }
 void DASHReceiver::Stop()
@@ -120,11 +110,6 @@ void DASHReceiver::Stop()
         JoinThread(this->bufferingThread);
         destroyThreadPortable(this->bufferingThread);
     }
-    if(this->mpdFetcherThread != NULL)
-    {
-       JoinThread(this->mpdFetcherThread);
-       destroyThreadPortable(this->mpdFetcherThread);
-    }
 }
 
 MediaObject*   DASHReceiver::GetNextSegment    ()
@@ -351,28 +336,6 @@ void*                       DASHReceiver::DoBuffering               (void *recei
     return NULL;
 }
 
-void*                                  DASHReceiver::DoMPDFetching                             (void* receiver)
-{
-    DASHReceiver* dashReceiver = (DASHReceiver*) receiver;
-    uint32_t currTime = TimeResolver::getCurrentTimeInSec();
-    uint32_t publishedTime = dashReceiver->mpdWrapper->getFetchTime();
-//    To avoid clock synchronisation issues: using fetching time instead of publish time
-//    uint32_t publishedTime = TimeResolver::getUTCDateTimeInSec(dashReceiver->mpdWrapper->getPublishTime());
-    uint32_t period = TimeResolver::getDurationInSec(dashReceiver->mpdWrapper->getMinimumUpdatePeriod());
-   while(dashReceiver->isBuffering)
-    {
-    while(dashReceiver->isBuffering && currTime < publishedTime + period)
-    {
-        usleep(((publishedTime + period) - currTime) * 1000000);
-        currTime = TimeResolver::getCurrentTimeInSec();
-    }
-       dashReceiver->observer->fetchMPD();
-       publishedTime = dashReceiver->mpdWrapper->getFetchTime();
-//     publishedTime = TimeResolver::getUTCDateTimeInSec(dashReceiver->mpdWrapper->getPublishTime());
-       period = TimeResolver::getDurationInSec(dashReceiver->mpdWrapper->getMinimumUpdatePeriod());
-    }
-}
-
 //can Push video to buffer in the renderer
 bool                                   DASHReceiver::CanPush                                   ()
 {
index 9d221ec..ee2df38 100644 (file)
@@ -107,7 +107,6 @@ private:
     IICNConnection                                      *conn;
     IICNConnection                                      *initConn;
     THREAD_HANDLE                                       bufferingThread;
-    THREAD_HANDLE                                       mpdFetcherThread;
     bool                                                isBuffering;
     bool                                                icn;
     double                                              icnAlpha;
@@ -123,7 +122,6 @@ private:
     void DownloadInitSegmentWithoutLock();
     bool InitSegmentExists(int rep);
     static void* DoBuffering(void *receiver);
-    static void* DoMPDFetching(void * data);
 };
 }
 }
index e6715e6..84e210c 100644 (file)
@@ -59,7 +59,7 @@ ICNConnectionConsumerApi::ICNConnectionConsumerApi(double alpha, float beta, flo
        libl4::transport::ConsumerSocket &c = this->hTTPClientConnection->getConsumer();
     bool configFile = false;
     //CHECK if we are not going to override the configuration file. (if !autotune)
-    if(FILE *fp = fopen("/usr/local/etc/hicn-consumer.conf", "r"))
+    if(FILE *fp = fopen("/usr/etc/consumer.conf", "r"))
     {
         fclose(fp);
         configFile = true;
index 57f1572..0f2d95d 100644 (file)
@@ -33,7 +33,6 @@ public:
     virtual void notifyQualityDownloading (uint32_t quality) = 0;
     virtual bool canPush() = 0;
     virtual int         getBufferLevel() = 0;
-    virtual void fetchMPD() = 0;
 };
 }
 }
index f6a2baa..0a334aa 100644 (file)
@@ -28,7 +28,6 @@ public:
     virtual void notifyQualityDownloading(uint32_t quality) = 0;
     virtual bool canPush() = 0;
     virtual int getBufferLevel() = 0;
-    virtual void fetchMPD() = 0;
 };
 }
 }
index 1d628d5..31baca6 100644 (file)
@@ -38,7 +38,6 @@ public:
     virtual void notifyQualityDownloading(uint32_t quality) = 0;
     virtual bool canPush() = 0;
     virtual int  getBufferLevel() = 0;
-    virtual void fetchMPD() = 0;
 };
 }
 }
index 2311846..1806123 100644 (file)
@@ -41,7 +41,8 @@ MultimediaManager::MultimediaManager(ViperGui *viperGui, int segBufSize, std::st
     eos                         (false),
     playing                     (false),
     noDecoding                  (nodecoding),
-    mpdWrapper                  (NULL)
+    mpdWrapper                  (NULL),
+    mpdFetcherThread            (NULL)
 {
     InitializeCriticalSection (&this->monitorMutex);
     InitializeCriticalSection (&this->monitorBufferMutex);
@@ -237,6 +238,15 @@ void MultimediaManager::start(bool icnEnabled, double icnAlpha, uint32_t nextOff
     }
     this->started = true;
     this->playing = true;
+
+    if(!strcmp(this->mpdWrapper->getType().c_str(), "dynamic"))
+    {
+           this->mpdFetcherThread = createThreadPortable(DoMPDFetching, this);
+           if(this->mpdFetcherThread == NULL)
+           {
+               std::cout << "mpd Fetcher thread is NULL. Need to think of how to handle this?" << std::endl;
+           }
+       }
     LeaveCriticalSection(&this->monitorMutex);
 }
 
@@ -255,6 +265,11 @@ void MultimediaManager::stop()
     Debug("VIDEO STOPPED\n");
     this->mpdWrapper->reInit(viper::managers::StreamType::VIDEO);
     this->mpdWrapper->reInit(viper::managers::StreamType::AUDIO);
+    if(this->mpdFetcherThread != NULL)
+    {
+       JoinThread(this->mpdFetcherThread);
+       destroyThreadPortable(this->mpdFetcherThread);
+    }
 }
 
 void MultimediaManager::stopVideo()
@@ -691,3 +706,25 @@ float MultimediaManager::getSegmentDuration()
 {
     return this->segmentDuration;
 }
+
+static void*                                   MultimediaManager::DoMPDFetching                                (void* data)
+{
+    MultimediaManager *manager = (MultimediaManager*) data;
+    uint32_t currTime = TimeResolver::getCurrentTimeInSec();
+    uint32_t publishedTime = manager->mpdWrapper->getFetchTime();
+//    To avoid clock synchronisation issues: using fetching time instead of publish time
+//    uint32_t publishedTime = TimeResolver::getUTCDateTimeInSec(dashReceiver->mpdWrapper->getPublishTime());
+    uint32_t periodUpdate = TimeResolver::getDurationInSec(manager->mpdWrapper->getMinimumUpdatePeriod());
+   while(manager->isStarted())
+    {
+    while(manager->isStarted() && currTime < publishedTime + periodUpdate)
+    {
+        usleep(((publishedTime + periodUpdate) - currTime) * 1000000);
+        currTime = TimeResolver::getCurrentTimeInSec();
+    }
+    manager->fetchMPD();
+       publishedTime = manager->mpdWrapper->getFetchTime();
+//     publishedTime = TimeResolver::getUTCDateTimeInSec(dashReceiver->mpdWrapper->getPublishTime());
+       periodUpdate = TimeResolver::getDurationInSec(manager->mpdWrapper->getMinimumUpdatePeriod());
+    }
+}
index ade2b76..c00ff86 100644 (file)
@@ -106,6 +106,7 @@ private:
     double                                                      frameRate;
     THREAD_HANDLE                                               videoRendererHandle;
     THREAD_HANDLE                                               audioRendererHandle;
+    THREAD_HANDLE                                               mpdFetcherThread;
     bool                                                        isVideoRendering;
     bool                                                        isAudioRendering;
     bool                                                        eos;
@@ -136,6 +137,7 @@ private:
     void                                                        notifyAudioSegmentBufferObservers   (uint32_t fillstateInPercent);
     void                                                        updateMPD                           ();
     void                                                        updateMPDICN                        ();
+    static void*                                                DoMPDFetching                                  (void* manager);
 };
 }
 }
index 86cde35..f70eabf 100644 (file)
@@ -198,11 +198,3 @@ void MultimediaStream::notifyBufferChange(uint32_t bufferfill, int maxC)
 {
     this->dashManager->onBufferStateChanged(libdash::framework::buffer::VIDEO, bufferfill, maxC);
 }
-
-void MultimediaStream::fetchMPD()
-{
-    for(size_t i=0; i < this->observers.size(); i++)
-    {
-       this->observers.at(i)->fetchMPD();
-    }
-}
index 454cca2..52a7ac9 100644 (file)
@@ -75,7 +75,6 @@ public:
     bool isICN();
     void shouldAbort();
     void setTargetDownloadingTime(double);
-    void fetchMPD();
 
 private:
     float                                               beta;