diff --git a/client/timeProvider.h b/client/timeProvider.h index 207c4b34..f86d3d43 100644 --- a/client/timeProvider.h +++ b/client/timeProvider.h @@ -1,6 +1,7 @@ #ifndef TIME_PROVIDER_H #define TIME_PROVIDER_H +#include #include "doubleBuffer.h" class TimeProvider @@ -18,15 +19,12 @@ public: long getDiffToServerMs(); private: - TimeProvider(); // Constructor? (the {} brackets) are needed here. - // Dont forget to declare these two. You want to make sure they - // are unaccessable otherwise you may accidently get copies of - // your singleton appearing. - TimeProvider(TimeProvider const&); // Don't Implement + TimeProvider(); + TimeProvider(TimeProvider const&); // Don't Implement void operator=(TimeProvider const&); // Don't implement DoubleBuffer diffBuffer; - long diffToServer; + std::atomic diffToServer; }; diff --git a/message/sampleFormat.cpp b/message/sampleFormat.cpp index ba9f9cd1..34ef9990 100644 --- a/message/sampleFormat.cpp +++ b/message/sampleFormat.cpp @@ -16,7 +16,7 @@ SampleFormat::SampleFormat(const std::string& format) : BaseMessage(message_type } -SampleFormat::SampleFormat(uint16_t sampleRate, uint16_t bitsPerSample, uint16_t channelCount) : BaseMessage(message_type::sampleformat) +SampleFormat::SampleFormat(uint32_t sampleRate, uint16_t bitsPerSample, uint16_t channelCount) : BaseMessage(message_type::sampleformat) { setFormat(sampleRate, bitsPerSample, channelCount); } @@ -28,13 +28,13 @@ void SampleFormat::setFormat(const std::string& format) boost::split(strs, format, boost::is_any_of(":")); if (strs.size() == 3) setFormat( - boost::lexical_cast(strs[0]), + boost::lexical_cast(strs[0]), boost::lexical_cast(strs[1]), boost::lexical_cast(strs[2])); } -void SampleFormat::setFormat(uint16_t rate, uint16_t bits, uint16_t channels) +void SampleFormat::setFormat(uint32_t rate, uint16_t bits, uint16_t channels) { this->rate = rate; this->bits = bits; diff --git a/message/sampleFormat.h b/message/sampleFormat.h index c14aaebe..c1977097 100644 --- a/message/sampleFormat.h +++ b/message/sampleFormat.h @@ -10,12 +10,12 @@ class SampleFormat : public BaseMessage public: SampleFormat(); SampleFormat(const std::string& format); - SampleFormat(uint16_t rate, uint16_t bits, uint16_t channels); + SampleFormat(uint32_t rate, uint16_t bits, uint16_t channels); void setFormat(const std::string& format); - void setFormat(uint16_t rate, uint16_t bits, uint16_t channels); + void setFormat(uint32_t rate, uint16_t bits, uint16_t channels); - uint16_t rate; + uint32_t rate; uint16_t bits; uint16_t channels; @@ -29,7 +29,7 @@ public: virtual void read(std::istream& stream) { - stream.read(reinterpret_cast(&rate), sizeof(uint16_t)); + stream.read(reinterpret_cast(&rate), sizeof(uint32_t)); stream.read(reinterpret_cast(&bits), sizeof(uint16_t)); stream.read(reinterpret_cast(&channels), sizeof(uint16_t)); stream.read(reinterpret_cast(&sampleSize), sizeof(uint16_t)); @@ -38,26 +38,19 @@ public: virtual uint32_t getSize() { - return 5*sizeof(int16_t); + return sizeof(int32_t) + 4*sizeof(int16_t); } protected: virtual void doserialize(std::ostream& stream) { - stream.write(reinterpret_cast(&rate), sizeof(uint16_t)); + stream.write(reinterpret_cast(&rate), sizeof(uint32_t)); stream.write(reinterpret_cast(&bits), sizeof(uint16_t)); stream.write(reinterpret_cast(&channels), sizeof(uint16_t)); stream.write(reinterpret_cast(&sampleSize), sizeof(uint16_t)); stream.write(reinterpret_cast(&frameSize), sizeof(uint16_t)); } - /*private: - uint16_t rate_; - uint16_t bits_; - uint16_t channels_; - uint16_t bytes_; - uint16_t frameSize_; - */ }; diff --git a/server/oggEncoder.cpp b/server/oggEncoder.cpp index 9d3a01bf..95c5f385 100644 --- a/server/oggEncoder.cpp +++ b/server/oggEncoder.cpp @@ -78,7 +78,7 @@ double OggEncoder::encode(PcmChunk* chunk) res = os.granulepos; else res = os.granulepos - lastGranulepos; - res /= 48.; + res /= (sampleFormat.rate / 1000.); lastGranulepos = os.granulepos; chunk->payload = (char*)realloc(chunk->payload, pos); chunk->payloadSize = pos;