X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/4dadf1a26a3a9b619f7d91cbc435c7d9429d64d3..05b75f8d50b83e943af3be4071449304d82dbdcd:/lib/alsabg.c diff --git a/lib/alsabg.c b/lib/alsabg.c index 61648f4..336c2a3 100644 --- a/lib/alsabg.c +++ b/lib/alsabg.c @@ -21,11 +21,9 @@ * @brief Background-thread interface to ALSA */ -#include +#include "common.h" #if HAVE_ALSA_ASOUNDLIB_H -#include "types.h" - #include #include @@ -179,12 +177,14 @@ static void *alsa_bg_play(void attribute((unused)) *arg) { rframes = snd_pcm_writei(pcm, alsa_bg_buffer + start, nframes); ep(pthread_mutex_lock(&alsa_bg_lock)); if(rframes < 0) { - error(0, "snd_pcm_writei: %d", rframes); switch(rframes) { case -EPIPE: - if((err = snd_pcm_recover(pcm, -EPIPE, 0))) - fatal(0, "snd_pcm_recover: %d", err); + error(0, "underrun detected"); + if((err = snd_pcm_prepare(pcm))) + fatal(0, "snd_pcm_prepare: %d", err); break; + default: + fatal(0, "snd_pcm_writei: %d", rframes); } } else { const int rbytes = rframes * BYTES_PER_FRAME;