Check result of snd_pcm_avail_delay

This commit is contained in:
badaix 2020-02-01 23:23:06 +01:00
parent f301c55cb0
commit 71ed07a1d0

View file

@ -222,11 +222,18 @@ void AlsaPlayer::worker()
continue;
}
snd_pcm_avail_delay(handle_, &framesAvail, &framesDelay);
chronos::usec delay((chronos::usec::rep)(1000 * (double)framesDelay / format.msRate()));
// LOG(INFO) << "delay: " << framesDelay << ", delay[ms]: " << delay.count() / 1000 << "\n";
int result = snd_pcm_avail_delay(handle_, &framesAvail, &framesDelay);
if (result < 0)
{
LOG(WARNING) << "snd_pcm_avail_delay failed: " << snd_strerror(result) << "\n";
this_thread::sleep_for(10ms);
continue;
}
if (buffer_.size() < framesAvail * format.frameSize)
chronos::usec delay((chronos::usec::rep)(1000 * (double)framesDelay / format.msRate()));
// LOG(TRACE) << "delay: " << framesDelay << ", delay[ms]: " << delay.count() / 1000 << ", avail: " << framesAvail << "\n";
if (buffer_.size() < static_cast<size_t>(framesAvail * format.frameSize))
buffer_.resize(framesAvail * format.frameSize);
if (stream_->getPlayerChunk(buffer_.data(), delay, framesAvail))
{