From 27baf6913ea2415300c8d6650773e5eb10a01943 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 25 Jan 2009 12:52:37 +0100 Subject: alsa: fix option parsing and restore default period_time Two bugs here led to a large number of interrupts being generated on the sound card when ALSA output is being used. Because we specify no default period_time, the sound card gives us 3000 interrupts/sec rather than a more sane 20 or 30. This completes the revert of dd7711 already started by 4ca24f. The larger bug was in the change to config_get_block_unsigned() and using 0 as the default value for both 'buffer_time' and 'period_time'. This means any pre-setting of these options in newAlsaData() gets wiped out. Add a new default for period_time, and ensure default values for buffer_time and period_time are used if none are provided by the user. Signed-off-by: Dan McGee [mk: set defaults in newAlsaData() to fix auto-configuration; renamed "_MS" back to "_US" because ALSA expects microseconds, not milliseconds] Signed-off-by: Max Kellermann --- src/output/alsa_plugin.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/output/alsa_plugin.c') diff --git a/src/output/alsa_plugin.c b/src/output/alsa_plugin.c index b3520191e..bd6ccd83b 100644 --- a/src/output/alsa_plugin.c +++ b/src/output/alsa_plugin.c @@ -32,6 +32,7 @@ static const char default_device[] = "default"; enum { MPD_ALSA_BUFFER_TIME_US = 500000, + MPD_ALSA_PERIOD_TIME_US = 125000, }; #define MPD_ALSA_RETRY_NR 5 @@ -72,7 +73,7 @@ static AlsaData *newAlsaData(void) ret->writei = snd_pcm_writei; ret->useMmap = 0; ret->buffer_time = MPD_ALSA_BUFFER_TIME_US; - ret->period_time = 0; + ret->period_time = MPD_ALSA_PERIOD_TIME_US; //use alsa mixer by default mixer_init(&ret->mixer, &alsa_mixer); @@ -94,8 +95,10 @@ alsa_configure(AlsaData *ad, struct config_param *param) ad->useMmap = config_get_block_bool(param, "use_mmap", false); - ad->buffer_time = config_get_block_unsigned(param, "buffer_time", 0); - ad->period_time = config_get_block_unsigned(param, "period_time", 0); + ad->buffer_time = config_get_block_unsigned(param, "buffer_time", + MPD_ALSA_BUFFER_TIME_US); + ad->period_time = config_get_block_unsigned(param, "period_time", + MPD_ALSA_PERIOD_TIME_US); #ifdef SND_PCM_NO_AUTO_RESAMPLE if (!config_get_block_bool(param, "auto_resample", true)) -- cgit v1.2.3