aboutsummaryrefslogtreecommitdiffstats
path: root/src/output/alsa_plugin.c
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2009-01-25 12:52:37 +0100
committerMax Kellermann <max@duempel.org>2009-01-25 12:52:37 +0100
commit27baf6913ea2415300c8d6650773e5eb10a01943 (patch)
treec56c322022e91b0e096cb0f29d76685e0a571262 /src/output/alsa_plugin.c
parent16796b1209dc1070c08c4a5996d691aa289a4481 (diff)
downloadmpd-27baf6913ea2415300c8d6650773e5eb10a01943.tar.gz
mpd-27baf6913ea2415300c8d6650773e5eb10a01943.tar.xz
mpd-27baf6913ea2415300c8d6650773e5eb10a01943.zip
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 <dan@archlinux.org> [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 <max@duempel.org>
Diffstat (limited to 'src/output/alsa_plugin.c')
-rw-r--r--src/output/alsa_plugin.c9
1 files changed, 6 insertions, 3 deletions
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))