rounds alsa HW mixer volume towards ±∞ depending on sgn(∆ vol)

This alleviates a problem in which 'volume +1' cannot be undo by
'volume -1' when using alsa hw mixer.

Closes #104
This commit is contained in:
Stefano Miccoli
2017-12-12 23:42:42 +01:00
committed by Max Kellermann
parent f1ef9f9d31
commit 967af60327
2 changed files with 5 additions and 1 deletions

View File

@@ -292,7 +292,9 @@ AlsaMixer::SetVolume(unsigned volume)
{
assert(handle != nullptr);
int err = set_normalized_playback_volume(elem, 0.01*volume, 1);
double cur = get_normalized_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT);
int delta = volume - lrint(100.*cur);
int err = set_normalized_playback_volume(elem, cur + 0.01*delta, delta);
if (err < 0)
throw FormatRuntimeError("failed to set ALSA volume: %s",
snd_strerror(err));