improved alsa error handling

This commit is contained in:
badaix 2015-04-07 17:21:09 +00:00
parent a9d1ac387b
commit 74cdd5ea64
3 changed files with 82 additions and 41 deletions

View file

@ -243,7 +243,7 @@ bool Stream::getPlayerChunk(void* outputBuffer, const cs::usec& outputBufferDacT
{
logO << "sleep > bufferDuration/2: " << cs::duration<cs::msec>(sleep_) << " > " << cs::duration<cs::msec>(bufferDuration)/2 << "\n";
// We're late: discard oldest chunks
do
while (sleep_ > chunk_->duration<cs::usec>())
{
logO << "sleep > chunkDuration: " << cs::duration<cs::msec>(sleep_) << " > " << chunk_->duration<cs::msec>().count() << ", chunks: " << chunks_.size() << ", out: " << cs::duration<cs::msec>(outputBufferDacTime) << ", needed: " << cs::duration<cs::msec>(bufferDuration) << "\n";
sleep_ = std::chrono::duration_cast<cs::usec>(TimeProvider::serverNow() - chunk_->start() - bufferMs_ + outputBufferDacTime);
@ -255,7 +255,6 @@ bool Stream::getPlayerChunk(void* outputBuffer, const cs::usec& outputBufferDacT
return false;
}
}
while (sleep_ > chunk_->duration<cs::usec>());
}
// out of sync, can be corrected by playing faster/slower