diff options
author | Marcel Hollerbach <marcel-hollerbach@t-online.de> | 2017-02-04 23:00:23 +0100 |
---|---|---|
committer | Marcel Hollerbach <marcel-hollerbach@t-online.de> | 2017-02-04 23:00:23 +0100 |
commit | 95b4f4b180e7dae4b7e27dd5cd67d45761095909 (patch) | |
tree | 559f56c6bc604f353ccf9e107a9a9e96bae25649 | |
parent | 55a7d4feed1b94469e7fcbb94405f7451eb4185f (diff) | |
download | enlightenment-devs/bu5hm4n/mixer_fix_range.tar.gz |
alsa: try to figure out if a device can handle volume by asking for itsdevs/bu5hm4n/mixer_fix_range
range
there are some buggy devices that are just return false for the has
function but actually have a min and max on those devices,so we use that
to check if its sink/source capable.
-rw-r--r-- | src/modules/mixer/lib/backends/alsa/alsa.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/modules/mixer/lib/backends/alsa/alsa.c b/src/modules/mixer/lib/backends/alsa/alsa.c index 063cb23c5e..89e6842b50 100644 --- a/src/modules/mixer/lib/backends/alsa/alsa.c +++ b/src/modules/mixer/lib/backends/alsa/alsa.c @@ -304,15 +304,28 @@ _alsa_cards_refresh(void) elem = snd_mixer_first_elem(mixer); for (; elem; elem = snd_mixer_elem_next(elem)) { + long min = 0, max = 0; if (strncmp(snd_mixer_selem_get_name(elem), "Master", sizeof("Master") - 1)) continue; //check if its a source or a sink - if (snd_mixer_selem_has_capture_volume(elem)) - tmp_source = eina_list_append(tmp_source, elem); - else if (snd_mixer_selem_has_playback_volume(elem)) - tmp_sink = eina_list_append(tmp_sink, elem); + snd_mixer_selem_get_capture_volume_range(elem, &min, &max); + DBG("Mixer element %p of dev %d has range %ld %ld", elem, card_num, min, max); + if (min < max) + { + tmp_source = eina_list_append(tmp_source, elem); + continue; + } + + min = max = 0; + snd_mixer_selem_get_playback_volume_range(elem, &min, &max); + DBG("Mixer element %p of dev %d has range %ld %ld", elem, card_num, min, max); + if (min < max) + { + tmp_sink = eina_list_append(tmp_sink, elem); + continue; + } } device_name = _alsa_cards_name_get(buf); |