[alsa-devel] alsa-lib and floating point support
Takashi Iwai
tiwai at suse.de
Wed Sep 20 13:26:13 CEST 2017
On Wed, 20 Sep 2017 12:55:30 +0200,
Ricard Wanderlof wrote:
>
>
> We recently came across an issue with the alsa-lib softvol plugin, which
> requires hardware floating-point (i.e. --with-softfloat not enabled during
> build) support in order to use anything but a set of default values (min
> gain -51 dB, max 0 dB, and 256 gain steps). With no hardware floating
> point support, the plugin just prints an error message when loaded.
>
> static int softvol_load_control(snd_pcm_t *pcm, snd_pcm_softvol_t *svol,
> ...
> #ifndef HAVE_SOFT_FLOAT
> ...
> double v = (pow(10.0, db / 20.0) * (double)(1 <<
> VOL_SCALE_SHIFT));
> ...
> #else
> SNDERR("Cannot handle the given dB range and resolution");
> return -EINVAL;
> #endif
> }
> ...
>
> I'm trying to understand why it is critical to have hardware floating
> point support in this case. The pow() function is very resource hungry,
> true, but the function is only called when the plugin is loaded, and not
> for instance on every sample while the stream is running, so on the whole
> I would expect the impact to be minimal. Is there some other rationale
> that I'm missing?
The softfloat option is to avoid calculation in float as much as
possible, i.e. alsa-lib will be built without any usage of math
library.
Takashi
More information about the Alsa-devel
mailing list