diff options
author | Jacques SAMAIN <jsamain+fdio@cisco.com> | 2018-06-01 19:56:33 +0200 |
---|---|---|
committer | Jacques SAMAIN <jsamain+fdio@cisco.com> | 2018-06-04 12:16:30 +0000 |
commit | 872b2e96a111d6da5f821a6dc61b923f9913b3f3 (patch) | |
tree | 9dbae9fb4cf3ed4a35a0698e0cf7f4b446ffeedb /Managers | |
parent | 6120adcbd955c072f560ba3918ed566088374fa0 (diff) |
Several corrections:
*effectively take into account live MPD
*Fix several bugs
Change-Id: I9b925f222653d2d196b09b4e96cb15119ec8af44
Signed-off-by: Jacques SAMAIN <jsamain+fdio@cisco.com>
Diffstat (limited to 'Managers')
-rw-r--r-- | Managers/IStreamObserver.h | 1 | ||||
-rw-r--r-- | Managers/MultimediaManager.cpp | 37 | ||||
-rw-r--r-- | Managers/MultimediaManager.h | 2 | ||||
-rw-r--r-- | Managers/MultimediaStream.cpp | 8 | ||||
-rw-r--r-- | Managers/MultimediaStream.h | 1 |
5 files changed, 11 insertions, 38 deletions
diff --git a/Managers/IStreamObserver.h b/Managers/IStreamObserver.h index 31baca68..1d628d51 100644 --- a/Managers/IStreamObserver.h +++ b/Managers/IStreamObserver.h @@ -38,6 +38,7 @@ public: virtual void notifyQualityDownloading(uint32_t quality) = 0; virtual bool canPush() = 0; virtual int getBufferLevel() = 0; + virtual void fetchMPD() = 0; }; } } diff --git a/Managers/MultimediaManager.cpp b/Managers/MultimediaManager.cpp index 1b759f4b..30f8427a 100644 --- a/Managers/MultimediaManager.cpp +++ b/Managers/MultimediaManager.cpp @@ -41,8 +41,7 @@ MultimediaManager::MultimediaManager(ViperGui *viperGui, int segBufSize, std::st eos (false), playing (false), noDecoding (nodecoding), - mpdWrapper (NULL), - mpdFetcherThread (NULL) + mpdWrapper (NULL) { InitializeCriticalSection (&this->monitorMutex); InitializeCriticalSection (&this->monitorBufferMutex); @@ -239,14 +238,6 @@ 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); } @@ -265,11 +256,6 @@ 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() @@ -706,24 +692,3 @@ float MultimediaManager::getSegmentDuration() return this->segmentDuration; } -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()); - } -} diff --git a/Managers/MultimediaManager.h b/Managers/MultimediaManager.h index c00ff866..ade2b767 100644 --- a/Managers/MultimediaManager.h +++ b/Managers/MultimediaManager.h @@ -106,7 +106,6 @@ private: double frameRate; THREAD_HANDLE videoRendererHandle; THREAD_HANDLE audioRendererHandle; - THREAD_HANDLE mpdFetcherThread; bool isVideoRendering; bool isAudioRendering; bool eos; @@ -137,7 +136,6 @@ private: void notifyAudioSegmentBufferObservers (uint32_t fillstateInPercent); void updateMPD (); void updateMPDICN (); - static void* DoMPDFetching (void* manager); }; } } diff --git a/Managers/MultimediaStream.cpp b/Managers/MultimediaStream.cpp index f70eabfb..86cde35d 100644 --- a/Managers/MultimediaStream.cpp +++ b/Managers/MultimediaStream.cpp @@ -198,3 +198,11 @@ 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(); + } +} diff --git a/Managers/MultimediaStream.h b/Managers/MultimediaStream.h index 52a7ac9d..454cca23 100644 --- a/Managers/MultimediaStream.h +++ b/Managers/MultimediaStream.h @@ -75,6 +75,7 @@ public: bool isICN(); void shouldAbort(); void setTargetDownloadingTime(double); + void fetchMPD(); private: float beta; |