From dd7711d86c502c8d302b791d19a836360e758e12 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 11 Oct 2008 12:52:48 +0200 Subject: alsa: don't override libasound's buffer_time and period_time ALSA does a good job measuring its buffer_time and period_time. Don't override its defaults, unless the user demands it. --- src/audioOutputs/audioOutput_alsa.c | 39 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'src/audioOutputs/audioOutput_alsa.c') diff --git a/src/audioOutputs/audioOutput_alsa.c b/src/audioOutputs/audioOutput_alsa.c index 52603cc62..8e3cbb9d6 100644 --- a/src/audioOutputs/audioOutput_alsa.c +++ b/src/audioOutputs/audioOutput_alsa.c @@ -25,11 +25,6 @@ static const char default_device[] = "default"; -#define MPD_ALSA_BUFFER_TIME_US 500000 -/* the default period time of xmms is 50 ms, so let's use that as well. - * a user can tweak this parameter via the "period_time" config parameter. - */ -#define MPD_ALSA_PERIOD_TIME_US 50000 #define MPD_ALSA_RETRY_NR 5 #include "../utils.h" @@ -58,8 +53,8 @@ static AlsaData *newAlsaData(void) ret->pcmHandle = NULL; ret->writei = snd_pcm_writei; ret->useMmap = 0; - ret->buffer_time = MPD_ALSA_BUFFER_TIME_US; - ret->period_time = MPD_ALSA_PERIOD_TIME_US; + ret->buffer_time = 0; + ret->period_time = 0; return ret; } @@ -219,23 +214,27 @@ configure_hw: } audioFormat->sample_rate = sample_rate; - buffer_time = ad->buffer_time; - cmd = "snd_pcm_hw_params_set_buffer_time_near"; - err = snd_pcm_hw_params_set_buffer_time_near(ad->pcmHandle, hwparams, - &buffer_time, NULL); - if (err < 0) - goto error; + if (ad->buffer_time > 0) { + buffer_time = ad->buffer_time; + cmd = "snd_pcm_hw_params_set_buffer_time_near"; + err = snd_pcm_hw_params_set_buffer_time_near(ad->pcmHandle, hwparams, + &buffer_time, NULL); + if (err < 0) + goto error; + } - period_time = period_time_ro; - cmd = "snd_pcm_hw_params_set_period_time_near"; - err = snd_pcm_hw_params_set_period_time_near(ad->pcmHandle, hwparams, - &period_time, NULL); - if (err < 0) - goto error; + if (period_time_ro > 0) { + period_time = period_time_ro; + cmd = "snd_pcm_hw_params_set_period_time_near"; + err = snd_pcm_hw_params_set_period_time_near(ad->pcmHandle, hwparams, + &period_time, NULL); + if (err < 0) + goto error; + } cmd = "snd_pcm_hw_params"; err = snd_pcm_hw_params(ad->pcmHandle, hwparams); - if (err == -EPIPE && --retry > 0) { + if (err == -EPIPE && --retry > 0 && period_time_ro > 0) { period_time_ro = period_time_ro >> 1; goto configure_hw; } else if (err < 0) -- cgit v1.2.3