changeset 4363:028d26915548 SDL-1.2

Added an untested code path for snd_pcm_wait()
author Sam Lantinga <slouken@libsdl.org>
date Mon, 19 Oct 2009 05:59:07 +0000
parents e48a66bed093
children ae3d564e2716
files src/audio/alsa/SDL_alsa_audio.c
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/audio/alsa/SDL_alsa_audio.c	Mon Oct 19 05:24:48 2009 +0000
+++ b/src/audio/alsa/SDL_alsa_audio.c	Mon Oct 19 05:59:07 2009 +0000
@@ -85,6 +85,7 @@
 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 @@
 	{ "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 @@
 	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;
 			}