aboutsummaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2018-09-22 08:26:52 -0700
committerChris Robinson <[email protected]>2018-09-22 08:26:52 -0700
commit77a53594bad3ae39bbbeb22b19815edec24c4fa8 (patch)
treed5a072902cedd1a2f2262b8afdc0d80a6ccf6aa9 /Alc
parent36a6b9d42a79f40108441c2b6f9ad88d45e7a98e (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.
Diffstat (limited to 'Alc')
-rw-r--r--Alc/mixer/mixer_c.c13
-rw-r--r--Alc/mixer/mixer_neon.c7
-rw-r--r--Alc/mixer/mixer_sse.c7
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;