Make the filter processing function inline

This commit is contained in:
Chris Robinson
2008-07-26 00:58:54 -07:00
parent c7e49c9f57
commit 3e0f9cc716
3 changed files with 39 additions and 38 deletions
+36
View File
@@ -163,6 +163,42 @@ __inline ALuint aluChannelsFromFormat(ALenum format)
}
static __inline ALfloat lpFilter(FILTER *iir, ALfloat input)
{
unsigned int i;
float *hist1_ptr,*hist2_ptr,*coef_ptr;
ALfloat output,new_hist,history1,history2;
coef_ptr = iir->coef; /* coefficient pointer */
hist1_ptr = iir->history; /* first history */
hist2_ptr = hist1_ptr + 1; /* next history */
/* 1st number of coefficients array is overall input scale factor,
* or filter gain */
output = input * (*coef_ptr++);
for(i = 0;i < FILTER_SECTIONS;i++)
{
history1 = *hist1_ptr; /* history values */
history2 = *hist2_ptr;
output = output - history1 * (*coef_ptr++);
new_hist = output - history2 * (*coef_ptr++); /* poles */
output = new_hist + history1 * (*coef_ptr++);
output = output + history2 * (*coef_ptr++); /* zeros */
*hist2_ptr++ = *hist1_ptr;
*hist1_ptr++ = new_hist;
hist1_ptr++;
hist2_ptr++;
}
return output;
}
static __inline ALshort aluF2S(ALfloat Value)
{
ALint i;
+1 -37
View File
@@ -12,9 +12,6 @@ By baltrax@hotmail.com (Zxform)
#include "alFilter.h"
#define FILTER_SECTIONS 2 /* 2 filter sections for 24 db/oct filter */
static void szxform(
double *a0, double *a1, double *a2, /* numerator coefficients */
double *b0, double *b1, double *b2, /* denominator coefficients */
@@ -43,41 +40,8 @@ static void szxform(
* Returns float value giving the current output.
* --------------------------------------------------------------------
*/
float lpFilter(FILTER *iir, float input)
{
unsigned int i;
float *hist1_ptr,*hist2_ptr,*coef_ptr;
float output,new_hist,history1,history2;
coef_ptr = iir->coef; /* coefficient pointer */
hist1_ptr = iir->history; /* first history */
hist2_ptr = hist1_ptr + 1; /* next history */
/* 1st number of coefficients array is overall input scale factor,
* or filter gain */
output = input * (*coef_ptr++);
for(i = 0;i < FILTER_SECTIONS;i++)
{
history1 = *hist1_ptr; /* history values */
history2 = *hist2_ptr;
output = output - history1 * (*coef_ptr++);
new_hist = output - history2 * (*coef_ptr++); /* poles */
output = new_hist + history1 * (*coef_ptr++);
output = output + history2 * (*coef_ptr++); /* zeros */
*hist2_ptr++ = *hist1_ptr;
*hist1_ptr++ = new_hist;
hist1_ptr++;
hist2_ptr++;
}
return output;
}
/*** moved to ALu.c ***/
/*
* --------------------------------------------------------------------
+2 -1
View File
@@ -53,7 +53,8 @@ AL_API ALvoid AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pf
ALvoid ReleaseALFilters(ALvoid);
float lpFilter(FILTER *iir, float input);
#define FILTER_SECTIONS 2 /* 2 filter sections for 24 db/oct filter */
int InitLowPassFilter(ALCcontext *Context, FILTER *iir);
#ifdef __cplusplus