snapcast/message/sampleFormat.h
(no author) c40bfda64c refactoring
git-svn-id: svn://elaine/murooma/trunk@328 d8a302eb-03bc-478d-80e4-98257eca68ef
2014-12-29 12:34:33 +00:00

71 lines
1.6 KiB
C++

#ifndef SAMPLE_FORMAT_H
#define SAMPLE_FORMAT_H
#include <string>
#include "message.h"
namespace msg
{
class SampleFormat : public BaseMessage
{
public:
SampleFormat();
SampleFormat(const std::string& format);
SampleFormat(uint32_t rate, uint16_t bits, uint16_t channels);
void setFormat(const std::string& format);
void setFormat(uint32_t rate, uint16_t bits, uint16_t channels);
uint32_t rate;
uint16_t bits;
uint16_t channels;
uint16_t sampleSize;
uint16_t frameSize;
inline double msRate() const
{
return (double)rate/1000.;
}
inline double usRate() const
{
return (double)rate/1000000.;
}
inline double nsRate() const
{
return (double)rate/1000000000.;
}
virtual void read(std::istream& stream)
{
stream.read(reinterpret_cast<char *>(&rate), sizeof(uint32_t));
stream.read(reinterpret_cast<char *>(&bits), sizeof(uint16_t));
stream.read(reinterpret_cast<char *>(&channels), sizeof(uint16_t));
stream.read(reinterpret_cast<char *>(&sampleSize), sizeof(uint16_t));
stream.read(reinterpret_cast<char *>(&frameSize), sizeof(uint16_t));
}
virtual uint32_t getSize()
{
return sizeof(int32_t) + 4*sizeof(int16_t);
}
protected:
virtual void doserialize(std::ostream& stream)
{
stream.write(reinterpret_cast<char *>(&rate), sizeof(uint32_t));
stream.write(reinterpret_cast<char *>(&bits), sizeof(uint16_t));
stream.write(reinterpret_cast<char *>(&channels), sizeof(uint16_t));
stream.write(reinterpret_cast<char *>(&sampleSize), sizeof(uint16_t));
stream.write(reinterpret_cast<char *>(&frameSize), sizeof(uint16_t));
}
};
}
#endif