chiark / gitweb /
Source code reorganization:
[disorder] / lib / alsabg.c
index 61648f4af0a2d4ac2602a0f078af87b474d16dd4..336c2a3320adb6c77699d045ed89759744aa4131 100644 (file)
  * @brief Background-thread interface to ALSA
  */
 
  * @brief Background-thread interface to ALSA
  */
 
-#include <config.h>
+#include "common.h"
 
 #if HAVE_ALSA_ASOUNDLIB_H
 
 #if HAVE_ALSA_ASOUNDLIB_H
-#include "types.h"
-
 #include <alsa/asoundlib.h>
 #include <pthread.h>
 
 #include <alsa/asoundlib.h>
 #include <pthread.h>
 
@@ -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) {
     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:
       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;
         break;
+      default:
+        fatal(0, "snd_pcm_writei: %d", rframes);
       }
     } else {
       const int rbytes = rframes * BYTES_PER_FRAME;
       }
     } else {
       const int rbytes = rframes * BYTES_PER_FRAME;