mirror of
https://github.com/mpv-player/mpv
synced 2024-12-29 02:22:19 +00:00
ao: don't clip floating point formats at non-unity gain
Currently, the softvol gain control attempts to clip floating point ao formats within -1 and +1. However, this is "optimized out" at unity gain, where no clipping is applied. This results in inconsistent behavior when the source audio is already out of -1 and +1 range, where a gain of 0.99 results in clipping, but not at exactly 1. Since a big advantage of floating point audio data is that they do not lose information through out-of-range data because the ao sink can apply suitable negative gain to prevent clipping before converting them to integer formats, clipping should not be performed on these data. Fix this by removing the existing clipping behavior. It now results in a simple multiplication, which faciliates compiler auto-vectorization of this operation over audio data.
This commit is contained in:
parent
ab3a63285a
commit
2872e23aea
@ -612,7 +612,7 @@ void ao_set_gain(struct ao *ao, float gain)
|
||||
|
||||
#define MUL_GAIN_f(d, num_samples, gain) \
|
||||
for (int n = 0; n < (num_samples); n++) \
|
||||
(d)[n] = MPCLAMP(((d)[n]) * (gain), -1.0, 1.0)
|
||||
(d)[n] = (d)[n] * (gain)
|
||||
|
||||
static void process_plane(struct ao *ao, void *data, int num_samples)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user