mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2026-02-05 04:06:34 -05:00
snd_tlv_convert_to_dB: Fix mute handling for MINMAX_MUTE type
Ensure the SND_CTL_TLV_DB_GAIN_MUTE value is returned when the calculated gain equals the minimum dB value for the SNDRV_CTL_TLVT_DB_MINMAX_MUTE type. The previous check based solely on the volume value could miss cases where the linear calculation resulted in the minimum gain. Closes: https://github.com/alsa-project/alsa-lib/pull/478 Signed-off-by: qaqland <anguoli@uniontech.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
f77ab152b8
commit
41039b49ad
1 changed files with 8 additions and 7 deletions
|
|
@ -246,16 +246,17 @@ int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
|
|||
int mindb, maxdb;
|
||||
mindb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MIN];
|
||||
maxdb = tlv[SNDRV_CTL_TLVO_DB_MINMAX_MAX];
|
||||
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;
|
||||
if (rangemax <= rangemin)
|
||||
*db_gain = 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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue