diff options
Diffstat (limited to 'libao2')
-rw-r--r-- | libao2/ao_alsa1x.c | 20 | ||||
-rw-r--r-- | libao2/ao_alsa9.c | 20 |
2 files changed, 36 insertions, 4 deletions
diff --git a/libao2/ao_alsa1x.c b/libao2/ao_alsa1x.c index ce43b7e843..4648ef956a 100644 --- a/libao2/ao_alsa1x.c +++ b/libao2/ao_alsa1x.c @@ -18,6 +18,7 @@ #include <sys/poll.h> #include "../config.h" +#include "../mixer.h" #if HAVE_SYS_ASOUNDLIB_H #include <sys/asoundlib.h> @@ -96,13 +97,28 @@ static int control(int cmd, void *arg) snd_mixer_elem_t *elem; snd_mixer_selem_id_t *sid; - const char *mix_name = "PCM"; - char *card = "default"; + static const char *mix_name = NULL; + static char *card = NULL; long pmin, pmax; long get_vol, set_vol; float calc_vol, diff, f_multi; + if(mix_name == NULL){ + if(mixer_device) { + card = strdup(mixer_device); + mix_name = strchr(card, '/'); + if(mix_name) { + *mix_name++ = 0; + } else { + mix_name = "PCM"; + } + } else { + mix_name = "PCM"; + card = "default"; + } + } + if(ao_data.format == AFMT_AC3) return CONTROL_TRUE; diff --git a/libao2/ao_alsa9.c b/libao2/ao_alsa9.c index ce43b7e843..4648ef956a 100644 --- a/libao2/ao_alsa9.c +++ b/libao2/ao_alsa9.c @@ -18,6 +18,7 @@ #include <sys/poll.h> #include "../config.h" +#include "../mixer.h" #if HAVE_SYS_ASOUNDLIB_H #include <sys/asoundlib.h> @@ -96,13 +97,28 @@ static int control(int cmd, void *arg) snd_mixer_elem_t *elem; snd_mixer_selem_id_t *sid; - const char *mix_name = "PCM"; - char *card = "default"; + static const char *mix_name = NULL; + static char *card = NULL; long pmin, pmax; long get_vol, set_vol; float calc_vol, diff, f_multi; + if(mix_name == NULL){ + if(mixer_device) { + card = strdup(mixer_device); + mix_name = strchr(card, '/'); + if(mix_name) { + *mix_name++ = 0; + } else { + mix_name = "PCM"; + } + } else { + mix_name = "PCM"; + card = "default"; + } + } + if(ao_data.format == AFMT_AC3) return CONTROL_TRUE; |