mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-12-22 06:56:31 +01:00
alsamixer: fix calculation in set_normalized_volume (overflow)
Lowering volume below 0 causes overflow spike to 100% volume (volume goes below 0 and back to 100 repeatedly). 0 overflows past infinity when holding down z,x,c. > value = lrint_dir(6000.0 * log10(volume), dir) + max; (where volume = 0 , and dir = -1 . min = -9999999 , and max = -6) > log10(0) is negative infinity = error Fixes: https://github.com/alsa-project/alsa-utils/pull/266 Reported-by: genr8eofl <genBTC@gmx.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
cc0bcef813
commit
84d0a91f11
1 changed files with 2 additions and 0 deletions
|
@ -146,6 +146,8 @@ static int set_normalized_volume(snd_mixer_elem_t *elem,
|
||||||
min_norm = pow(10, (min - max) / 6000.0);
|
min_norm = pow(10, (min - max) / 6000.0);
|
||||||
volume = volume * (1 - min_norm) + min_norm;
|
volume = volume * (1 - min_norm) + min_norm;
|
||||||
}
|
}
|
||||||
|
if (volume <= 0)
|
||||||
|
volume = 1e-36;
|
||||||
value = lrint_dir(6000.0 * log10(volume), dir) + max;
|
value = lrint_dir(6000.0 * log10(volume), dir) + max;
|
||||||
return set_dB[ctl_dir](elem, channel, value, dir);
|
return set_dB[ctl_dir](elem, channel, value, dir);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue