This reverts commit
41039b49ad3e20506134864028c77aeaba4c0d51.
SND_CTL_TLVT_DB_MINMAX_MUTE means that the hardware is muted on lowest
hardware volume value (not on lowest dB value).
Analysis:
Range: min=0, max=7248
dB: min=-2837, max=-6
dB span: 2831 centibels (28.31 dB)
Volume | After revert/origin | PR#478 behavior
-------|---------------------|----------------------
0 | MUTE | MUTE
1 | -2837 (-28.37 dB) | MUTE <- DIFFERS!
2 | -2837 (-28.37 dB) | MUTE <- DIFFERS!
5 | -2836 (-28.36 dB) | -2836 (-28.36 dB)
10 | -2834 (-28.34 dB) | -2834 (-28.34 dB)
50 | -2818 (-28.18 dB) | -2818 (-28.18 dB)
Range: min=0, max=999
dB: min=0, max=390
dB span: 390 centibels (3.90 dB)
Volume | After revert/origin | PR#478 behavior
-------|---------------------|----------------------
0 | MUTE | MUTE
1 | 0 (0.00 dB) | MUTE <- DIFFERS!
2 | 0 (0.00 dB) | MUTE <- DIFFERS!
5 | 1 (0.01 dB) | 1 (0.01 dB)
10 | 3 (0.03 dB) | 3 (0.03 dB)
50 | 19 (0.19 dB) | 19 (0.19 dB)
Fixes: https://github.com/alsa-project/alsa-lib/issues/504
Link: https://github.com/alsa-project/alsa-lib/pull/478
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
int mindb, maxdb;
mindb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MIN];
maxdb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
int mindb, maxdb;
mindb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MIN];
maxdb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
- if (rangemax <= rangemin)
- *db_gain = mindb;
+ if (volume <= rangemin || rangemax <= rangemin) {
+ if (type == SND_CTL_TLVT_DB_MINMAX_MUTE)
+ *db_gain = SND_CTL_TLV_DB_GAIN_MUTE;
+ else
+ *db_gain = mindb;
+ } else if (volume >= rangemax)
+ *db_gain = maxdb;
else
*db_gain = (maxdb - mindb) * (volume - rangemin) /
(rangemax - rangemin) + mindb;
else
*db_gain = (maxdb - mindb) * (volume - rangemin) /
(rangemax - rangemin) + mindb;
- if (*db_gain < mindb)
- *db_gain = mindb;
- if (*db_gain > maxdb)
- *db_gain = maxdb;
- if (type == SND_CTL_TLVT_DB_MINMAX_MUTE && *db_gain == mindb)
- *db_gain = SND_CTL_TLV_DB_GAIN_MUTE;
return 0;
}
#ifndef HAVE_SOFT_FLOAT
return 0;
}
#ifndef HAVE_SOFT_FLOAT