( locsemege | 2020. 10. 23., p – 10:37 )

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.