#ifndef STREAM_H #define STREAM_H #include #include #include #include #include "doubleBuffer.h" #include "chunk.h" #include "timeUtils.h" class Stream { public: Stream(); void addChunk(Chunk* chunk); Chunk* getNextChunk(); time_point_ms getNextPlayerChunk(short* outputBuffer, int correction = 0); void getSilentPlayerChunk(short* outputBuffer); void getChunk(short* outputBuffer, double outputBufferDacTime, unsigned long framesPerBuffer); void setBufferLen(size_t bufferLenMs); private: void sleepMs(int ms); int sleep; std::deque chunks; std::mutex mtx; std::mutex mutex; std::unique_lock* pLock; std::condition_variable cv; DoubleBuffer* pMiniBuffer; DoubleBuffer* pBuffer; DoubleBuffer* pShortBuffer; int median; int shortMedian; time_t lastUpdate; int bufferMs; }; #endif