diff --git a/src/control/tlv.c b/src/control/tlv.c index 271da984..cc60703d 100644 --- a/src/control/tlv.c +++ b/src/control/tlv.c @@ -246,17 +246,16 @@ 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 (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; - 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