control: use more precise rounding in snd_ctl_ascii_value_parse()

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Jaroslav Kysela 2020-06-05 13:38:53 +02:00
parent 409cea0759
commit d39f5acd9b

View file

@ -33,17 +33,20 @@
/* Function to convert from percentage to volume. val = percentage */ /* Function to convert from percentage to volume. val = percentage */
#ifdef HAVE_SOFT_FLOAT static inline long int convert_prange1(long perc, long min, long max)
static inline long int convert_prange1(long val, long min, long max)
{ {
long temp = val * (max - min); long tmp;
return temp / 100 + min + ((temp % 100) == 0 ? 0 : 1);
}
#else
#define convert_prange1(val, min, max) \ #ifdef HAVE_SOFT_FLOAT
ceil((val) * ((max) - (min)) * 0.01 + (min)) tmp = perc * (max - min);
tmp = tmp / 100 + ((tmp % 100) < 50 ? 0 : 1);
#else
tmp = rint((double)perc * (double)(max - min) * 0.01);
#endif #endif
if (tmp == 0 && perc > 0)
tmp++;
return tmp + min;
}
#define check_range(val, min, max) \ #define check_range(val, min, max) \
((val < min) ? (min) : ((val > max) ? (max) : (val))) ((val < min) ? (min) : ((val > max) ? (max) : (val)))