made SampleFormat not inherit from BaseMessage

This commit is contained in:
badaix 2016-01-24 13:52:46 +01:00
parent eed7f287fb
commit c4094a2175
18 changed files with 25 additions and 63 deletions

View file

@ -146,10 +146,6 @@ void Controller::worker()
while (active_ && !(serverSettings = clientConnection_->sendReq<msg::ServerSettings>(&requestMsg)));
logO << "ServerSettings - buffer: " << serverSettings->bufferMs << ", latency: " << serverSettings->latency << ", volume: " << serverSettings->volume << ", muted: " << serverSettings->muted << "\n";
// requestMsg.request = kSampleFormat;
// while (active_ && !(sampleFormat_ = clientConnection_->sendReq<msg::SampleFormat>(&requestMsg)));
// logO << "SampleFormat rate: " << sampleFormat_->rate << ", bits: " << sampleFormat_->bits << ", channels: " << sampleFormat_->channels << "\n";
requestMsg.request = kHeader;
shared_ptr<msg::Header> headerChunk(NULL);
while (active_ && !(headerChunk = clientConnection_->sendReq<msg::Header>(&requestMsg)));

View file

@ -62,7 +62,7 @@ private:
ClientConnection* clientConnection_;
Stream* stream_;
std::string ip_;
msg::SampleFormat sampleFormat_;
SampleFormat sampleFormat_;
Decoder* decoder_;
PcmDevice pcmDevice_;
size_t latency_;

View file

@ -29,7 +29,7 @@ public:
Decoder() {};
virtual ~Decoder() {};
virtual bool decode(msg::PcmChunk* chunk) = 0;
virtual msg::SampleFormat setHeader(msg::Header* chunk) = 0;
virtual SampleFormat setHeader(msg::Header* chunk) = 0;
};

View file

@ -37,7 +37,7 @@ static void error_callback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecod
static msg::Header* flacHeader = NULL;
static msg::PcmChunk* flacChunk = NULL;
static msg::PcmChunk* pcmChunk = NULL;
static msg::SampleFormat sampleFormat;
static SampleFormat sampleFormat;
static FLAC__StreamDecoder *decoder = NULL;
@ -81,7 +81,7 @@ bool FlacDecoder::decode(msg::PcmChunk* chunk)
}
msg::SampleFormat FlacDecoder::setHeader(msg::Header* chunk)
SampleFormat FlacDecoder::setHeader(msg::Header* chunk)
{
flacHeader = chunk;
FLAC__StreamDecoderInitStatus init_status;

View file

@ -46,7 +46,7 @@ public:
FlacDecoder();
virtual ~FlacDecoder();
virtual bool decode(msg::PcmChunk* chunk);
virtual msg::SampleFormat setHeader(msg::Header* chunk);
virtual SampleFormat setHeader(msg::Header* chunk);
CacheInfo cacheInfo_;
};

View file

@ -143,7 +143,7 @@ bool OggDecoder::decode(msg::PcmChunk* chunk)
}
msg::SampleFormat OggDecoder::setHeader(msg::Header* chunk)
SampleFormat OggDecoder::setHeader(msg::Header* chunk)
{
bytes = chunk->payloadSize;
buffer=ogg_sync_buffer(&oy, bytes);
@ -217,7 +217,7 @@ msg::SampleFormat OggDecoder::setHeader(msg::Header* chunk)
/// in parallel. We could init multiple vorbis_block structures for vd here
msg::SampleFormat sampleFormat(vi.rate, 16, vi.channels);
SampleFormat sampleFormat(vi.rate, 16, vi.channels);
return sampleFormat;
}

View file

@ -28,7 +28,7 @@ public:
OggDecoder();
virtual ~OggDecoder();
virtual bool decode(msg::PcmChunk* chunk);
virtual msg::SampleFormat setHeader(msg::Header* chunk);
virtual SampleFormat setHeader(msg::Header* chunk);
private:
bool decodePayload(msg::PcmChunk* chunk);

View file

@ -63,7 +63,7 @@ bool PcmDecoder::decode(msg::PcmChunk* chunk)
}
msg::SampleFormat PcmDecoder::setHeader(msg::Header* chunk)
SampleFormat PcmDecoder::setHeader(msg::Header* chunk)
{
if (chunk->payloadSize < 44)
throw SnapException("PCM header too small");
@ -112,7 +112,7 @@ msg::SampleFormat PcmDecoder::setHeader(msg::Header* chunk)
if (chunk_fmt.sample_rate == 0)
throw SnapException("Sample format not found");
msg::SampleFormat sampleFormat(
SampleFormat sampleFormat(
chunk_fmt.sample_rate,
chunk_fmt.bits_per_sample,
chunk_fmt.num_channels);

View file

@ -26,7 +26,7 @@ class PcmDecoder : public Decoder
public:
PcmDecoder();
virtual bool decode(msg::PcmChunk* chunk);
virtual msg::SampleFormat setHeader(msg::Header* chunk);
virtual SampleFormat setHeader(msg::Header* chunk);
};

View file

@ -37,7 +37,7 @@ void AlsaPlayer::initAlsa()
snd_pcm_hw_params_t *params;
int buff_size;
const msg::SampleFormat& format = stream_->getFormat();
const SampleFormat& format = stream_->getFormat();
rate = format.rate;
channels = format.channels;

View file

@ -120,7 +120,7 @@ void OpenslPlayer::initOpensl()
if (active_)
return;
const msg::SampleFormat& format = stream_->getFormat();
const SampleFormat& format = stream_->getFormat();
frames_ = 960;//rate / 50; // => 50ms

View file

@ -67,7 +67,7 @@ void Player::adjustVolume(char* buffer, size_t frames)
if (muted_)
volume = 0.;
const msg::SampleFormat& sampleFormat = stream_->getFormat();
const SampleFormat& sampleFormat = stream_->getFormat();
if (volume < 1.0)
{

View file

@ -27,7 +27,7 @@ using namespace std;
namespace cs = chronos;
Stream::Stream(const msg::SampleFormat& sampleFormat) : format_(sampleFormat), sleep_(0), median_(0), shortMedian_(0), lastUpdate_(0), playedFrames_(0), bufferMs_(cs::msec(500))
Stream::Stream(const SampleFormat& sampleFormat) : format_(sampleFormat), sleep_(0), median_(0), shortMedian_(0), lastUpdate_(0), playedFrames_(0), bufferMs_(cs::msec(500))
{
buffer_.setSize(500);
shortBuffer_.setSize(100);

View file

@ -42,7 +42,7 @@
class Stream
{
public:
Stream(const msg::SampleFormat& format);
Stream(const SampleFormat& format);
/// Adds PCM data to the queue
void addChunk(msg::PcmChunk* chunk);
@ -55,7 +55,7 @@ public:
/// "Server buffer": playout latency, e.g. 1000ms
void setBufferLen(size_t bufferLenMs);
const msg::SampleFormat& getFormat() const
const SampleFormat& getFormat() const
{
return format_;
}
@ -72,7 +72,7 @@ private:
void resetBuffers();
void setRealSampleRate(double sampleRate);
msg::SampleFormat format_;
SampleFormat format_;
long lastTick_;
chronos::usec sleep_;

View file

@ -51,7 +51,7 @@ enum message_type
kBase = 0,
kHeader = 1,
kWireChunk = 2,
kSampleFormat = 3,
// kSampleFormat = 3,
kServerSettings = 4,
kTime = 5,
kRequest = 6,

View file

@ -28,21 +28,19 @@
using namespace std;
namespace msg
{
SampleFormat::SampleFormat() : BaseMessage(message_type::kSampleFormat)
SampleFormat::SampleFormat()
{
}
SampleFormat::SampleFormat(const std::string& format) : BaseMessage(message_type::kSampleFormat)
SampleFormat::SampleFormat(const std::string& format)
{
setFormat(format);
}
SampleFormat::SampleFormat(uint32_t sampleRate, uint16_t bitsPerSample, uint16_t channelCount) : BaseMessage(message_type::kSampleFormat)
SampleFormat::SampleFormat(uint32_t sampleRate, uint16_t bitsPerSample, uint16_t channelCount)
{
setFormat(sampleRate, bitsPerSample, channelCount);
}
@ -81,7 +79,4 @@ void SampleFormat::setFormat(uint32_t rate, uint16_t bits, uint16_t channels)
// logD << "SampleFormat: " << rate << ":" << bits << ":" << channels << "\n";
}
}

View file

@ -20,10 +20,7 @@
#define SAMPLE_FORMAT_H
#include <string>
#include "message.h"
namespace msg
{
/**
* sample and frame as defined in alsa:
@ -36,7 +33,7 @@ namespace msg
* To sustain 2x 44.1 KHz analog rate - the system must be capable of data transfer rate, in Bytes/sec:
* Bps_rate = (num_channels) * (1 sample in bytes) * (analog_rate) = (1 frame) * (analog_rate) = ( 2 channels ) * (2 bytes/sample) * (44100 samples/sec) = 2*2*44100 = 176400 Bytes/sec (link to formula img)
*/
class SampleFormat : public BaseMessage
class SampleFormat
{
public:
SampleFormat();
@ -72,34 +69,8 @@ public:
{
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() const
{
return sizeof(int32_t) + 4*sizeof(int16_t);
}
protected:
virtual void doserialize(std::ostream& stream) const
{
stream.write(reinterpret_cast<const char *>(&rate), sizeof(uint32_t));
stream.write(reinterpret_cast<const char *>(&bits), sizeof(uint16_t));
stream.write(reinterpret_cast<const char *>(&channels), sizeof(uint16_t));
stream.write(reinterpret_cast<const char *>(&sampleSize), sizeof(uint16_t));
stream.write(reinterpret_cast<const char *>(&frameSize), sizeof(uint16_t));
}
};
}
#endif

View file

@ -61,7 +61,7 @@ public:
}
/// The listener will receive the encoded stream
virtual void init(EncoderListener* listener, const msg::SampleFormat& format)
virtual void init(EncoderListener* listener, const SampleFormat& format)
{
if (codecOptions_ == "")
codecOptions_ = getDefaultOptions();
@ -94,7 +94,7 @@ public:
protected:
virtual void initEncoder() = 0;
msg::SampleFormat sampleFormat_;
SampleFormat sampleFormat_;
msg::Header* headerChunk_;
EncoderListener* listener_;
std::string codecOptions_;