[vlc-devel] [PATCH 3/7] dash: added bufferobserver to adaptationlogic

Christopher at mailsrv.uni-klu.ac.at Christopher at mailsrv.uni-klu.ac.at
Mon Feb 20 13:49:21 CET 2012


From: Christopher Mueller <christopher.mueller at itec.aau.at>

---
 modules/stream_filter/dash/DASHManager.cpp         |    6 ++++--
 .../adaptationlogic/AbstractAdaptationLogic.cpp    |    9 ++++++++-
 .../dash/adaptationlogic/AbstractAdaptationLogic.h |    3 +++
 .../dash/adaptationlogic/IAdaptationLogic.h        |    3 ++-
 modules/stream_filter/dash/buffer/BlockBuffer.cpp  |    4 +++-
 5 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/modules/stream_filter/dash/DASHManager.cpp b/modules/stream_filter/dash/DASHManager.cpp
index 633bb21..a98e01a 100644
--- a/modules/stream_filter/dash/DASHManager.cpp
+++ b/modules/stream_filter/dash/DASHManager.cpp
@@ -51,10 +51,12 @@ DASHManager::DASHManager    ( HTTPConnectionManager *conManager, MPD *mpd,
     this->adaptationLogic   = AdaptationLogicFactory::create( this->logicType, this->mpdManager, this->stream);
     if ( this->adaptationLogic == NULL )
         return ;
-    this->conManager->attach(this->adaptationLogic);
 
-    this->buffer    = new BlockBuffer(this->stream);
+    this->buffer     = new BlockBuffer(this->stream);
     this->downloader = new DASHDownloader(this->conManager, this->adaptationLogic, this->buffer);
+
+    this->conManager->attach(this->adaptationLogic);
+    this->buffer->attach(this->adaptationLogic);
 }
 DASHManager::~DASHManager   ()
 {
diff --git a/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.cpp b/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.cpp
index 3945a9f..ebd0a74 100644
--- a/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.cpp
+++ b/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.cpp
@@ -36,7 +36,9 @@ AbstractAdaptationLogic::AbstractAdaptationLogic    (IMPDManager *mpdManager, st
                          bpsAvg                     (-1),
                          bpsLastChunk               (0),
                          mpdManager                 (mpdManager),
-                         stream                     (stream)
+                         stream                     (stream),
+                         bufferedMicroSec           (0),
+                         bufferedPercent            (0)
 
 {
 }
@@ -44,6 +46,11 @@ AbstractAdaptationLogic::~AbstractAdaptationLogic   ()
 {
 }
 
+void AbstractAdaptationLogic::bufferLevelChanged     (mtime_t bufferedMicroSec, int bufferedPercent)
+{
+    this->bufferedMicroSec = bufferedMicroSec;
+    this->bufferedPercent  = bufferedPercent;
+}
 void AbstractAdaptationLogic::downloadRateChanged    (long bpsAvg, long bpsLastChunk)
 {
     this->bpsAvg        = bpsAvg;
diff --git a/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.h b/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.h
index 7c46d14..97be099 100644
--- a/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.h
+++ b/modules/stream_filter/dash/adaptationlogic/AbstractAdaptationLogic.h
@@ -48,6 +48,7 @@ namespace dash
                 virtual ~AbstractAdaptationLogic    ();
 
                 virtual void                downloadRateChanged     (long bpsAvg, long bpsLastChunk);
+                virtual void                bufferLevelChanged      (mtime_t bufferedMicroSec, int bufferedPercent);
 
                 long                        getBpsAvg               () const;
                 long                        getBpsLastChunk         () const;
@@ -57,6 +58,8 @@ namespace dash
                 long                    bpsLastChunk;
                 dash::mpd::IMPDManager  *mpdManager;
                 stream_t                *stream;
+                mtime_t                 bufferedMicroSec;
+                int                     bufferedPercent;
         };
     }
 }
diff --git a/modules/stream_filter/dash/adaptationlogic/IAdaptationLogic.h b/modules/stream_filter/dash/adaptationlogic/IAdaptationLogic.h
index 8b11d3a..92b96ed 100644
--- a/modules/stream_filter/dash/adaptationlogic/IAdaptationLogic.h
+++ b/modules/stream_filter/dash/adaptationlogic/IAdaptationLogic.h
@@ -29,12 +29,13 @@
 #include <adaptationlogic/IDownloadRateObserver.h>
 #include <exceptions/EOFException.h>
 #include "mpd/Representation.h"
+#include "buffer/IBufferObserver.h"
 
 namespace dash
 {
     namespace logic
     {
-        class IAdaptationLogic : public IDownloadRateObserver
+        class IAdaptationLogic : public IDownloadRateObserver, public dash::buffer::IBufferObserver
         {
             public:
 
diff --git a/modules/stream_filter/dash/buffer/BlockBuffer.cpp b/modules/stream_filter/dash/buffer/BlockBuffer.cpp
index 7b983d6..2b10358 100644
--- a/modules/stream_filter/dash/buffer/BlockBuffer.cpp
+++ b/modules/stream_filter/dash/buffer/BlockBuffer.cpp
@@ -105,6 +105,7 @@ int     BlockBuffer::get                  (void *p_data, unsigned int len)
 
     block_GetBytes(&this->buffer, (uint8_t *)p_data, ret);
     block_BytestreamFlush(&this->buffer);
+    this->notify();
 
     vlc_cond_signal(&this->empty);
     vlc_mutex_unlock(&this->monitorMutex);
@@ -128,6 +129,7 @@ void    BlockBuffer::put                  (block_t *block)
     this->sizeBytes     += block->i_buffer;
 
     block_BytestreamPush(&this->buffer, block);
+    this->notify();
 
     vlc_cond_signal(&this->full);
     vlc_mutex_unlock(&this->monitorMutex);
@@ -154,7 +156,7 @@ void    BlockBuffer::attach               (IBufferObserver *observer)
 void    BlockBuffer::notify               ()
 {
     for(size_t i = 0; i < this->bufferObservers.size(); i++)
-        this->bufferObservers.at(i)->bufferLevelChanged(this->sizeMicroSec, this->sizeMicroSec / this->capacityMicroSec);
+        this->bufferObservers.at(i)->bufferLevelChanged(this->sizeMicroSec, ((float)this->sizeMicroSec / this->capacityMicroSec) * 100);
 }
 void    BlockBuffer::reduceBufferMilliSec (size_t bytes)
 {
-- 
1.7.0.4




More information about the vlc-devel mailing list