Make the SourceMix function a method of the ALsource struct
This commit is contained in:
parent
08fdc5fa98
commit
9fbd6c6c3f
13
Alc/mixer.c
13
Alc/mixer.c
@ -601,9 +601,9 @@ static __inline ALfloat cos_lerp16(ALfloat val1, ALfloat val2, ALint frac)
|
||||
} while(0)
|
||||
|
||||
|
||||
static ALvoid MixSource(ALsource *Source, ALfloat (*DryBuffer)[OUTPUTCHANNELS],
|
||||
ALuint SamplesToDo, ALfloat *ClickRemoval,
|
||||
ALfloat *PendingClicks)
|
||||
ALvoid MixSource(ALsource *Source, ALuint SamplesToDo,
|
||||
ALfloat (*DryBuffer)[OUTPUTCHANNELS],
|
||||
ALfloat *ClickRemoval, ALfloat *PendingClicks)
|
||||
{
|
||||
ALbufferlistitem *BufferListItem;
|
||||
ALint64 DataSize64,DataPos64;
|
||||
@ -749,9 +749,6 @@ static ALvoid MixSource(ALsource *Source, ALfloat (*DryBuffer)[OUTPUTCHANNELS],
|
||||
Source->Buffer = BufferListItem->buffer;
|
||||
}
|
||||
|
||||
#undef DO_MIX_MC
|
||||
#undef DO_MIX_STEREO
|
||||
#undef DO_MIX_MONO
|
||||
|
||||
ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
|
||||
{
|
||||
@ -809,8 +806,8 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
|
||||
(*src)->NeedsUpdate = AL_FALSE;
|
||||
}
|
||||
|
||||
MixSource(*src, DryBuffer, SamplesToDo,
|
||||
device->ClickRemoval, device->PendingClicks);
|
||||
ALsource_Mix(*src, SamplesToDo, DryBuffer,
|
||||
device->ClickRemoval, device->PendingClicks);
|
||||
src++;
|
||||
}
|
||||
|
||||
|
@ -96,12 +96,17 @@ typedef struct ALsource
|
||||
FILTER iirFilter;
|
||||
ALfloat history[OUTPUTCHANNELS*2];
|
||||
} Params;
|
||||
|
||||
ALvoid (*Update)(struct ALsource *self, const ALCcontext *context);
|
||||
ALvoid (*Mix)(struct ALsource *self, ALuint SamplesToDo,
|
||||
ALfloat (*DryBuffer)[OUTPUTCHANNELS],
|
||||
ALfloat *ClickRemoval, ALfloat *PendingClicks);
|
||||
|
||||
// Index to itself
|
||||
ALuint source;
|
||||
} ALsource;
|
||||
#define ALsource_Update(s,a) ((s)->Update(s,a))
|
||||
#define ALsource_Update(s,a) ((s)->Update(s,a))
|
||||
#define ALsource_Mix(s,a,b,c,d) ((s)->Mix(s,a,b,c,d))
|
||||
|
||||
ALvoid ReleaseALSources(ALCcontext *Context);
|
||||
|
||||
|
@ -189,6 +189,10 @@ ALvoid aluInitPanning(ALCdevice *Device);
|
||||
ALvoid CalcSourceParams(struct ALsource *ALSource, const ALCcontext *ALContext);
|
||||
ALvoid CalcNonAttnSourceParams(struct ALsource *ALSource, const ALCcontext *ALContext);
|
||||
|
||||
ALvoid MixSource(struct ALsource *Source, ALuint SamplesToDo,
|
||||
ALfloat (*DryBuffer)[OUTPUTCHANNELS],
|
||||
ALfloat *ClickRemoval, ALfloat *PendingClicks);
|
||||
|
||||
ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size);
|
||||
ALvoid aluHandleDisconnect(ALCdevice *device);
|
||||
|
||||
|
@ -563,6 +563,8 @@ AL_API ALvoid AL_APIENTRY alSourcei(ALuint source,ALenum eParam,ALint lValue)
|
||||
else
|
||||
Source->Update = CalcNonAttnSourceParams;
|
||||
|
||||
Source->Mix = MixSource;
|
||||
|
||||
// Increment reference counter for buffer
|
||||
buffer->refcount++;
|
||||
}
|
||||
@ -1593,10 +1595,14 @@ AL_API ALvoid AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei n, const A
|
||||
{
|
||||
Frequency = buffer->frequency;
|
||||
Format = buffer->eOriginalFormat;
|
||||
|
||||
if(aluChannelsFromFormat(buffer->format) == 1)
|
||||
Source->Update = CalcSourceParams;
|
||||
else
|
||||
Source->Update = CalcNonAttnSourceParams;
|
||||
|
||||
Source->Mix = MixSource;
|
||||
|
||||
Source->NeedsUpdate = AL_TRUE;
|
||||
}
|
||||
else if(Frequency != buffer->frequency || Format != buffer->eOriginalFormat)
|
||||
|
Loading…
x
Reference in New Issue
Block a user