[vlc-devel] [PATCH 06/13] dash: added downloader and bitrate to chunk
Hugo Beauzée-Luyssen
beauze.h at gmail.com
Tue Feb 14 16:13:31 CET 2012
Hi,
On Sat, Feb 11, 2012 at 11:59 AM, <Christopher at mailsrv.uni-klu.ac.at> wrote:
> From: Christopher Mueller <christopher.mueller at itec.aau.at>
>
> ---
> modules/stream_filter/dash/DASHDownloader.cpp | 108 +++++++++++++++++++++++++
> modules/stream_filter/dash/DASHDownloader.h | 61 ++++++++++++++
> modules/stream_filter/dash/Modules.am | 2 +
> modules/stream_filter/dash/http/Chunk.cpp | 8 ++
> modules/stream_filter/dash/http/Chunk.h | 3 +
> 5 files changed, 182 insertions(+), 0 deletions(-)
> create mode 100644 modules/stream_filter/dash/DASHDownloader.cpp
> create mode 100644 modules/stream_filter/dash/DASHDownloader.h
>
> diff --git a/modules/stream_filter/dash/DASHDownloader.cpp b/modules/stream_filter/dash/DASHDownloader.cpp
> new file mode 100644
> index 0000000..1e190bf
> --- /dev/null
> +++ b/modules/stream_filter/dash/DASHDownloader.cpp
> @@ -0,0 +1,108 @@
> +/*
> + * DASHDownloader.h
> + *****************************************************************************
> + * Copyright (C) 2010 - 2011 Klagenfurt University
> + *
> + * Created on: Aug 10, 2010
> + * Authors: Christopher Mueller <christopher.mueller at itec.uni-klu.ac.at>
> + * Christian Timmerer <christian.timmerer at itec.uni-klu.ac.at>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU Lesser General Public License as published
> + * by the Free Software Foundation; either version 2.1 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
> + *****************************************************************************/
> +#ifdef HAVE_CONFIG_H
> +# include "config.h"
> +#endif
> +
> +#include "DASHDownloader.h"
> +
> +using namespace dash;
> +using namespace dash::http;
> +using namespace dash::logic;
> +using namespace dash::exception;
> +using namespace dash::buffer;
> +
> +DASHDownloader::DASHDownloader (HTTPConnectionManager *conManager, IAdaptationLogic *adaptationLogic, BlockBuffer *buffer)
> +{
> + this->t_sys = (thread_sys_t *) malloc(sizeof(thread_sys_t));
> + this->t_sys->conManager = conManager;
> + this->t_sys->adaptationLogic = adaptationLogic;
> + this->t_sys->buffer = buffer;
> +}
> +DASHDownloader::~DASHDownloader ()
> +{
> + std::cout << "Downloader set eof" << std::endl;
> + this->t_sys->buffer->setEOF(true);
> + std::cout << "Downloader try to join" << std::endl;
> + vlc_join(this->dashDLThread, NULL);
> + free(this->t_sys);
> +
> + std::cout << "Downloader thread joined tsys freed" << std::endl;
> +}
> +
> +bool DASHDownloader::start ()
> +{
> + if(vlc_clone(&(this->dashDLThread), download, (void*)this->t_sys, VLC_THREAD_PRIORITY_LOW))
> + return false;
> +
> + return true;
> +}
> +void* DASHDownloader::download (void *thread_sys)
> +{
> + thread_sys_t *t_sys = (thread_sys_t *) thread_sys;
> + HTTPConnectionManager *conManager = t_sys->conManager;
> + IAdaptationLogic *adaptationLogic = t_sys->adaptationLogic;
> + BlockBuffer *buffer = t_sys->buffer;
> + Chunk *currentChunk = NULL;
> + block_t *block = block_Alloc(BLOCKSIZE);
> +
> + do
> + {
> + if(currentChunk == NULL)
> + {
> + try
> + {
> + currentChunk = adaptationLogic->getNextChunk();
> + }
> + catch(EOFException &e)
> + {
> + buffer->setEOF(true);
> + }
> + }
> + else
> + {
> + int ret = conManager->read(currentChunk, block->p_buffer, block->i_buffer);
> + if(ret <= 0)
> + {
> + currentChunk = NULL;
> + }
> + else
> + {
> + block_t *bufBlock = block_Alloc(ret);
I don't understand why you are creating a first block, use it to read,
and then copy its content to another block?!
Why don't you just create a block, use it to read, and append it to
the block chain ?
> + memcpy(bufBlock->p_buffer, block->p_buffer, ret);
> + bufBlock->i_length = (mtime_t)((ret * 8) / ((float)currentChunk->getBitrate() / 1000000));
> +
> + std::cout << "Put block into buffer MilliSeconds: " << bufBlock->i_length
> + << " Bytes: " << bufBlock->i_buffer
> + << " Bitrate: " << currentChunk->getBitrate() << std::endl;
> + buffer->put(bufBlock);
> + }
> + }
> + }while(!buffer->getEOF());
> +
> + std::cout << "Downloader end: " << std::endl;
> + block_Release(block);
> +
> + return NULL;
> +}
> diff --git a/modules/stream_filter/dash/DASHDownloader.h b/modules/stream_filter/dash/DASHDownloader.h
> new file mode 100644
> index 0000000..11ab6d3
> --- /dev/null
> +++ b/modules/stream_filter/dash/DASHDownloader.h
> @@ -0,0 +1,61 @@
> +/*
> + * DASHDownloader.h
> + *****************************************************************************
> + * Copyright (C) 2010 - 2011 Klagenfurt University
> + *
> + * Created on: Aug 10, 2010
> + * Authors: Christopher Mueller <christopher.mueller at itec.uni-klu.ac.at>
> + * Christian Timmerer <christian.timmerer at itec.uni-klu.ac.at>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU Lesser General Public License as published
> + * by the Free Software Foundation; either version 2.1 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
> + *****************************************************************************/
> +
> +#ifndef DASHDOWNLOADER_H_
> +#define DASHDOWNLOADER_H_
> +
> +#include "http/HTTPConnectionManager.h"
> +#include "adaptationlogic/IAdaptationLogic.h"
> +#include "exceptions/EOFException.h"
> +#include "buffer/BlockBuffer.h"
> +
> +#define BLOCKSIZE 32768
> +
> +#include <iostream>
> +
> +namespace dash
> +{
> + struct thread_sys_t
> + {
> + dash::http::HTTPConnectionManager *conManager;
> + logic::IAdaptationLogic *adaptationLogic;
> + buffer::BlockBuffer *buffer;
> + };
> +
> + class DASHDownloader
> + {
> + public:
> + DASHDownloader (http::HTTPConnectionManager *conManager, logic::IAdaptationLogic *adaptationLogic, buffer::BlockBuffer *buffer);
> + virtual ~DASHDownloader ();
> +
> + bool start ();
> + static void* download (void *);
> +
> + private:
> + thread_sys_t *t_sys;
> + vlc_thread_t dashDLThread;
> + };
> +}
> +
> +#endif /* DASHDOWNLOADER_H_ */
> diff --git a/modules/stream_filter/dash/Modules.am b/modules/stream_filter/dash/Modules.am
> index 00fb071..749dc52 100644
> --- a/modules/stream_filter/dash/Modules.am
> +++ b/modules/stream_filter/dash/Modules.am
> @@ -76,6 +76,8 @@ SOURCES_stream_filter_dash = \
> xml/Node.cpp \
> xml/Node.h \
> dash.cpp \
> + DASHDownloader.cpp \
> + DASHDownloader.h \
> DASHManager.cpp \
> DASHManager.h \
> $(NULL)
> diff --git a/modules/stream_filter/dash/http/Chunk.cpp b/modules/stream_filter/dash/http/Chunk.cpp
> index 5de4e9f..445d703 100644
> --- a/modules/stream_filter/dash/http/Chunk.cpp
> +++ b/modules/stream_filter/dash/http/Chunk.cpp
> @@ -72,3 +72,11 @@ void Chunk::setUseByteRange (bool value)
> {
> this->hasByteRange = value;
> }
> +void Chunk::setBitrate (int bitrate)
> +{
> + this->bitrate = bitrate;
> +}
> +int Chunk::getBitrate ()
> +{
> + return this->bitrate;
> +}
> diff --git a/modules/stream_filter/dash/http/Chunk.h b/modules/stream_filter/dash/http/Chunk.h
> index c2020f8..efffa2c 100644
> --- a/modules/stream_filter/dash/http/Chunk.h
> +++ b/modules/stream_filter/dash/http/Chunk.h
> @@ -46,6 +46,8 @@ namespace dash
> void addOptionalUrl (const std::string& url);
> bool useByteRange ();
> void setUseByteRange (bool value);
> + void setBitrate (int bitrate);
> + int getBitrate ();
>
> private:
> std::string url;
> @@ -53,6 +55,7 @@ namespace dash
> int startByte;
> int endByte;
> bool hasByteRange;
> + int bitrate;
>
> };
> }
> --
> 1.7.0.4
>
Best regards,
--
Hugo Beauzée-Luyssen
More information about the vlc-devel
mailing list