Use specialized click removal loops for mono and stereo output

This commit is contained in:
Chris Robinson 2011-07-30 05:43:47 -07:00
parent f986f7dfad
commit 81d401eab5

View File

@ -1057,6 +1057,35 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
UnlockDevice(device);
//Post processing loop
if(device->FmtChans == DevFmtMono)
{
for(i = 0;i < SamplesToDo;i++)
{
device->DryBuffer[i][FRONT_CENTER] += device->ClickRemoval[FRONT_CENTER];
device->ClickRemoval[FRONT_CENTER] -= device->ClickRemoval[FRONT_CENTER] / 256.0f;
}
device->ClickRemoval[FRONT_CENTER] += device->PendingClicks[FRONT_CENTER];
device->PendingClicks[FRONT_CENTER] = 0.0f;
}
else if(device->FmtChans == DevFmtStereo)
{
/* Assumes the first two channels are FRONT_LEFT and FRONT_RIGHT */
for(i = 0;i < SamplesToDo;i++)
{
for(c = 0;c < 2;c++)
{
device->DryBuffer[i][c] += device->ClickRemoval[c];
device->ClickRemoval[c] -= device->ClickRemoval[c] / 256.0f;
}
}
for(c = 0;c < 2;c++)
{
device->ClickRemoval[c] += device->PendingClicks[c];
device->PendingClicks[c] = 0.0f;
}
}
else
{
for(i = 0;i < SamplesToDo;i++)
{
for(c = 0;c < MAXCHANNELS;c++)
@ -1065,10 +1094,11 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
device->ClickRemoval[c] -= device->ClickRemoval[c] / 256.0f;
}
}
for(i = 0;i < MAXCHANNELS;i++)
for(c = 0;c < MAXCHANNELS;c++)
{
device->ClickRemoval[i] += device->PendingClicks[i];
device->PendingClicks[i] = 0.0f;
device->ClickRemoval[c] += device->PendingClicks[c];
device->PendingClicks[c] = 0.0f;
}
}
switch(device->FmtType)