Commit 7d7975d0 authored by Francois Cartegnie's avatar Francois Cartegnie

demux: adaptative: add readBlock

parent 3bb8d715
...@@ -32,7 +32,7 @@ namespace adaptative ...@@ -32,7 +32,7 @@ namespace adaptative
{ {
public: public:
virtual ~ChunksSource() {} virtual ~ChunksSource() {}
virtual block_t *readNextBlock(size_t) = 0; virtual block_t *readNextBlock() = 0;
}; };
} }
......
...@@ -276,7 +276,7 @@ AbstractStream::status AbstractStream::demux(mtime_t nz_deadline, bool send) ...@@ -276,7 +276,7 @@ AbstractStream::status AbstractStream::demux(mtime_t nz_deadline, bool send)
return AbstractStream::status_demuxed; return AbstractStream::status_demuxed;
} }
block_t * AbstractStream::readNextBlock(size_t toread) block_t * AbstractStream::readNextBlock()
{ {
if (currentChunk == NULL && !eof) if (currentChunk == NULL && !eof)
currentChunk = segmentTracker->getNextChunk(!fakeesout->restarting(), connManager); currentChunk = segmentTracker->getNextChunk(!fakeesout->restarting(), connManager);
...@@ -296,7 +296,7 @@ block_t * AbstractStream::readNextBlock(size_t toread) ...@@ -296,7 +296,7 @@ block_t * AbstractStream::readNextBlock(size_t toread)
const bool b_segment_head_chunk = (currentChunk->getBytesRead() == 0); const bool b_segment_head_chunk = (currentChunk->getBytesRead() == 0);
block_t *block = currentChunk->read(toread); block_t *block = currentChunk->readBlock();
if(block == NULL) if(block == NULL)
{ {
delete currentChunk; delete currentChunk;
......
...@@ -79,7 +79,7 @@ namespace adaptative ...@@ -79,7 +79,7 @@ namespace adaptative
void prune(); void prune();
void runUpdates(); void runUpdates();
virtual block_t *readNextBlock(size_t); /* impl */ virtual block_t *readNextBlock(); /* impl */
virtual void fillExtraFMTInfo( es_format_t * ) const; /* impl */ virtual void fillExtraFMTInfo( es_format_t * ) const; /* impl */
virtual void trackerEvent(const SegmentTrackerEvent &); /* impl */ virtual void trackerEvent(const SegmentTrackerEvent &); /* impl */
......
...@@ -90,12 +90,12 @@ size_t AbstractChunk::getBytesToRead() const ...@@ -90,12 +90,12 @@ size_t AbstractChunk::getBytesToRead() const
return source->getContentLength() - bytesRead; return source->getContentLength() - bytesRead;
} }
block_t * AbstractChunk::read(size_t size) block_t * AbstractChunk::doRead(size_t size, bool b_block)
{ {
if(!source) if(!source)
return NULL; return NULL;
block_t *block = source->read(size); block_t *block = (b_block) ? source->readBlock() : source->read(size);
if(block) if(block)
{ {
if(bytesRead == 0) if(bytesRead == 0)
...@@ -108,6 +108,16 @@ block_t * AbstractChunk::read(size_t size) ...@@ -108,6 +108,16 @@ block_t * AbstractChunk::read(size_t size)
return block; return block;
} }
block_t * AbstractChunk::readBlock()
{
return doRead(0, true);
}
block_t * AbstractChunk::read(size_t size)
{
return doRead(size, false);
}
HTTPChunkSource::HTTPChunkSource(const std::string& url, HTTPConnectionManager *manager) : HTTPChunkSource::HTTPChunkSource(const std::string& url, HTTPConnectionManager *manager) :
AbstractChunkSource(), AbstractChunkSource(),
connection (NULL), connection (NULL),
...@@ -214,6 +224,11 @@ bool HTTPChunkSource::prepare() ...@@ -214,6 +224,11 @@ bool HTTPChunkSource::prepare()
return true; return true;
} }
block_t * HTTPChunkSource::readBlock()
{
return read(HTTPChunkSource::CHUNK_SIZE);
}
block_t * HTTPChunkSource::read(size_t readsize) block_t * HTTPChunkSource::read(size_t readsize)
{ {
if(!prepare()) if(!prepare())
......
...@@ -45,7 +45,8 @@ namespace adaptative ...@@ -45,7 +45,8 @@ namespace adaptative
public: public:
AbstractChunkSource(); AbstractChunkSource();
virtual ~AbstractChunkSource(); virtual ~AbstractChunkSource();
virtual block_t * read(size_t) = 0; virtual block_t * readBlock () = 0;
virtual block_t * read (size_t) = 0;
void setParentChunk (AbstractChunk *); void setParentChunk (AbstractChunk *);
void setBytesRange (const BytesRange &); void setBytesRange (const BytesRange &);
const BytesRange & getBytesRange () const; const BytesRange & getBytesRange () const;
...@@ -65,6 +66,7 @@ namespace adaptative ...@@ -65,6 +66,7 @@ namespace adaptative
size_t getBytesRead () const; size_t getBytesRead () const;
size_t getBytesToRead () const; size_t getBytesToRead () const;
virtual block_t * readBlock ();
virtual block_t * read (size_t); virtual block_t * read (size_t);
virtual void onDownload (block_t **) = 0; virtual void onDownload (block_t **) = 0;
...@@ -74,6 +76,7 @@ namespace adaptative ...@@ -74,6 +76,7 @@ namespace adaptative
private: private:
size_t bytesRead; size_t bytesRead;
block_t * doRead(size_t, bool);
}; };
class HTTPChunkSource : public AbstractChunkSource class HTTPChunkSource : public AbstractChunkSource
...@@ -82,7 +85,8 @@ namespace adaptative ...@@ -82,7 +85,8 @@ namespace adaptative
HTTPChunkSource(const std::string &url, HTTPConnectionManager *); HTTPChunkSource(const std::string &url, HTTPConnectionManager *);
virtual ~HTTPChunkSource(); virtual ~HTTPChunkSource();
virtual block_t * read(size_t); /* impl */ virtual block_t * readBlock (); /* impl */
virtual block_t * read (size_t); /* impl */
static const size_t CHUNK_SIZE = 32768; static const size_t CHUNK_SIZE = 32768;
......
...@@ -71,8 +71,7 @@ ssize_t ChunksSourceStream::Read(uint8_t *buf, size_t size) ...@@ -71,8 +71,7 @@ ssize_t ChunksSourceStream::Read(uint8_t *buf, size_t size)
while(i_toread && !b_eof) while(i_toread && !b_eof)
{ {
const size_t i_blocksize = __MAX(i_toread, http::HTTPChunkSource::CHUNK_SIZE); if(!p_block && !(p_block = source->readNextBlock()))
if(!p_block && !(p_block = source->readNextBlock(i_blocksize)))
{ {
b_eof = true; b_eof = true;
break; break;
......
...@@ -36,6 +36,17 @@ MemoryChunkSource::~MemoryChunkSource() ...@@ -36,6 +36,17 @@ MemoryChunkSource::~MemoryChunkSource()
block_Release(data); block_Release(data);
} }
block_t * MemoryChunkSource::readBlock()
{
block_t *p_block = NULL;
if(data)
{
p_block = data;
data = NULL;
}
return p_block;
}
block_t * MemoryChunkSource::read(size_t toread) block_t * MemoryChunkSource::read(size_t toread)
{ {
if(!data) if(!data)
......
...@@ -34,6 +34,7 @@ namespace smooth ...@@ -34,6 +34,7 @@ namespace smooth
MemoryChunkSource(block_t *); MemoryChunkSource(block_t *);
virtual ~MemoryChunkSource(); virtual ~MemoryChunkSource();
virtual block_t * readBlock(); /* impl */
virtual block_t * read(size_t); /* impl */ virtual block_t * read(size_t); /* impl */
private: private:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment