snapcast/message/pcmChunk.h
(no author) fe79a78efe chonos stuff
git-svn-id: svn://elaine/murooma/trunk@297 d8a302eb-03bc-478d-80e4-98257eca68ef
2014-09-25 21:21:32 +00:00

65 lines
1.2 KiB
C++

#ifndef PCM_CHUNK_H
#define PCM_CHUNK_H
#include <chrono>
#include "message.h"
#include "wireChunk.h"
#include "sampleFormat.h"
#include "common/timeDefs.h"
class PcmChunk : public WireChunk
{
public:
PcmChunk(const SampleFormat& sampleFormat, size_t ms);
PcmChunk();
~PcmChunk();
int readFrames(void* outputBuffer, size_t frameCount);
inline chronos::time_point_hrc timePoint() const
{
return chronos::time_point_hrc(
chronos::sec(timestamp.sec) +
chronos::usec(timestamp.usec) +
chronos::usec((chronos::usec::rep)(1000000. * ((double)idx / (double)format.rate)))
);
}
int seek(int frames);
template<typename T>
inline T duration() const
{
return std::chrono::duration_cast<T>(chronos::nsec((chronos::nsec::rep)(1000000 * getFrameCount() / format.msRate())));
}
template<typename T>
inline T durationLeft() const
{
return std::chrono::duration_cast<T>(chronos::nsec((chronos::nsec::rep)(1000000 * (getFrameCount() - idx) / format.msRate())));
}
inline bool isEndOfChunk() const
{
return idx >= getFrameCount();
}
inline size_t getFrameCount() const
{
return (payloadSize / format.frameSize);
}
SampleFormat format;
private:
// SampleFormat format_;
uint32_t idx;
};
#endif