vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Fri Mar 12 10:11:10 2021 +0100| [51293726f526342aa9805b292a3dfceb32e84003] | committer: Francois Cartegnie
demux: adaptive: add common chunk/chunk source interface > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=51293726f526342aa9805b292a3dfceb32e84003 --- modules/demux/adaptive/Streams.cpp | 2 +- modules/demux/adaptive/Streams.hpp | 3 +- modules/demux/adaptive/http/Chunk.cpp | 11 ++++++-- modules/demux/adaptive/http/Chunk.h | 36 +++++++++++++++--------- modules/demux/adaptive/playlist/SegmentChunk.cpp | 2 +- modules/demux/smooth/playlist/MemoryChunk.cpp | 5 ++++ modules/demux/smooth/playlist/MemoryChunk.hpp | 1 + 7 files changed, 41 insertions(+), 19 deletions(-) diff --git a/modules/demux/adaptive/Streams.cpp b/modules/demux/adaptive/Streams.cpp index ce305f7f07..fbaca03307 100644 --- a/modules/demux/adaptive/Streams.cpp +++ b/modules/demux/adaptive/Streams.cpp @@ -573,7 +573,7 @@ block_t * AbstractStream::readNextBlock() demuxfirstchunk = false; - if (currentChunk->isEmpty()) + if (!currentChunk->hasMoreData()) { delete currentChunk; currentChunk = nullptr; diff --git a/modules/demux/adaptive/Streams.hpp b/modules/demux/adaptive/Streams.hpp index 2e5cf214e3..f80cd266fa 100644 --- a/modules/demux/adaptive/Streams.hpp +++ b/modules/demux/adaptive/Streams.hpp @@ -39,6 +39,7 @@ namespace adaptive namespace http { class AbstractConnectionManager; + class ChunkInterface; } namespace playlist @@ -126,7 +127,7 @@ namespace adaptive AbstractConnectionManager *connManager; /* not owned */ SegmentTracker *segmentTracker; - SegmentChunk *currentChunk; + ChunkInterface *currentChunk; bool eof; std::string language; std::string description; diff --git a/modules/demux/adaptive/http/Chunk.cpp b/modules/demux/adaptive/http/Chunk.cpp index 4843169eb2..04ac40f4a9 100644 --- a/modules/demux/adaptive/http/Chunk.cpp +++ b/modules/demux/adaptive/http/Chunk.cpp @@ -82,7 +82,7 @@ AbstractChunk::~AbstractChunk() delete source; } -std::string AbstractChunk::getContentType() +std::string AbstractChunk::getContentType() const { return source->getContentType(); } @@ -123,9 +123,9 @@ block_t * AbstractChunk::doRead(size_t size, bool b_block) return block; } -bool AbstractChunk::isEmpty() const +bool AbstractChunk::hasMoreData() const { - return !source->hasMoreData(); + return source->hasMoreData(); } block_t * AbstractChunk::readBlock() @@ -185,6 +185,11 @@ bool HTTPChunkSource::hasMoreData() const else return true; } +size_t HTTPChunkSource::getBytesRead() const +{ + return consumed; +} + block_t * HTTPChunkSource::read(size_t readsize) { mutex_locker locker {lock}; diff --git a/modules/demux/adaptive/http/Chunk.h b/modules/demux/adaptive/http/Chunk.h index c596c953fd..41f360a54c 100644 --- a/modules/demux/adaptive/http/Chunk.h +++ b/modules/demux/adaptive/http/Chunk.h @@ -52,18 +52,27 @@ namespace adaptive Key, }; - class AbstractChunkSource + class ChunkInterface { public: - AbstractChunkSource(); - virtual ~AbstractChunkSource(); + virtual std::string getContentType () const = 0; + virtual RequestStatus getRequestStatus() const = 0; + virtual block_t * readBlock () = 0; virtual block_t * read (size_t) = 0; virtual bool hasMoreData () const = 0; + virtual size_t getBytesRead () const = 0; + }; + + class AbstractChunkSource : public ChunkInterface + { + public: + AbstractChunkSource(); + virtual ~AbstractChunkSource(); void setBytesRange (const BytesRange &); const BytesRange & getBytesRange () const; - virtual std::string getContentType () const; - RequestStatus getRequestStatus() const; + virtual std::string getContentType () const override; + virtual RequestStatus getRequestStatus() const override; protected: RequestStatus requeststatus; @@ -71,19 +80,19 @@ namespace adaptive BytesRange bytesRange; }; - class AbstractChunk + class AbstractChunk : public ChunkInterface { public: virtual ~AbstractChunk(); - std::string getContentType (); - RequestStatus getRequestStatus () const; - size_t getBytesRead () const; - uint64_t getStartByteInFile () const; - bool isEmpty () const; + virtual std::string getContentType () const override; + virtual RequestStatus getRequestStatus () const override; + virtual size_t getBytesRead () const override; + virtual bool hasMoreData () const override; + uint64_t getStartByteInFile () const; - virtual block_t * readBlock (); - virtual block_t * read (size_t); + virtual block_t * readBlock () override; + virtual block_t * read (size_t) override; protected: AbstractChunk(AbstractChunkSource *); @@ -106,6 +115,7 @@ namespace adaptive virtual block_t * readBlock () override; virtual block_t * read (size_t) override; virtual bool hasMoreData () const override; + virtual size_t getBytesRead () const override; virtual std::string getContentType () const override; static const size_t CHUNK_SIZE = 32768; diff --git a/modules/demux/adaptive/playlist/SegmentChunk.cpp b/modules/demux/adaptive/playlist/SegmentChunk.cpp index 4182a42085..3756325d6c 100644 --- a/modules/demux/adaptive/playlist/SegmentChunk.cpp +++ b/modules/demux/adaptive/playlist/SegmentChunk.cpp @@ -52,7 +52,7 @@ bool SegmentChunk::decrypt(block_t **pp_block) if(encryptionSession) { - bool b_last = isEmpty(); + bool b_last = !hasMoreData(); p_block->i_buffer = encryptionSession->decrypt(p_block->p_buffer, p_block->i_buffer, b_last); if(b_last) diff --git a/modules/demux/smooth/playlist/MemoryChunk.cpp b/modules/demux/smooth/playlist/MemoryChunk.cpp index 4df9459789..51ce45c0fc 100644 --- a/modules/demux/smooth/playlist/MemoryChunk.cpp +++ b/modules/demux/smooth/playlist/MemoryChunk.cpp @@ -45,6 +45,11 @@ bool MemoryChunkSource::hasMoreData() const return i_read > contentLength; } +size_t MemoryChunkSource::getBytesRead() const +{ + return i_read; +} + block_t * MemoryChunkSource::readBlock() { block_t *p_block = nullptr; diff --git a/modules/demux/smooth/playlist/MemoryChunk.hpp b/modules/demux/smooth/playlist/MemoryChunk.hpp index 52fc8829f0..b3a3ecb2f9 100644 --- a/modules/demux/smooth/playlist/MemoryChunk.hpp +++ b/modules/demux/smooth/playlist/MemoryChunk.hpp @@ -37,6 +37,7 @@ namespace smooth virtual block_t * readBlock() override; virtual block_t * read(size_t) override; virtual bool hasMoreData() const override; + virtual size_t getBytesRead() const override; private: block_t *data; _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits