Ezt a patch-et nem értem.
static inline uint32_t volume_from_linear(float vol)
{
uint32_t v;
if (vol <= 0.0f)
v = VOLUME_MUTED;
else
v = SPA_CLAMP((uint64_t) lround(cbrt(vol) * VOLUME_NORM),
VOLUME_MUTED, VOLUME_MAX);
return v;
}
static inline float volume_to_linear(uint32_t vol)
{
float v = ((float)vol) / VOLUME_NORM;
return v * v * v;
}
Az egyik irányban köbgyökös, a másikban köbös. De miért? A hangerő decibelben hangzik lineárisnak, ami logaritmikus, nem pedig köbgyökös. A másik, amit nem értek, hogy miért float és miért nem double. Tudtommal C-ben a double jól definiált, szabványos típus, míg a float valami talán kompatibilitási okokból megtartott, architektúra függő képződmény.
De a köbös, köbgyökös konverzión jobban fennakadtam.