mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
Add the support of TLV_DB_MINMAX types
Added the support of the new TLV_DB_MINMAX types. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
e5ca075cde
commit
f8a34aa683
2 changed files with 43 additions and 0 deletions
|
|
@ -174,6 +174,10 @@ typedef enum _snd_ctl_event_type {
|
|||
#define SND_CTL_TLVT_DB_LINEAR 0x0002
|
||||
/** TLV type - dB range container */
|
||||
#define SND_CTL_TLVT_DB_RANGE 0x0003
|
||||
/** TLV type - dB scale specified by min/max values */
|
||||
#define SND_CTL_TLVT_DB_MINMAX 0x0004
|
||||
/** TLV type - dB scale specified by min/max values (with mute) */
|
||||
#define SND_CTL_TLVT_DB_MINMAX_MUTE 0x0005
|
||||
|
||||
/** Mute state */
|
||||
#define SND_CTL_TLV_DB_GAIN_MUTE -9999999
|
||||
|
|
|
|||
|
|
@ -89,6 +89,8 @@ int snd_tlv_parse_dB_info(unsigned int *tlv,
|
|||
}
|
||||
break;
|
||||
case SND_CTL_TLVT_DB_SCALE:
|
||||
case SND_CTL_TLVT_DB_MINMAX:
|
||||
case SND_CTL_TLVT_DB_MINMAX_MUTE:
|
||||
#ifndef HAVE_SOFT_FLOAT
|
||||
case SND_CTL_TLVT_DB_LINEAR:
|
||||
#endif
|
||||
|
|
@ -165,6 +167,8 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax,
|
|||
*max = *min + (long)(step * (rangemax - rangemin));
|
||||
return 0;
|
||||
}
|
||||
case SND_CTL_TLVT_DB_MINMAX:
|
||||
case SND_CTL_TLVT_DB_MINMAX_MUTE:
|
||||
case SND_CTL_TLVT_DB_LINEAR:
|
||||
*min = (int)tlv[2];
|
||||
*max = (int)tlv[3];
|
||||
|
|
@ -214,6 +218,23 @@ int snd_tlv_convert_to_dB(unsigned int *tlv, long rangemin, long rangemax,
|
|||
*db_gain = (volume - rangemin) * step + min;
|
||||
return 0;
|
||||
}
|
||||
case SND_CTL_TLVT_DB_MINMAX:
|
||||
case SND_CTL_TLVT_DB_MINMAX_MUTE: {
|
||||
int mindb, maxdb;
|
||||
mindb = tlv[2];
|
||||
maxdb = tlv[3];
|
||||
if (volume <= rangemin || rangemax <= rangemin) {
|
||||
if (tlv[0] == 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;
|
||||
return 0;
|
||||
}
|
||||
#ifndef HAVE_SOFT_FLOAT
|
||||
case SND_CTL_TLVT_DB_LINEAR: {
|
||||
int mindb = tlv[2];
|
||||
|
|
@ -297,6 +318,24 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
case SND_CTL_TLVT_DB_MINMAX:
|
||||
case SND_CTL_TLVT_DB_MINMAX_MUTE: {
|
||||
int min, max;
|
||||
min = tlv[2];
|
||||
max = tlv[3];
|
||||
if (db_gain <= min)
|
||||
*value = rangemin;
|
||||
else if (db_gain >= max)
|
||||
*value = rangemax;
|
||||
else {
|
||||
long v = (db_gain - min) * (rangemax - rangemin);
|
||||
if (xdir > 0)
|
||||
v += (max - min) - 1;
|
||||
v = v / (max - min) + rangemin;
|
||||
*value = v;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#ifndef HAVE_SOFT_FLOAT
|
||||
case SND_CTL_TLVT_DB_LINEAR: {
|
||||
int min, max;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue