clamp 'set_normalized_volume' to valid values also for ALSA softvol
ensure that valid mixer values are set also when the ALSA driver does not report a valid dB range ('set_raw' fallback) correct a bug in which volume is assumed to lie in [0..100] instead of [0..1]
This commit is contained in:
parent
b14a5141a6
commit
6d48a5684a
|
@ -135,6 +135,13 @@ static int set_normalized_volume(snd_mixer_elem_t *elem,
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
/* two special cases to avoid rounding errors at 0% and
|
||||||
|
100% */
|
||||||
|
if (volume <= 0)
|
||||||
|
return set_raw[ctl_dir](elem, min);
|
||||||
|
else if (volume >= 1)
|
||||||
|
return set_raw[ctl_dir](elem, max);
|
||||||
|
|
||||||
value = lrint_dir(volume * (max - min), dir) + min;
|
value = lrint_dir(volume * (max - min), dir) + min;
|
||||||
return set_raw[ctl_dir](elem, value);
|
return set_raw[ctl_dir](elem, value);
|
||||||
}
|
}
|
||||||
|
@ -143,7 +150,7 @@ static int set_normalized_volume(snd_mixer_elem_t *elem,
|
||||||
100% */
|
100% */
|
||||||
if (volume <= 0)
|
if (volume <= 0)
|
||||||
return set_dB[ctl_dir](elem, min, dir);
|
return set_dB[ctl_dir](elem, min, dir);
|
||||||
else if (volume >= 100)
|
else if (volume >= 1)
|
||||||
return set_dB[ctl_dir](elem, max, dir);
|
return set_dB[ctl_dir](elem, max, dir);
|
||||||
|
|
||||||
if (use_linear_dB_scale(min, max)) {
|
if (use_linear_dB_scale(min, max)) {
|
||||||
|
|
Loading…
Reference in New Issue