[vlc-devel] [PATCH 08/12] dash: add persistentconnection to connectionmanager
Hugo Beauzée-Luyssen
beauze.h at gmail.com
Tue Mar 20 12:01:59 CET 2012
On Tue, Mar 13, 2012 at 5:02 PM, Christopher Müller
<christopher.mueller at itec.uni-klu.ac.at> wrote:
>
>
>> -----Ursprüngliche Nachricht-----
>> Von: Hugo Beauzée-Luyssen [mailto:beauze.h at gmail.com]
>> Gesendet: Dienstag, 13. März 2012 16:32
>> An: Mailing list for VLC media player developers
>> Cc: Christopher Mueller
>> Betreff: Re: [vlc-devel] [PATCH 08/12] dash: add persistentconnection
>> to connectionmanager
>>
>> On Tue, Mar 13, 2012 at 3:18 PM, <Christopher at mailsrv.uni-klu.ac.at>
>> wrote:
>> > From: Christopher Mueller <christopher.mueller at itec.aau.at>
>> >
>> > ---
>> > modules/stream_filter/dash/DASHDownloader.cpp | 40 ++---
>> > modules/stream_filter/dash/DASHDownloader.h | 3 +-
>> > modules/stream_filter/dash/DASHManager.cpp | 8 +-
>> > modules/stream_filter/dash/DASHManager.h | 2 +-
>> > modules/stream_filter/dash/dash.cpp | 21 +--
>> > .../dash/http/HTTPConnectionManager.cpp | 189
>> > ++++++++++---------
>> > .../dash/http/HTTPConnectionManager.h | 46 +++---
>> > 7 files changed, 149 insertions(+), 160 deletions(-)
>> >
>> > diff --git a/modules/stream_filter/dash/DASHDownloader.cpp
>> > b/modules/stream_filter/dash/DASHDownloader.cpp
>> > index 0fd5c92..9388e34 100644
>> > --- a/modules/stream_filter/dash/DASHDownloader.cpp
>> > +++ b/modules/stream_filter/dash/DASHDownloader.cpp
>> > @@ -32,11 +32,11 @@ using namespace dash::http;
>> > using namespace dash::logic;
>> > using namespace dash::buffer;
>> >
>> > -DASHDownloader::DASHDownloader (HTTPConnectionManager *conManager,
>> > IAdaptationLogic *adaptationLogic, BlockBuffer *buffer)
>> > +
>> > +DASHDownloader::DASHDownloader (HTTPConnectionManager *conManager,
>> > +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 ()
>> > @@ -57,42 +57,24 @@ 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);
>> > + int ret = 0;
>> >
>> > do
>> > {
>> > - if(currentChunk == NULL)
>> > - {
>> > - currentChunk = adaptationLogic->getNextChunk();
>> > - if(currentChunk == NULL)
>> > - {
>> > - buffer->setEOF(true);
>> > - }
>> > - }
>> > - else
>> > + ret = conManager->read(block);
>> > + if(ret > 0)
>> > {
>> > - int ret = conManager->read(currentChunk, block-
>> >p_buffer,
>> > block->i_buffer);
>> > - if(ret <= 0)
>> > - {
>> > - currentChunk = NULL;
>> > - }
>> > - else
>> > - {
>> > - block_t *bufBlock = block_Alloc(ret);
>> > - memcpy(bufBlock->p_buffer, block->p_buffer, ret);
>> > -
>> > - if(currentChunk->getBitrate() <= 0)
>> > - currentChunk->setBitrate(CHUNKDEFAULTBITRATE);
>> > + block_t *bufBlock = block_Alloc(ret);
>> > + memcpy(bufBlock->p_buffer, block->p_buffer, ret);
>> >
>> > - bufBlock->i_length = (mtime_t)((ret * 8) /
>> > ((float)currentChunk->getBitrate() / 1000000));
>> > - buffer->put(bufBlock);
>> > - }
>> > + bufBlock->i_length = block->i_length;
>> > + buffer->put(bufBlock);
>> > }
>> > - }while(!buffer->getEOF());
>> > + }while(ret && !buffer->getEOF());
>> >
>> > + buffer->setEOF(true);
>> > block_Release(block);
>> >
>> > return NULL;
>> > diff --git a/modules/stream_filter/dash/DASHDownloader.h
>> > b/modules/stream_filter/dash/DASHDownloader.h
>> > index 1fcdf19..7807ec5 100644
>> > --- a/modules/stream_filter/dash/DASHDownloader.h
>> > +++ b/modules/stream_filter/dash/DASHDownloader.h
>> > @@ -39,14 +39,13 @@ 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);
>> > + DASHDownloader (http::HTTPConnectionManager
>> > + *conManager, buffer::BlockBuffer *buffer);
>> > virtual ~DASHDownloader ();
>> >
>> > bool start (); diff --git
>> > a/modules/stream_filter/dash/DASHManager.cpp
>> > b/modules/stream_filter/dash/DASHManager.cpp
>> > index f649015..bb2f3f0 100644
>> > --- a/modules/stream_filter/dash/DASHManager.cpp
>> > +++ b/modules/stream_filter/dash/DASHManager.cpp
>> > @@ -34,9 +34,8 @@ using namespace dash::logic;
>> > using namespace dash::mpd;
>> > using namespace dash::buffer;
>> >
>> > -DASHManager::DASHManager ( HTTPConnectionManager *conManager, MPD
>> > *mpd,
>> > +DASHManager::DASHManager ( MPD *mpd,
>> > IAdaptationLogic::LogicType type,
>> stream_t *stream) :
>> > - conManager ( conManager ),
>> > currentChunk ( NULL ),
>> > adaptationLogic( NULL ),
>> > logicType ( type ),
>> > @@ -51,8 +50,10 @@ DASHManager::DASHManager (
>> HTTPConnectionManager
>> > *conManager, MPD *mpd,
>> > if ( this->adaptationLogic == NULL )
>> > return ;
>> >
>> > + this->conManager = new
>> > + dash::http::HTTPConnectionManager(this->adaptationLogic,
>> > + this->stream);
>> > +
>> > this->buffer = new BlockBuffer(this->stream);
>> > - this->downloader = new DASHDownloader(this->conManager,
>> > this->adaptationLogic, this->buffer);
>> > + this->downloader = new DASHDownloader(this->conManager,
>> > + this->buffer);
>> >
>> > this->conManager->attach(this->adaptationLogic);
>> > this->buffer->attach(this->adaptationLogic);
>> > @@ -61,6 +62,7 @@ DASHManager::~DASHManager ()
>> > {
>> > delete this->downloader;
>> > delete this->buffer;
>> > + delete this->conManager;
>> > delete this->adaptationLogic;
>> > delete this->mpdManager;
>> > }
>> > diff --git a/modules/stream_filter/dash/DASHManager.h
>> > b/modules/stream_filter/dash/DASHManager.h
>> > index a09e98e..ab76a4a 100644
>> > --- a/modules/stream_filter/dash/DASHManager.h
>> > +++ b/modules/stream_filter/dash/DASHManager.h
>> > @@ -40,7 +40,7 @@ namespace dash
>> > class DASHManager
>> > {
>> > public:
>> > - DASHManager( http::HTTPConnectionManager *conManager,
>> > mpd::MPD *mpd,
>> > + DASHManager( mpd::MPD *mpd,
>> > logic::IAdaptationLogic::LogicType type,
>> > stream_t *stream);
>> > virtual ~DASHManager ();
>> >
>> > diff --git a/modules/stream_filter/dash/dash.cpp
>> > b/modules/stream_filter/dash/dash.cpp
>> > index d1ca988..ee42beb 100644
>> > --- a/modules/stream_filter/dash/dash.cpp
>> > +++ b/modules/stream_filter/dash/dash.cpp
>> > @@ -74,11 +74,10 @@ vlc_module_end ()
>> >
>> >
>> **********************************************************************
>> > *******/
>> > struct stream_sys_t
>> > {
>> > - dash::DASHManager *p_dashManager;
>> > - dash::http::HTTPConnectionManager *p_conManager;
>> > - dash::mpd::MPD *p_mpd;
>> > - int position;
>> > - bool isLive;
>> > + dash::DASHManager *p_dashManager;
>> > + dash::mpd::MPD *p_mpd;
>> > + int position;
>> > + bool isLive;
>> > };
>> >
>> > static int Read (stream_t *p_stream, void *p_buffer,
>> > unsigned int i_len); @@ -114,24 +113,20 @@ static int
>> > Open(vlc_object_t *p_obj)
>> > return VLC_ENOMEM;
>> >
>> > p_sys->p_mpd = mpd;
>> > - dash::http::HTTPConnectionManager *p_conManager =
>> > - new dash::http::HTTPConnectionManager(
>> > p_stream );
>> > - dash::DASHManager*p_dashManager =
>> > - new dash::DASHManager( p_conManager, p_sys->p_mpd,
>> > -
>> > dash::logic::IAdaptationLogic::RateBased, p_stream);
>> > + dash::DASHManager*p_dashManager = new
>> > + dash::DASHManager(p_sys->p_mpd,
>> > +
>> > + dash::logic::IAdaptationLogic::RateBased,
>> > + p_stream);
>> >
>> > if ( p_dashManager->getMpdManager() == NULL ||
>> > p_dashManager->getMpdManager()->getMPD() == NULL ||
>> > p_dashManager->getAdaptionLogic() == NULL ||
>> > p_dashManager->start() == false)
>> > {
>> > - delete p_conManager;
>> > delete p_dashManager;
>> > free( p_sys );
>> > return VLC_EGENERIC;
>> > }
>> > p_sys->p_dashManager = p_dashManager;
>> > - p_sys->p_conManager = p_conManager;
>> > p_sys->position = 0;
>> > p_sys->isLive =
>> > p_dashManager->getMpdManager()->getMPD()->isLive();
>> > p_stream->p_sys = p_sys;
>> > @@ -151,9 +146,7 @@ static void Close(vlc_object_t *p_obj)
>> > stream_t *p_stream = (stream_t*)
>> > p_obj;
>> > stream_sys_t *p_sys =
>> > (stream_sys_t *) p_stream->p_sys;
>> > dash::DASHManager *p_dashManager =
>> > p_sys->p_dashManager;
>> > - dash::http::HTTPConnectionManager *p_conManager =
>> > p_sys->p_conManager;
>> >
>> > - delete(p_conManager);
>> > delete(p_dashManager);
>> > free(p_sys);
>> > }
>> > diff --git
>> a/modules/stream_filter/dash/http/HTTPConnectionManager.cpp
>> > b/modules/stream_filter/dash/http/HTTPConnectionManager.cpp
>> > index c0e18b2..2059d05 100644
>> > --- a/modules/stream_filter/dash/http/HTTPConnectionManager.cpp
>> > +++ b/modules/stream_filter/dash/http/HTTPConnectionManager.cpp
>> > @@ -31,127 +31,136 @@
>> > using namespace dash::http;
>> > using namespace dash::logic;
>> >
>> > -HTTPConnectionManager::HTTPConnectionManager (stream_t *stream)
>> > +const int HTTPConnectionManager::PIPELINE = 80; const
>> > +int HTTPConnectionManager::PIPELINELENGTH = 2; const int
>> > +HTTPConnectionManager::CHUNKDEFAULTBITRATE = 1;
>> > +
>> > +HTTPConnectionManager::HTTPConnectionManager
>> (logic::IAdaptationLogic *adaptationLogic, stream_t *stream) :
>> > + adaptationLogic (adaptationLogic),
>> > + stream (stream),
>> > + chunkCount (0),
>> > + bpsAvg (0),
>> > + bpsLastChunk (0),
>> > + bpsCurrentChunk (0),
>> > + bytesReadSession (0),
>> > + bytesReadChunk (0),
>> > + timeSession (0),
>> > + timeChunk (0)
>> > {
>> > - this->timeSecSession = 0;
>> > - this->bytesReadSession = 0;
>> > - this->timeSecChunk = 0;
>> > - this->bytesReadChunk = 0;
>> > - this->bpsAvg = 0;
>> > - this->bpsLastChunk = 0;
>> > - this->chunkCount = 0;
>> > - this->stream = stream;
>> > }
>> > HTTPConnectionManager::~HTTPConnectionManager ()
>> > {
>> > this->closeAllConnections();
>> > }
>> >
>> > -bool HTTPConnectionManager::closeConnection(
>> > IHTTPConnection *con )
>> > +void
>> > +HTTPConnectionManager::closeAllConnections ()
>> > {
>> > - for(std::map<Chunk*, HTTPConnection *>::iterator it =
>> > this->chunkMap.begin();
>> > - it != this->chunkMap.end(); ++it)
>> > - {
>> > - if( it->second == con )
>> > - {
>> > - delete con;
>> > - this->chunkMap.erase( it );
>> > - return true;
>> > - }
>> > - }
>> > - return false;
>> > + vlc_delete_all(this->connectionPool);
>> > + vlc_delete_all(this->downloadQueue);
>> > }
>> > -
>> > -bool HTTPConnectionManager::closeConnection( Chunk
>> > *chunk ) -{
>> > - HTTPConnection *con = this->chunkMap[chunk];
>> > - bool ret = this->closeConnection(con);
>> > - this->chunkMap.erase(chunk);
>> > - delete(chunk);
>> > - return ret;
>> > -}
>> > -
>> > -void HTTPConnectionManager::closeAllConnections
>> > ()
>> > +int HTTPConnectionManager::read
>>
>> > +(block_t *block)
>> > {
>> > - std::map<Chunk *, HTTPConnection *>::iterator it;
>> > + if(this->downloadQueue.size() == 0)
>> > + if(!this->addChunk(this->adaptationLogic->getNextChunk()))
>> > + return 0;
>> >
>> > - for(it = this->chunkMap.begin(); it != this->chunkMap.end();
>> > ++it)
>> > - delete(it->second);
>> > + if(this->downloadQueue.front()->getPercentDownloaded() >
>> > + this->PIPELINE &&
>> > + this->downloadQueue.size() < this->PIPELINELENGTH)
>> > + this->addChunk(this->adaptationLogic->getNextChunk());
>> >
>> > - this->chunkMap.clear();
>> > -}
>> > -
>> > -int HTTPConnectionManager::read( Chunk *chunk, void
>> > *p_buffer, size_t len ) -{
>> > - if(this->chunkMap.find(chunk) == this->chunkMap.end())
>> > - {
>> > - this->bytesReadChunk = 0;
>> > - this->timeSecChunk = 0;
>> > -
>> > - if ( this->initConnection( chunk ) == NULL )
>> > - return -1;
>> > - }
>> > + int ret = 0;
>> >
>> > mtime_t start = mdate();
>> > - int ret = this->chunkMap[chunk]->read(p_buffer, len);
>> > + ret =
>> > + this->downloadQueue.front()->getConnection()->read(block->p_buffer,
>> > + block->i_buffer);
>> > mtime_t end = mdate();
>> >
>> > - if( ret <= 0 )
>> > - this->closeConnection( chunk );
>> > - else
>> > - {
>> > - double time = ((double)(end - start)) / 1000000;
>> > -
>> > - this->bytesReadSession += ret;
>> > - this->bytesReadChunk += ret;
>> > - this->timeSecSession += time;
>> > - this->timeSecChunk += time;
>> > -
>> > + block->i_length = (mtime_t)((ret * 8) /
>> > + ((float)this->downloadQueue.front()->getBitrate() / 1000000));
>> >
>> > - if(this->timeSecSession > 0)
>> > - this->bpsAvg = (this->bytesReadSession /
>> > this->timeSecSession) * 8;
>> > + double time = ((double)(end - start)) / 1000000;
>> >
>> > - if(this->timeSecChunk > 0)
>> > - this->bpsLastChunk = (this->bytesReadChunk /
>> > this->timeSecChunk) * 8;
>> > -
>> > - if(this->chunkCount < 2)
>> > - this->bpsAvg = 0;
>> > + if(ret <= 0)
>> > + {
>> > + this->bpsLastChunk = this->bpsCurrentChunk;
>> > + this->bytesReadChunk = 0;
>> > + this->timeChunk = 0;
>> >
>> > - if(this->chunkCount < 2)
>> > - this->bpsLastChunk = 0;
>> > + delete(this->downloadQueue.front());
>> > + this->downloadQueue.pop_front();
>> >
>> > - this->notify();
>> > + return this->read(block);
>> > }
>> > - return ret;
>> > -}
>> > -
>> > -int HTTPConnectionManager::peek
>> > (Chunk *chunk, const uint8_t **pp_peek, size_t i_peek) -{
>> > - if(this->chunkMap.find(chunk) == this->chunkMap.end())
>> > + else
>> > {
>> > - if ( this->initConnection(chunk) == NULL )
>> > - return -1;
>> > + this->updateStatistics(ret, time);
>> > }
>> > - return this->chunkMap[chunk]->peek(pp_peek, i_peek); -}
>> >
>> > -IHTTPConnection* HTTPConnectionManager::initConnection(Chunk
>> > *chunk) -{
>> > - HTTPConnection *con = new HTTPConnection(this->stream);
>> > - if ( con->init(chunk) == false )
>> > - return NULL;
>> > - this->chunkMap[chunk] = con;
>> > - this->chunkCount++;
>> > - return con;
>> > + return ret;
>> > }
>> > -void HTTPConnectionManager::attach
>> > (IDownloadRateObserver *observer)
>> > +void HTTPConnectionManager::attach
>>
>> > +(IDownloadRateObserver *observer)
>> > {
>> > this->rateObservers.push_back(observer);
>> > }
>> > -void HTTPConnectionManager::notify
>> > ()
>> > +void HTTPConnectionManager::notify
>>
>> > +()
>> > {
>> > if ( this->bpsAvg == 0 )
>> > return ;
>> > for(size_t i = 0; i < this->rateObservers.size(); i++)
>> > this->rateObservers.at(i)->downloadRateChanged(this->bpsAvg,
>> > this->bpsLastChunk);
>> > }
>> > +std::vector<PersistentConnection *>
>> > +HTTPConnectionManager::getConnectionsForHost (const std::string
>> > +&hostname) {
>> > + std::vector<PersistentConnection *> cons;
>> > +
>> > + for(size_t i = 0; i < this->connectionPool.size(); i++)
>> > +
>> > + if(!this->connectionPool.at(i)->getHostname().compare(hostname) ||
>> > + !this->connectionPool.at(i)->isConnected())
>> > + cons.push_back(this->connectionPool.at(i));
>> > +
>> > + return cons;
>> > +}
>> > +void
>> > +HTTPConnectionManager::updateStatistics (int bytes, double
>> > +time) {
>> > + this->bytesReadSession += bytes;
>> > + this->bytesReadChunk += bytes;
>> > + this->timeSession += time;
>> > + this->timeChunk += time;
>> > +
>> > + this->bpsAvg = (int64_t) ((this->bytesReadSession *
>> 8)
>> > + / this->timeSession);
>> > + this->bpsCurrentChunk = (int64_t) ((this->bytesReadChunk * 8)
>> /
>> > + this->timeChunk);
>> > +
>> > + if(this->bpsAvg < 0)
>> > + this->bpsAvg = 0;
>> > +
>> > + if(this->bpsCurrentChunk < 0)
>> > + this->bpsCurrentChunk = 0;
>> > +
>> > + this->notify();
>> > +}
>> > +bool HTTPConnectionManager::addChunk
>>
>> > +(Chunk *chunk) {
>> > + if(chunk == NULL)
>> > + return false;
>> > +
>> > + this->downloadQueue.push_back(chunk);
>> > +
>> > + std::vector<PersistentConnection *> cons =
>> > + this->getConnectionsForHost(chunk->getHostname());
>> > +
>> > + if(cons.size() == 0)
>> > + {
>> > + PersistentConnection *con = new
>> > + PersistentConnection(this->stream);
>> > + this->connectionPool.push_back(con);
>> > + cons.push_back(con);
>> > + }
>> > +
>> > + size_t pos = this->chunkCount % cons.size();
>> > +
>> > + cons.at(pos)->addChunk(chunk);
>> > +
>> > + chunk->setConnection(cons.at(pos));
>> > +
>> > + this->chunkCount++;
>> > +
>> > + if(chunk->getBitrate() <= 0)
>> > + chunk->setBitrate(this->CHUNKDEFAULTBITRATE);
>> > +
>> > + return true;
>> > +}
>> > diff --git a/modules/stream_filter/dash/http/HTTPConnectionManager.h
>> > b/modules/stream_filter/dash/http/HTTPConnectionManager.h
>> > index 006ca12..c2f69cf 100644
>> > --- a/modules/stream_filter/dash/http/HTTPConnectionManager.h
>> > +++ b/modules/stream_filter/dash/http/HTTPConnectionManager.h
>> > @@ -29,14 +29,13 @@
>> >
>> > #include <string>
>> > #include <vector>
>> > +#include <deque>
>> > #include <iostream>
>> > #include <ctime>
>> > -#include <map>
>> > #include <limits.h>
>> >
>> > -#include "http/HTTPConnection.h"
>> > -#include "http/Chunk.h"
>> > -#include "adaptationlogic/IDownloadRateObserver.h"
>> > +#include "http/PersistentConnection.h"
>> > +#include "adaptationlogic/IAdaptationLogic.h"
>> >
>> > namespace dash
>> > {
>> > @@ -45,31 +44,36 @@ namespace dash
>> > class HTTPConnectionManager
>> > {
>> > public:
>> > - HTTPConnectionManager (stream_t *stream);
>> > + HTTPConnectionManager
>> > + (logic::IAdaptationLogic *adaptationLogic, stream_t *stream);
>> > virtual ~HTTPConnectionManager ();
>> >
>> > - void closeAllConnections ();
>> > - bool closeConnection
>> > (IHTTPConnection *con);
>> > - int read (Chunk
>> > *chunk, void *p_buffer, size_t len);
>> > - int peek (Chunk
>> > *chunk, const uint8_t **pp_peek, size_t i_peek);
>> > - void attach
>> > (dash::logic::IDownloadRateObserver *observer);
>> > - void notify ();
>> > + void closeAllConnections ();
>> > + bool addChunk (Chunk *chunk);
>> > + int read (block_t *block);
>> > + void attach
>> > + (dash::logic::IDownloadRateObserver *observer);
>> > + void notify ();
>> >
>> > private:
>> > - std::map<Chunk *, HTTPConnection *>
>> > chunkMap;
>> > - std::map<std::string, HTTPConnection *>
>> > urlMap;
>> > std::vector<dash::logic::IDownloadRateObserver *>
>> > rateObservers;
>> > - uint64_t
>> > bpsAvg;
>> > - uint64_t
>> > bpsLastChunk;
>> > - long
>> > bytesReadSession;
>> > - double
>> > timeSecSession;
>> > - long
>> > bytesReadChunk;
>> > - double
>> > timeSecChunk;
>> > + std::deque<Chunk *>
>> > + downloadQueue;
>> > + std::vector<PersistentConnection *>
>> > + connectionPool;
>> > + logic::IAdaptationLogic
>> > + *adaptationLogic;
>> > stream_t
>> > *stream;
>> > int
>> > chunkCount;
>> > + int64_t
>> > + bpsAvg;
>> > + int64_t
>> > + bpsLastChunk;
>> > + int64_t
>> > + bpsCurrentChunk;
>> > + int64_t
>> > + bytesReadSession;
>> > + int64_t
>> > + bytesReadChunk;
>> > + double
>> > + timeSession;
>> > + double
>> > + timeChunk;
>> >
>> > - bool closeConnection( Chunk *chunk );
>> > - IHTTPConnection* initConnection( Chunk *chunk );
>> > + static const int PIPELINE;
>> > + static const int PIPELINELENGTH;
>> > + static const int CHUNKDEFAULTBITRATE;
>> > +
>> > + std::vector<PersistentConnection *>
>> > + getConnectionsForHost (const std::string &hostname);
>> > + void
>> > + updateStatistics (int bytes, double time);
>> >
>> > };
>> > }
>> > --
>> > 1.7.0.4
>> >
>> > _______________________________________________
>> > vlc-devel mailing list
>> > To unsubscribe or modify your subscription options:
>> > http://mailman.videolan.org/listinfo/vlc-devel
>>
>> Please split this commit in multiple parts. Not every change are
>> relative to your commit message.
>>
>> Looks like the Chunk are deleted from the HTTPConnectionManager DTOR,
>> so the leak is kinda fixed. Although, with a big stream, this will be
>> an issue.
>
> The chunks get deleted in the read function:
>> + if(ret <= 0)
>> + {
>> + this->bpsLastChunk = this->bpsCurrentChunk;
>> + this->bytesReadChunk = 0;
>> + this->timeChunk = 0;
>>
>> - if(this->chunkCount < 2)
>> - this->bpsLastChunk = 0;
>> + delete(this->downloadQueue.front());
>> + this->downloadQueue.pop_front();
>
> And if there are some chunks left they will be deleted in the destructor. The problem is I don’t know a convenient way to split a patch maybe you can advise me. Sorry if this is a stupid question ;)
>
> BR
> Chris
>
I don't know if that is the most efficient method, what I do is git
rebase -i origin/master, select edit for the commit to split, and add
some specific parts using git add -i
Regards,
--
Hugo Beauzée-Luyssen
More information about the vlc-devel
mailing list