From 75d630d07d325ca8ac895dc23186819c00003926 Mon Sep 17 00:00:00 2001 From: Alexey Yakovenko Date: Sun, 27 Sep 2009 22:14:12 +0200 Subject: added more diagnostics to alsa --- palsa.c | 51 ++++++++++++++++++++++----------------------------- 1 file changed, 22 insertions(+), 29 deletions(-) (limited to 'palsa.c') diff --git a/palsa.c b/palsa.c index df71eb51..e2c21cc8 100644 --- a/palsa.c +++ b/palsa.c @@ -31,6 +31,9 @@ #include "messagepump.h" #include "messages.h" +#define trace(...) { fprintf(stderr, __VA_ARGS__); } +//#define trace(fmt,...) + static snd_pcm_t *audio; static int16_t *samplebuffer; static int bufsize = 2048*4; @@ -56,25 +59,25 @@ palsa_init (void) { alsa_rate = conf_samplerate; if ((err = snd_pcm_open (&audio, conf_alsa_soundcard, SND_PCM_STREAM_PLAYBACK, 0))) { - fprintf (stderr, "could not open audio device (%s)\n", + trace ("could not open audio device (%s)\n", snd_strerror (err)); exit (-1); } if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0) { - fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n", + trace ("cannot allocate hardware parameter structure (%s)\n", snd_strerror (err)); goto open_error; } if ((err = snd_pcm_hw_params_any (audio, hw_params)) < 0) { - fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n", + trace ("cannot initialize hardware parameter structure (%s)\n", snd_strerror (err)); goto open_error; } if ((err = snd_pcm_hw_params_set_access (audio, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) { - fprintf (stderr, "cannot set access type (%s)\n", + trace ("cannot set access type (%s)\n", snd_strerror (err)); goto open_error; } @@ -86,7 +89,7 @@ palsa_init (void) { fmt = SND_PCM_FORMAT_S16_LE; #endif if ((err = snd_pcm_hw_params_set_format (audio, hw_params, fmt)) < 0) { - fprintf (stderr, "cannot set sample format (%s)\n", + trace ("cannot set sample format (%s)\n", snd_strerror (err)); goto open_error; } @@ -100,7 +103,7 @@ palsa_init (void) { int ret = 0; if ((err = snd_pcm_hw_params_set_rate_near (audio, hw_params, &val, &ret)) < 0) { - fprintf (stderr, "cannot set sample rate (%s)\n", + trace ("cannot set sample rate (%s)\n", snd_strerror (err)); goto open_error; } @@ -108,7 +111,7 @@ palsa_init (void) { printf ("chosen samplerate: %d\n", alsa_rate); if ((err = snd_pcm_hw_params_set_channels (audio, hw_params, 2)) < 0) { - fprintf (stderr, "cannot set channel count (%s)\n", + trace ("cannot set channel count (%s)\n", snd_strerror (err)); goto open_error; } @@ -118,7 +121,7 @@ palsa_init (void) { printf ("nchannels: %d\n", nchan); if ((err = snd_pcm_hw_params (audio, hw_params)) < 0) { - fprintf (stderr, "cannot set parameters (%s)\n", + trace ("cannot set parameters (%s)\n", snd_strerror (err)); goto open_error; } @@ -126,17 +129,17 @@ palsa_init (void) { snd_pcm_hw_params_free (hw_params); if ((err = snd_pcm_sw_params_malloc (&sw_params)) < 0) { - fprintf (stderr, "cannot allocate software parameters structure (%s)\n", + trace ("cannot allocate software parameters structure (%s)\n", snd_strerror (err)); goto open_error; } if ((err = snd_pcm_sw_params_current (audio, sw_params)) < 0) { - fprintf (stderr, "cannot initialize software parameters structure (%s)\n", + trace ("cannot initialize software parameters structure (%s)\n", snd_strerror (err)); goto open_error; } if ((err = snd_pcm_sw_params_set_avail_min (audio, sw_params, bufsize/4)) < 0) { - fprintf (stderr, "cannot set minimum available count (%s)\n", + trace ("cannot set minimum available count (%s)\n", snd_strerror (err)); goto open_error; } @@ -147,12 +150,12 @@ palsa_init (void) { bufsize = nsamp * 4; if ((err = snd_pcm_sw_params_set_start_threshold (audio, sw_params, 0U)) < 0) { - fprintf (stderr, "cannot set start mode (%s)\n", + trace ("cannot set start mode (%s)\n", snd_strerror (err)); goto open_error; } if ((err = snd_pcm_sw_params (audio, sw_params)) < 0) { - fprintf (stderr, "cannot set software parameters (%s)\n", + trace ("cannot set software parameters (%s)\n", snd_strerror (err)); goto open_error; } @@ -162,7 +165,7 @@ palsa_init (void) { */ if ((err = snd_pcm_prepare (audio)) < 0) { - fprintf (stderr, "cannot prepare audio interface for use (%s)\n", + trace ("cannot prepare audio interface for use (%s)\n", snd_strerror (err)); goto open_error; } @@ -238,7 +241,7 @@ palsa_play (void) { int err; if (state == 0) { if ((err = snd_pcm_prepare (audio)) < 0) { - fprintf (stderr, "cannot prepare audio interface for use (%s)\n", + trace ("cannot prepare audio interface for use (%s)\n", snd_strerror (err)); } streamer_reset (1); @@ -310,20 +313,10 @@ palsa_thread (uintptr_t context) { has elapsed. */ if ((err = snd_pcm_wait (audio, 1000)) < 0 && state == 1) { + trace ("snd_pcm_wait failed, restarting alsa\n"); messagepump_push (M_REINIT_SOUND, 0, 0, 0); mutex_unlock (mutex); break; -#if 0 - fprintf (stderr, "alsa poll failed (%s)\n", strerror (errno)); - if ((err = snd_pcm_prepare (audio)) < 0) { - fprintf (stderr, "cannot prepare audio interface for use (%s)\n", - snd_strerror (err)); - } - snd_pcm_prepare (audio); - snd_pcm_start (audio); - mutex_unlock (mutex); - continue; -#endif } /* find out how much space is available for playback data */ @@ -332,11 +325,11 @@ palsa_thread (uintptr_t context) { if ((frames_to_deliver = snd_pcm_avail_update (audio)) < 0) { if (frames_to_deliver == -EPIPE) { mutex_unlock (mutex); - fprintf (stderr, "an xrun occured\n"); + trace ("an xrun occured\n"); continue; } else { mutex_unlock (mutex); - fprintf (stderr, "unknown ALSA avail update return value (%d)\n", + trace ("unknown ALSA avail update return value (%d)\n", (int)frames_to_deliver); continue; } @@ -348,7 +341,7 @@ palsa_thread (uintptr_t context) { char buf[bufsize]; palsa_callback (buf, frames_to_deliver*4); if ((err = snd_pcm_writei (audio, buf, frames_to_deliver)) < 0) { - //fprintf (stderr, "write failed (%s)\n", snd_strerror (err)); + trace ("write %d frames failed (%s)\n", frames_to_deliver, snd_strerror (err)); snd_pcm_prepare (audio); snd_pcm_start (audio); } -- cgit v1.2.3