git-svn-id: svn://elaine/murooma/trunk@311 d8a302eb-03bc-478d-80e4-98257eca68ef
This commit is contained in:
(no author) 2014-10-29 21:12:03 +00:00
parent 5e9eebd7a7
commit 8710e5e898
4 changed files with 18 additions and 9 deletions

View file

@ -48,10 +48,11 @@ void Controller::onMessageReceived(ClientConnection* connection, const BaseMessa
} }
void Controller::start(const PcmDevice& pcmDevice, const std::string& _ip, size_t _port) void Controller::start(const PcmDevice& pcmDevice, const std::string& _ip, size_t _port, size_t latency)
{ {
ip = _ip; ip = _ip;
pcmDevice_ = pcmDevice; pcmDevice_ = pcmDevice;
latency_ = latency;
clientConnection = new ClientConnection(this, ip, _port); clientConnection = new ClientConnection(this, ip, _port);
controllerThread = new thread(&Controller::worker, this); controllerThread = new thread(&Controller::worker, this);
} }
@ -107,7 +108,7 @@ void Controller::worker()
cout << "diff to server [ms]: " << TimeProvider::getInstance().getDiffToServer<chronos::msec>().count() << "\n"; cout << "diff to server [ms]: " << TimeProvider::getInstance().getDiffToServer<chronos::msec>().count() << "\n";
stream = new Stream(*sampleFormat); stream = new Stream(*sampleFormat);
stream->setBufferLen(serverSettings->bufferMs); stream->setBufferLen(serverSettings->bufferMs - latency_);
Player player(pcmDevice_, stream); Player player(pcmDevice_, stream);
player.start(); player.start();

View file

@ -14,7 +14,7 @@ class Controller : public MessageReceiver
{ {
public: public:
Controller(); Controller();
void start(const PcmDevice& pcmDevice, const std::string& _ip, size_t _port); void start(const PcmDevice& pcmDevice, const std::string& _ip, size_t _port, size_t latency);
void stop(); void stop();
virtual void onMessageReceived(ClientConnection* connection, const BaseMessage& baseMessage, char* buffer); virtual void onMessageReceived(ClientConnection* connection, const BaseMessage& baseMessage, char* buffer);
virtual void onException(ClientConnection* connection, const std::exception& exception); virtual void onException(ClientConnection* connection, const std::exception& exception);
@ -29,6 +29,7 @@ private:
std::shared_ptr<SampleFormat> sampleFormat; std::shared_ptr<SampleFormat> sampleFormat;
Decoder* decoder; Decoder* decoder;
PcmDevice pcmDevice_; PcmDevice pcmDevice_;
size_t latency_;
}; };

View file

@ -50,6 +50,7 @@ int main (int argc, char *argv[])
string ip; string ip;
// int bufferMs; // int bufferMs;
size_t port; size_t port;
size_t latency;
bool runAsDaemon; bool runAsDaemon;
bool listPcmDevices; bool listPcmDevices;
@ -62,6 +63,7 @@ int main (int argc, char *argv[])
("soundcard,s", po::value<string>(&soundcard)->default_value("default"), "index or name of the soundcard") ("soundcard,s", po::value<string>(&soundcard)->default_value("default"), "index or name of the soundcard")
// ("buffer,b", po::value<int>(&bufferMs)->default_value(300), "buffer size [ms]") // ("buffer,b", po::value<int>(&bufferMs)->default_value(300), "buffer size [ms]")
("daemon,d", po::bool_switch(&runAsDaemon)->default_value(false), "daemonize") ("daemon,d", po::bool_switch(&runAsDaemon)->default_value(false), "daemonize")
("latency", po::value<size_t>(&latency)->default_value(0), "latency")
; ;
po::variables_map vm; po::variables_map vm;
@ -101,7 +103,7 @@ int main (int argc, char *argv[])
Controller controller; Controller controller;
controller.start(pcmDevice, ip, port); controller.start(pcmDevice, ip, port, latency);
while(true) while(true)
usleep(10000); usleep(10000);

View file

@ -17,6 +17,7 @@ Stream::Stream(const SampleFormat& sampleFormat) : format(format_), format_(samp
bufferMs = msec(500); bufferMs = msec(500);
playedSamples = 0; playedSamples = 0;
playedSamplesTime = time_point_hrc::min();
/* /*
48000 x 48000 x
------- = ----- ------- = -----
@ -173,13 +174,17 @@ void Stream::resetBuffers()
bool Stream::getPlayerChunk(void* outputBuffer, const chronos::usec& outputBufferDacTime, unsigned long framesPerBuffer) bool Stream::getPlayerChunk(void* outputBuffer, const chronos::usec& outputBufferDacTime, unsigned long framesPerBuffer)
{ {
/*if (playedSamples == 0) /*if (playedSamplesTime == time_point_hrc::min())
playedSamplesTime = chronos::hrc::now() + outputBufferDacTime; playedSamplesTime = chronos::hrc::now() + outputBufferDacTime;
playedSamples += framesPerBuffer; else
chronos::msec since = std::chrono::duration_cast<msec>(chronos::hrc::now() + outputBufferDacTime - playedSamplesTime); {
if (since.count() > 0) playedSamples += framesPerBuffer;
cout << (double)playedSamples / (double)since.count() << "\n"; chronos::msec since = std::chrono::duration_cast<msec>(chronos::hrc::now() + outputBufferDacTime - playedSamplesTime);
if (since.count() > 0)
cout << (double)playedSamples / (double)since.count() << "\n";
}
*/ */
if (outputBufferDacTime > bufferMs) if (outputBufferDacTime > bufferMs)
return false; return false;