#ifndef STREAM_H #define STREAM_H #include #include #include #include #include #include "doubleBuffer.h" #include "common/message.h" #include "common/pcmChunk.h" #include "common/timeUtils.h" #include "common/queue.h" #include "common/sampleFormat.h" class Stream { public: Stream(const SampleFormat& format); void addChunk(PcmChunk* chunk); void clearChunks(); void getPlayerChunk(void* outputBuffer, double outputBufferDacTime, unsigned long framesPerBuffer); void setBufferLen(size_t bufferLenMs); const SampleFormat& format; private: time_point_ms getNextPlayerChunk(void* outputBuffer, unsigned long framesPerBuffer, int correction = 0); time_point_ms getSilentPlayerChunk(void* outputBuffer, unsigned long framesPerBuffer); time_point_ms seek(long ms); // time_point_ms seekTo(const time_point_ms& to); void updateBuffers(int age); void resetBuffers(); SampleFormat format_; long lastTick; int sleep; Queue> chunks; DoubleBuffer* pCardBuffer; DoubleBuffer* pMiniBuffer; DoubleBuffer* pBuffer; DoubleBuffer* pShortBuffer; std::shared_ptr chunk; int median; int shortMedian; time_t lastUpdate; int bufferMs; }; #endif