diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-06-01 16:50:29 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-06-01 16:50:29 +0200 |
commit | 2974286d61a355557923e3f91129e4a12206d521 (patch) | |
tree | 40129e52797b6ef4902e40ea9676990441e72352 | |
parent | 1d0b0177421b42da1e6bfc6e36fb2a788b144f81 (diff) | |
download | salsa-lib-2974286d61a355557923e3f91129e4a12206d521.tar.gz |
Add missing snd_ctl_convert_{from|to}_dB() and snd_ctl_get_dB_range()
The definitions were missing. Oops.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | src/control.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/control.c b/src/control.c index 1f19431..17398ba 100644 --- a/src/control.c +++ b/src/control.c @@ -763,6 +763,67 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, return -EINVAL; } +#define TEMP_TLV_SIZE 4096 +struct tlv_info { + long minval, maxval; + unsigned int *tlv; + unsigned int buf[TEMP_TLV_SIZE]; +}; + +static int get_tlv_info(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, + struct tlv_info *rec) +{ + snd_ctl_elem_info_t info; + int err; + + memzero_valgrind(&info, sizeof(info)); + info.id = *id; + err = snd_ctl_elem_info(ctl, &info); + if (err < 0) + return err; + rec->minval = info.value.integer.min; + rec->maxval = info.value.integer.max; + return snd_tlv_parse_dB_info(rec->buf, sizeof(rec->buf), &rec->tlv); +} + +int snd_ctl_get_dB_range(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, + long *min, long *max) +{ + struct tlv_info info; + int err; + + err = get_tlv_info(ctl, id, &info); + if (err < 0) + return err; + return snd_tlv_get_dB_range(info.tlv, info.minval, info.maxval, + min, max); +} + +int snd_ctl_convert_to_dB(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, + long volume, long *db_gain) +{ + struct tlv_info info; + int err; + + err = get_tlv_info(ctl, id, &info); + if (err < 0) + return err; + return snd_tlv_convert_to_dB(info.tlv, info.minval, info.maxval, + volume, db_gain); +} + +int snd_ctl_convert_from_dB(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id, + long db_gain, long *value, int xdir) +{ + struct tlv_info info; + int err; + + err = get_tlv_info(ctl, id, &info); + if (err < 0) + return err; + return snd_tlv_convert_from_dB(info.tlv, info.minval, info.maxval, + db_gain, value, xdir); +} #endif /* TLV */ #if SALSA_CTL_ASCII_PARSER |