Commit 3d81a723 authored by Warren Dukes's avatar Warren Dukes

slight changes to alsa errors

git-svn-id: https://svn.musicpd.org/mpd/trunk@3072 09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent 5ba5832f
...@@ -119,6 +119,7 @@ static int alsa_openDevice(AudioOutput * audioOutput) ...@@ -119,6 +119,7 @@ static int alsa_openDevice(AudioOutput * audioOutput)
unsigned int alsa_buffer_time = MPD_ALSA_BUFFER_TIME; unsigned int alsa_buffer_time = MPD_ALSA_BUFFER_TIME;
unsigned int alsa_period_time = MPD_ALSA_PERIOD_TIME; unsigned int alsa_period_time = MPD_ALSA_PERIOD_TIME;
int err; int err;
char * cmd = NULL;
switch(audioFormat->bits) { switch(audioFormat->bits) {
case 8: case 8:
...@@ -146,12 +147,14 @@ static int alsa_openDevice(AudioOutput * audioOutput) ...@@ -146,12 +147,14 @@ static int alsa_openDevice(AudioOutput * audioOutput)
goto error; goto error;
} }
cmd = "snd_pcm_nonblock";
err = snd_pcm_nonblock(ad->pcmHandle, 0); err = snd_pcm_nonblock(ad->pcmHandle, 0);
if(err < 0) goto error; if(err < 0) goto error;
/* configure HW params */ /* configure HW params */
snd_pcm_hw_params_alloca(&hwparams); snd_pcm_hw_params_alloca(&hwparams);
cmd = "snd_pcm_hw_params_any";
err = snd_pcm_hw_params_any(ad->pcmHandle, hwparams); err = snd_pcm_hw_params_any(ad->pcmHandle, hwparams);
if(err < 0) goto error; if(err < 0) goto error;
...@@ -169,6 +172,7 @@ static int alsa_openDevice(AudioOutput * audioOutput) ...@@ -169,6 +172,7 @@ static int alsa_openDevice(AudioOutput * audioOutput)
} }
if(!ad->useMmap) { if(!ad->useMmap) {
cmd = "snd_pcm_hw_params_set_access";
err = snd_pcm_hw_params_set_access(ad->pcmHandle, hwparams, err = snd_pcm_hw_params_set_access(ad->pcmHandle, hwparams,
SND_PCM_ACCESS_RW_INTERLEAVED); SND_PCM_ACCESS_RW_INTERLEAVED);
if(err < 0) goto error; if(err < 0) goto error;
...@@ -202,20 +206,25 @@ static int alsa_openDevice(AudioOutput * audioOutput) ...@@ -202,20 +206,25 @@ static int alsa_openDevice(AudioOutput * audioOutput)
} }
audioFormat->sampleRate = sampleRate; audioFormat->sampleRate = sampleRate;
cmd = "snd_pcm_hw_params_set_buffer_time_near";
err = snd_pcm_hw_params_set_buffer_time_near(ad->pcmHandle, hwparams, err = snd_pcm_hw_params_set_buffer_time_near(ad->pcmHandle, hwparams,
&alsa_buffer_time, 0); &alsa_buffer_time, 0);
if(err < 0) goto error; if(err < 0) goto error;
cmd = "snd_pcm_hw_params_set_period_time_near";
err = snd_pcm_hw_params_set_period_time_near(ad->pcmHandle, hwparams, err = snd_pcm_hw_params_set_period_time_near(ad->pcmHandle, hwparams,
&alsa_period_time, 0); &alsa_period_time, 0);
if(err < 0) goto error; if(err < 0) goto error;
cmd = "snd_pcm_hw_params";
err = snd_pcm_hw_params(ad->pcmHandle, hwparams); err = snd_pcm_hw_params(ad->pcmHandle, hwparams);
if(err < 0) goto error; if(err < 0) goto error;
cmd = "snd_pcm_hw_params_get_buffer_size";
err = snd_pcm_hw_params_get_buffer_size(hwparams, &alsa_buffer_size); err = snd_pcm_hw_params_get_buffer_size(hwparams, &alsa_buffer_size);
if(err < 0) goto error; if(err < 0) goto error;
cmd = "snd_pcm_hw_params_get_period_size";
err = snd_pcm_hw_params_get_period_size(hwparams, &alsa_period_size, 0); err = snd_pcm_hw_params_get_period_size(hwparams, &alsa_period_size, 0);
if(err < 0) goto error; if(err < 0) goto error;
...@@ -224,12 +233,26 @@ static int alsa_openDevice(AudioOutput * audioOutput) ...@@ -224,12 +233,26 @@ static int alsa_openDevice(AudioOutput * audioOutput)
/* configure SW params */ /* configure SW params */
snd_pcm_sw_params_alloca(&swparams); snd_pcm_sw_params_alloca(&swparams);
snd_pcm_sw_params_current(ad->pcmHandle, swparams);
cmd = "snd_pcm_sw_params_current";
err = snd_pcm_sw_params_current(ad->pcmHandle, swparams);
if(err < 0) goto error;
cmd = "snd_pcm_sw_params_set_start_threshold";
err = snd_pcm_sw_params_set_start_threshold(ad->pcmHandle, swparams, err = snd_pcm_sw_params_set_start_threshold(ad->pcmHandle, swparams,
alsa_buffer_size - alsa_period_size); alsa_buffer_size - alsa_period_size);
if(err < 0) goto error; if(err < 0) goto error;
cmd = "snd_pcm_sw_params_set_avail_min";
err = snd_pcm_sw_params_set_avail_min(ad->pcmHandle, swparams,
alsa_period_size);
if(err < 0) goto error;
cmd = "snd_pcm_sw_params_set_xfer_align";
err = snd_pcm_sw_params_set_xfer_align(ad->pcmHandle, swparams, 1);
if(err < 0) goto error;
cmd = "snd_pcm_sw_params";
err = snd_pcm_sw_params(ad->pcmHandle, swparams); err = snd_pcm_sw_params(ad->pcmHandle, swparams);
if(err < 0) goto error; if(err < 0) goto error;
...@@ -243,8 +266,14 @@ static int alsa_openDevice(AudioOutput * audioOutput) ...@@ -243,8 +266,14 @@ static int alsa_openDevice(AudioOutput * audioOutput)
return 0; return 0;
error: error:
if(cmd) {
ERROR("Error opening alsa device \"%s\" (%s): %s\n",
ad->device, cmd, snd_strerror(-err));
}
else {
ERROR("Error opening alsa device \"%s\": %s\n", ad->device, ERROR("Error opening alsa device \"%s\": %s\n", ad->device,
snd_strerror(-err)); snd_strerror(-err));
}
fail: fail:
if(ad->pcmHandle) snd_pcm_close(ad->pcmHandle); if(ad->pcmHandle) snd_pcm_close(ad->pcmHandle);
ad->pcmHandle = NULL; ad->pcmHandle = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment