123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #ifndef CSPOT_CHUNKEDBYTESTREAM_H
- #define CSPOT_CHUNKEDBYTESTREAM_H
- #include "ByteStream.h"
- #include "BellLogger.h"
- #include <memory>
- #include "MercuryManager.h"
- #include "stdint.h"
- class ChunkedByteStream : public bell::ByteStream {
- private:
-
- std::vector<uint8_t> audioKey;
-
- std::vector<uint8_t> fileId;
-
- std::vector<std::shared_ptr<AudioChunk>> chunks;
-
- size_t pos = 0;
- size_t fileSize = -1;
- std::mutex readMutex;
- std::atomic<bool> loadAheadEnabled = false;
- std::shared_ptr<MercuryManager> mercuryManager;
-
- std::shared_ptr<AudioChunk> getChunkForPosition(size_t position);
-
- std::shared_ptr<AudioChunk> requestChunk(uint16_t position);
-
- size_t attemptRead(uint8_t *buffer, size_t bytes, std::shared_ptr<AudioChunk> chunk);
- public:
- ChunkedByteStream(std::shared_ptr<MercuryManager> manager);
- ~ChunkedByteStream() {};
-
- void fetchFileInformation();
-
- void setEnableLoadAhead(bool loadAhead);
-
- void setFileInfo(std::vector<uint8_t>& fileId, std::vector<uint8_t>& audioKey);
-
-
- size_t read(uint8_t *buf, size_t nbytes);
-
- void seek(size_t pos);
-
- size_t skip(size_t nbytes);
-
- size_t position();
-
- size_t size();
-
- void close();
- };
- #endif
|