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.
This commit is contained in:
Max Kellermann 2008-10-11 12:52:48 +02:00
parent bcc443a8aa
commit dd7711d86c

View File

@ -25,11 +25,6 @@
static const char default_device[] = "default"; 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 #define MPD_ALSA_RETRY_NR 5
#include "../utils.h" #include "../utils.h"
@ -58,8 +53,8 @@ static AlsaData *newAlsaData(void)
ret->pcmHandle = NULL; ret->pcmHandle = NULL;
ret->writei = snd_pcm_writei; ret->writei = snd_pcm_writei;
ret->useMmap = 0; ret->useMmap = 0;
ret->buffer_time = MPD_ALSA_BUFFER_TIME_US; ret->buffer_time = 0;
ret->period_time = MPD_ALSA_PERIOD_TIME_US; ret->period_time = 0;
return ret; return ret;
} }
@ -219,23 +214,27 @@ configure_hw:
} }
audioFormat->sample_rate = sample_rate; audioFormat->sample_rate = sample_rate;
if (ad->buffer_time > 0) {
buffer_time = ad->buffer_time; buffer_time = ad->buffer_time;
cmd = "snd_pcm_hw_params_set_buffer_time_near"; 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,
&buffer_time, NULL); &buffer_time, NULL);
if (err < 0) if (err < 0)
goto error; goto error;
}
if (period_time_ro > 0) {
period_time = period_time_ro; period_time = period_time_ro;
cmd = "snd_pcm_hw_params_set_period_time_near"; 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,
&period_time, NULL); &period_time, NULL);
if (err < 0) if (err < 0)
goto error; goto error;
}
cmd = "snd_pcm_hw_params"; cmd = "snd_pcm_hw_params";
err = snd_pcm_hw_params(ad->pcmHandle, hwparams); 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; period_time_ro = period_time_ro >> 1;
goto configure_hw; goto configure_hw;
} else if (err < 0) } else if (err < 0)