Commit 1b889c52 authored by Max Kellermann's avatar Max Kellermann

mixer/alsa: move code to alsa_mixer_lookup_elem()

parent 9937ff8a
......@@ -91,12 +91,28 @@ alsa_mixer_close(struct mixer *data)
snd_mixer_close(am->handle);
}
G_GNUC_PURE
static snd_mixer_elem_t *
alsa_mixer_lookup_elem(snd_mixer_t *handle, const char *name, unsigned idx)
{
for (snd_mixer_elem_t *elem = snd_mixer_first_elem(handle);
elem != NULL; elem = snd_mixer_elem_next(elem)) {
if (snd_mixer_elem_get_type(elem) == SND_MIXER_ELEM_SIMPLE &&
g_ascii_strcasecmp(snd_mixer_selem_get_name(elem),
name) == 0 &&
snd_mixer_selem_get_index(elem) == idx)
return elem;
}
return NULL;
}
static bool
alsa_mixer_open(struct mixer *data, GError **error_r)
{
struct alsa_mixer *am = (struct alsa_mixer *)data;
int err;
snd_mixer_elem_t *elem;
am->volume_set = -1;
......@@ -132,31 +148,18 @@ alsa_mixer_open(struct mixer *data, GError **error_r)
return false;
}
elem = snd_mixer_first_elem(am->handle);
while (elem) {
if (snd_mixer_elem_get_type(elem) == SND_MIXER_ELEM_SIMPLE) {
if ((g_ascii_strcasecmp(am->control,
snd_mixer_selem_get_name(elem)) == 0) &&
(am->index == snd_mixer_selem_get_index(elem))) {
break;
}
}
elem = snd_mixer_elem_next(elem);
}
if (elem) {
am->elem = elem;
snd_mixer_selem_get_playback_volume_range(am->elem,
&am->volume_min,
&am->volume_max);
return true;
am->elem = alsa_mixer_lookup_elem(am->handle, am->control, am->index);
if (am->elem == NULL) {
alsa_mixer_close(data);
g_set_error(error_r, alsa_mixer_quark(), 0,
"no such mixer control: %s", am->control);
return false;
}
alsa_mixer_close(data);
g_set_error(error_r, alsa_mixer_quark(), 0,
"no such mixer control: %s", am->control);
return false;
snd_mixer_selem_get_playback_volume_range(am->elem,
&am->volume_min,
&am->volume_max);
return true;
}
static int
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment