Multiply the history offset in the filtering funcitons

This commit is contained in:
Chris Robinson
2011-05-18 18:52:47 -07:00
parent 1d3926e187
commit b838d123f8
2 changed files with 8 additions and 42 deletions
+6 -6
View File
@@ -111,7 +111,7 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
if(LIKELY(OutPos == 0)) \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
value = lpFilter2PC(DryFilter, i*2, value); \
value = lpFilter2PC(DryFilter, i, value); \
\
HrtfHistory[i][HrtfOffset&HRTF_LENGTH_MASK] = value; \
for(c = 0;c < HRTF_LENGTH;c++) \
@@ -127,7 +127,7 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
for(BufferIdx = 0;BufferIdx < BufferSize;BufferIdx++) \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
value = lpFilter2P(DryFilter, i*2, value); \
value = lpFilter2P(DryFilter, i, value); \
\
HrtfHistory[i][HrtfOffset&HRTF_LENGTH_MASK] = value; \
for(c = 0;c < HRTF_LENGTH;c++) \
@@ -149,7 +149,7 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
if(LIKELY(OutPos == SamplesToDo)) \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
value = lpFilter2PC(DryFilter, i*2, value); \
value = lpFilter2PC(DryFilter, i, value); \
\
HrtfHistory[i][HrtfOffset&HRTF_LENGTH_MASK] = value; \
for(c = 0;c < HRTF_LENGTH;c++) \
@@ -278,7 +278,7 @@ static void Mix_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
\
value = lpFilter2PC(DryFilter, i*2, value); \
value = lpFilter2PC(DryFilter, i, value); \
for(c = 0;c < MAXCHANNELS;c++) \
ClickRemoval[c] -= value*DrySend[i][c]; \
} \
@@ -286,7 +286,7 @@ static void Mix_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
\
value = lpFilter2P(DryFilter, i*2, value); \
value = lpFilter2P(DryFilter, i, value); \
for(c = 0;c < MAXCHANNELS;c++) \
DryBuffer[OutPos][c] += value*DrySend[i][c]; \
\
@@ -299,7 +299,7 @@ static void Mix_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
{ \
value = sampler(data + pos*NumChannels + i, NumChannels, frac); \
\
value = lpFilter2PC(DryFilter, i*2, value); \
value = lpFilter2PC(DryFilter, i, value); \
for(c = 0;c < MAXCHANNELS;c++) \
PendingClicks[c] += value*DrySend[i][c]; \
} \
+2 -36
View File
@@ -16,28 +16,10 @@ typedef struct {
ALfloat history[1];
#endif
} FILTER;
/*
static __inline ALfloat lpFilter4P(FILTER *iir, ALuint offset, ALfloat input)
{
ALfloat *history = &iir->history[offset];
ALfloat a = iir->coeff;
ALfloat output = input;
output = output + (history[0]-output)*a;
history[0] = output;
output = output + (history[1]-output)*a;
history[1] = output;
output = output + (history[2]-output)*a;
history[2] = output;
output = output + (history[3]-output)*a;
history[3] = output;
return output;
}
*/
static __inline ALfloat lpFilter2P(FILTER *iir, ALuint offset, ALfloat input)
{
ALfloat *history = &iir->history[offset];
ALfloat *history = &iir->history[offset*2];
ALfloat a = iir->coeff;
ALfloat output = input;
@@ -48,7 +30,6 @@ static __inline ALfloat lpFilter2P(FILTER *iir, ALuint offset, ALfloat input)
return output;
}
static __inline ALfloat lpFilter1P(FILTER *iir, ALuint offset, ALfloat input)
{
ALfloat *history = &iir->history[offset];
@@ -60,24 +41,10 @@ static __inline ALfloat lpFilter1P(FILTER *iir, ALuint offset, ALfloat input)
return output;
}
/*
static __inline ALfloat lpFilter4PC(const FILTER *iir, ALuint offset, ALfloat input)
{
const ALfloat *history = &iir->history[offset];
ALfloat a = iir->coeff;
ALfloat output = input;
output = output + (history[0]-output)*a;
output = output + (history[1]-output)*a;
output = output + (history[2]-output)*a;
output = output + (history[3]-output)*a;
return output;
}
*/
static __inline ALfloat lpFilter2PC(const FILTER *iir, ALuint offset, ALfloat input)
{
const ALfloat *history = &iir->history[offset];
const ALfloat *history = &iir->history[offset*2];
ALfloat a = iir->coeff;
ALfloat output = input;
@@ -86,7 +53,6 @@ static __inline ALfloat lpFilter2PC(const FILTER *iir, ALuint offset, ALfloat in
return output;
}
static __inline ALfloat lpFilter1PC(FILTER *iir, ALuint offset, ALfloat input)
{
const ALfloat *history = &iir->history[offset];