From 180e51ad5d0c1b07ebaf1bb22487ae5cd6141986 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 19 Oct 2009 05:59:07 +0000 Subject: [PATCH] Added an untested code path for snd_pcm_wait() --- src/audio/alsa/SDL_alsa_audio.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/audio/alsa/SDL_alsa_audio.c b/src/audio/alsa/SDL_alsa_audio.c index 3798d2b27..122abf8f6 100644 --- a/src/audio/alsa/SDL_alsa_audio.c +++ b/src/audio/alsa/SDL_alsa_audio.c @@ -85,6 +85,7 @@ static int (*SDL_NAME(snd_pcm_sw_params_current))(snd_pcm_t *pcm, snd_pcm_sw_par static int (*SDL_NAME(snd_pcm_sw_params_set_start_threshold))(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val); static int (*SDL_NAME(snd_pcm_sw_params))(snd_pcm_t *pcm, snd_pcm_sw_params_t *params); static int (*SDL_NAME(snd_pcm_nonblock))(snd_pcm_t *pcm, int nonblock); +static int (*SDL_NAME(snd_pcm_wait))(snd_pcm_t *pcm, int timeout); #define snd_pcm_hw_params_sizeof SDL_NAME(snd_pcm_hw_params_sizeof) #define snd_pcm_sw_params_sizeof SDL_NAME(snd_pcm_sw_params_sizeof) @@ -120,6 +121,7 @@ static struct { { "snd_pcm_sw_params_set_start_threshold", (void**)(char*)&SDL_NAME(snd_pcm_sw_params_set_start_threshold) }, { "snd_pcm_sw_params", (void**)(char*)&SDL_NAME(snd_pcm_sw_params) }, { "snd_pcm_nonblock", (void**)(char*)&SDL_NAME(snd_pcm_nonblock) }, + { "snd_pcm_wait", (void**)(char*)&SDL_NAME(snd_pcm_wait) }, }; static void UnloadALSALibrary(void) { @@ -312,10 +314,13 @@ static void ALSA_PlayAudio(_THIS) frames_left = ((snd_pcm_uframes_t) this->spec.samples); while ( frames_left > 0 && this->enabled ) { + /* This works, but needs more testing before going live */ + /*SDL_NAME(snd_pcm_wait)(pcm_handle, -1);*/ + status = SDL_NAME(snd_pcm_writei)(pcm_handle, sample_buf, frames_left); if ( status < 0 ) { if ( status == -EAGAIN ) { - /* Apparently snd_pcm_recover() doesn't handle this. Foo. */ + /* Apparently snd_pcm_recover() doesn't handle this case - does it assume snd_pcm_wait() above? */ SDL_Delay(1); continue; }