diff options
author | Chris Robinson <[email protected]> | 2018-09-22 08:26:52 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2018-09-22 08:26:52 -0700 |
commit | 77a53594bad3ae39bbbeb22b19815edec24c4fa8 (patch) | |
tree | d5a072902cedd1a2f2262b8afdc0d80a6ccf6aa9 | |
parent | 36a6b9d42a79f40108441c2b6f9ad88d45e7a98e (diff) |
Improve the gain stepping difference check
Given the more stable stepping now in use, check that the total difference is
enough for perceptible transition, instead of the step itself.
-rw-r--r-- | Alc/mixer/mixer_c.c | 13 | ||||
-rw-r--r-- | Alc/mixer/mixer_neon.c | 7 | ||||
-rw-r--r-- | Alc/mixer/mixer_sse.c | 7 |
3 files changed, 15 insertions, 12 deletions
diff --git a/Alc/mixer/mixer_c.c b/Alc/mixer/mixer_c.c index 2dcd6c6b..14d7c669 100644 --- a/Alc/mixer/mixer_c.c +++ b/Alc/mixer/mixer_c.c @@ -108,21 +108,22 @@ void Mix_C(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffer)[ ALfloat *CurrentGains, const ALfloat *TargetGains, ALsizei Counter, ALsizei OutPos, ALsizei BufferSize) { - ALfloat gain, delta, step; + const ALfloat delta = (Counter > 0) ? 1.0f/(ALfloat)Counter : 0.0f; ALsizei c; ASSUME(OutChans > 0); ASSUME(BufferSize > 0); - delta = (Counter > 0) ? 1.0f/(ALfloat)Counter : 0.0f; for(c = 0;c < OutChans;c++) { ALsizei pos = 0; - gain = CurrentGains[c]; - step = (TargetGains[c] - gain) * delta; - if(fabsf(step) > FLT_EPSILON) + ALfloat gain = CurrentGains[c]; + const ALfloat diff = TargetGains[c] - gain; + + if(fabsf(diff) > FLT_EPSILON) { ALsizei minsize = mini(BufferSize, Counter); + const ALfloat step = diff * delta; ALfloat step_count = 0.0f; for(;pos < minsize;pos++) { @@ -158,7 +159,7 @@ void MixRow_C(ALfloat *OutBuffer, const ALfloat *Gains, const ALfloat (*restrict for(c = 0;c < InChans;c++) { - ALfloat gain = Gains[c]; + const ALfloat gain = Gains[c]; if(!(fabsf(gain) > GAIN_SILENCE_THRESHOLD)) continue; diff --git a/Alc/mixer/mixer_neon.c b/Alc/mixer/mixer_neon.c index ca274b07..9bf5521a 100644 --- a/Alc/mixer/mixer_neon.c +++ b/Alc/mixer/mixer_neon.c @@ -179,11 +179,12 @@ void Mix_Neon(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffe { ALsizei pos = 0; ALfloat gain = CurrentGains[c]; - const ALfloat step = (TargetGains[c] - gain) * delta; + const ALfloat diff = TargetGains[c] - gain; - if(fabsf(step) > FLT_EPSILON) + if(fabsf(diff) > FLT_EPSILON) { ALsizei minsize = mini(BufferSize, Counter); + const ALfloat step = diff * delta; ALfloat step_count = 0.0f; /* Mix with applying gain steps in aligned multiples of 4. */ if(LIKELY(minsize > 3)) @@ -260,7 +261,7 @@ void MixRow_Neon(ALfloat *OutBuffer, const ALfloat *Gains, const ALfloat (*restr for(c = 0;c < InChans;c++) { ALsizei pos = 0; - ALfloat gain = Gains[c]; + const ALfloat gain = Gains[c]; if(!(fabsf(gain) > GAIN_SILENCE_THRESHOLD)) continue; diff --git a/Alc/mixer/mixer_sse.c b/Alc/mixer/mixer_sse.c index 78cf26f1..725a5ebc 100644 --- a/Alc/mixer/mixer_sse.c +++ b/Alc/mixer/mixer_sse.c @@ -149,11 +149,12 @@ void Mix_SSE(const ALfloat *data, ALsizei OutChans, ALfloat (*restrict OutBuffer { ALsizei pos = 0; ALfloat gain = CurrentGains[c]; - const ALfloat step = (TargetGains[c] - gain) * delta; + const ALfloat diff = TargetGains[c] - gain; - if(fabsf(step) > FLT_EPSILON) + if(fabsf(diff) > FLT_EPSILON) { ALsizei minsize = mini(BufferSize, Counter); + const ALfloat step = diff * delta; ALfloat step_count = 0.0f; /* Mix with applying gain steps in aligned multiples of 4. */ if(LIKELY(minsize > 3)) @@ -227,7 +228,7 @@ void MixRow_SSE(ALfloat *OutBuffer, const ALfloat *Gains, const ALfloat (*restri for(c = 0;c < InChans;c++) { ALsizei pos = 0; - ALfloat gain = Gains[c]; + const ALfloat gain = Gains[c]; if(!(fabsf(gain) > GAIN_SILENCE_THRESHOLD)) continue; |