[vlc-devel] [PATCH 3/7] dash: added bufferobserver to adaptationlogic
Hugo Beauzée-Luyssen
beauze.h at gmail.com
Mon Feb 20 18:37:22 CET 2012
On Mon, Feb 20, 2012 at 1:49 PM, <Christopher at mailsrv.uni-klu.ac.at> wrote:
> 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
Applied,
Best regards,
--
Hugo Beauzée-Luyssen
More information about the vlc-devel
mailing list