Remove the VirtOut buffer alias
This commit is contained in:
@@ -1871,8 +1871,8 @@ static ALCenum UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
|
||||
al_free(device->Dry.Buffer);
|
||||
device->Dry.Buffer = NULL;
|
||||
device->Dry.NumChannels = 0;
|
||||
device->VirtOut.Buffer = NULL;
|
||||
device->VirtOut.NumChannels = 0;
|
||||
device->FOAOut.Buffer = NULL;
|
||||
device->FOAOut.NumChannels = 0;
|
||||
device->RealOut.Buffer = NULL;
|
||||
device->RealOut.NumChannels = 0;
|
||||
|
||||
@@ -2012,15 +2012,11 @@ static ALCenum UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
|
||||
|
||||
if(device->Hrtf || device->Uhj_Encoder || device->AmbiDecoder)
|
||||
{
|
||||
device->VirtOut.Buffer = device->Dry.Buffer;
|
||||
device->VirtOut.NumChannels = device->Dry.NumChannels;
|
||||
device->RealOut.Buffer = device->Dry.Buffer + device->Dry.NumChannels;
|
||||
device->RealOut.NumChannels = ChannelsFromDevFmt(device->FmtChans);
|
||||
}
|
||||
else
|
||||
{
|
||||
device->VirtOut.Buffer = NULL;
|
||||
device->VirtOut.NumChannels = 0;
|
||||
device->RealOut.Buffer = device->Dry.Buffer;
|
||||
device->RealOut.NumChannels = device->Dry.NumChannels;
|
||||
}
|
||||
@@ -2180,8 +2176,8 @@ static ALCvoid FreeDevice(ALCdevice *device)
|
||||
al_free(device->Dry.Buffer);
|
||||
device->Dry.Buffer = NULL;
|
||||
device->Dry.NumChannels = 0;
|
||||
device->VirtOut.Buffer = NULL;
|
||||
device->VirtOut.NumChannels = 0;
|
||||
device->FOAOut.Buffer = NULL;
|
||||
device->FOAOut.NumChannels = 0;
|
||||
device->RealOut.Buffer = NULL;
|
||||
device->RealOut.NumChannels = 0;
|
||||
|
||||
@@ -3365,8 +3361,8 @@ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *deviceName)
|
||||
AL_STRING_INIT(device->DeviceName);
|
||||
device->Dry.Buffer = NULL;
|
||||
device->Dry.NumChannels = 0;
|
||||
device->VirtOut.Buffer = NULL;
|
||||
device->VirtOut.NumChannels = 0;
|
||||
device->FOAOut.Buffer = NULL;
|
||||
device->FOAOut.NumChannels = 0;
|
||||
device->RealOut.Buffer = NULL;
|
||||
device->RealOut.NumChannels = 0;
|
||||
|
||||
@@ -3629,8 +3625,8 @@ ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *deviceName,
|
||||
AL_STRING_INIT(device->DeviceName);
|
||||
device->Dry.Buffer = NULL;
|
||||
device->Dry.NumChannels = 0;
|
||||
device->VirtOut.Buffer = NULL;
|
||||
device->VirtOut.NumChannels = 0;
|
||||
device->FOAOut.Buffer = NULL;
|
||||
device->FOAOut.NumChannels = 0;
|
||||
device->RealOut.Buffer = NULL;
|
||||
device->RealOut.NumChannels = 0;
|
||||
|
||||
@@ -3825,8 +3821,8 @@ ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(const ALCchar *deviceN
|
||||
AL_STRING_INIT(device->DeviceName);
|
||||
device->Dry.Buffer = NULL;
|
||||
device->Dry.NumChannels = 0;
|
||||
device->VirtOut.Buffer = NULL;
|
||||
device->VirtOut.NumChannels = 0;
|
||||
device->FOAOut.Buffer = NULL;
|
||||
device->FOAOut.NumChannels = 0;
|
||||
device->RealOut.Buffer = NULL;
|
||||
device->RealOut.NumChannels = 0;
|
||||
|
||||
|
||||
@@ -1421,10 +1421,11 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
|
||||
while(size > 0)
|
||||
{
|
||||
SamplesToDo = minu(size, BUFFERSIZE);
|
||||
for(c = 0;c < device->VirtOut.NumChannels;c++)
|
||||
memset(device->VirtOut.Buffer[c], 0, SamplesToDo*sizeof(ALfloat));
|
||||
for(c = 0;c < device->RealOut.NumChannels;c++)
|
||||
memset(device->RealOut.Buffer[c], 0, SamplesToDo*sizeof(ALfloat));
|
||||
for(c = 0;c < device->Dry.NumChannels;c++)
|
||||
memset(device->Dry.Buffer[c], 0, SamplesToDo*sizeof(ALfloat));
|
||||
if(device->Dry.Buffer != device->RealOut.Buffer)
|
||||
for(c = 0;c < device->RealOut.NumChannels;c++)
|
||||
memset(device->RealOut.Buffer[c], 0, SamplesToDo*sizeof(ALfloat));
|
||||
if(device->Dry.Buffer != device->FOAOut.Buffer)
|
||||
for(c = 0;c < device->FOAOut.NumChannels;c++)
|
||||
memset(device->FOAOut.Buffer[c], 0, SamplesToDo*sizeof(ALfloat));
|
||||
@@ -1508,12 +1509,12 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
|
||||
ALuint irsize = GetHrtfIrSize(device->Hrtf);
|
||||
MixHrtfParams hrtfparams;
|
||||
memset(&hrtfparams, 0, sizeof(hrtfparams));
|
||||
for(c = 0;c < device->VirtOut.NumChannels;c++)
|
||||
for(c = 0;c < device->Dry.NumChannels;c++)
|
||||
{
|
||||
hrtfparams.Current = &device->Hrtf_Params[c];
|
||||
hrtfparams.Target = &device->Hrtf_Params[c];
|
||||
HrtfMix(device->RealOut.Buffer, lidx, ridx,
|
||||
device->VirtOut.Buffer[c], 0, device->Hrtf_Offset, 0,
|
||||
device->Dry.Buffer[c], 0, device->Hrtf_Offset, 0,
|
||||
irsize, &hrtfparams, &device->Hrtf_State[c], SamplesToDo
|
||||
);
|
||||
}
|
||||
@@ -1522,14 +1523,14 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
|
||||
}
|
||||
else if(device->AmbiDecoder)
|
||||
{
|
||||
if(device->VirtOut.Buffer != device->FOAOut.Buffer)
|
||||
if(device->Dry.Buffer != device->FOAOut.Buffer)
|
||||
bformatdec_upSample(device->AmbiDecoder,
|
||||
device->VirtOut.Buffer, device->FOAOut.Buffer,
|
||||
device->Dry.Buffer, device->FOAOut.Buffer,
|
||||
device->FOAOut.NumChannels, SamplesToDo
|
||||
);
|
||||
bformatdec_process(device->AmbiDecoder,
|
||||
device->RealOut.Buffer, device->RealOut.NumChannels,
|
||||
device->VirtOut.Buffer, SamplesToDo
|
||||
device->Dry.Buffer, SamplesToDo
|
||||
);
|
||||
}
|
||||
else
|
||||
@@ -1543,7 +1544,7 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
|
||||
/* Encode to stereo-compatible 2-channel UHJ output. */
|
||||
EncodeUhj2(device->Uhj_Encoder,
|
||||
device->RealOut.Buffer[lidx], device->RealOut.Buffer[ridx],
|
||||
device->VirtOut.Buffer, SamplesToDo
|
||||
device->Dry.Buffer, SamplesToDo
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -630,12 +630,9 @@ struct ALCdevice_struct
|
||||
ALuint NumChannels;
|
||||
} FOAOut;
|
||||
|
||||
/* Virtual output, to be post-processed to the real output. */
|
||||
struct {
|
||||
ALfloat (*Buffer)[BUFFERSIZE];
|
||||
ALuint NumChannels;
|
||||
} VirtOut;
|
||||
/* "Real" output, which will be written to the device buffer. */
|
||||
/* "Real" output, which will be written to the device buffer. May alias the
|
||||
* dry buffer.
|
||||
*/
|
||||
struct {
|
||||
enum Channel ChannelName[MAX_OUTPUT_CHANNELS];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user