aboutsummaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
Diffstat (limited to 'Alc')
-rw-r--r--Alc/mixer.c48
1 files changed, 23 insertions, 25 deletions
diff --git a/Alc/mixer.c b/Alc/mixer.c
index 37bdf6ac..29ec07a0 100644
--- a/Alc/mixer.c
+++ b/Alc/mixer.c
@@ -335,7 +335,6 @@ ALboolean MixSource(ALvoice *voice, ALsource *Source, ALCdevice *Device, ALsizei
DataSize64 += DataPosFrac+FRACTIONMASK;
DataSize64 >>= FRACTIONBITS;
DataSize64 += MAX_POST_SAMPLES+MAX_PRE_SAMPLES;
-
SrcBufferSize = (ALsizei)mini64(DataSize64, BUFFERSIZE);
/* Figure out how many samples we can actually mix from this. */
@@ -343,24 +342,23 @@ ALboolean MixSource(ALvoice *voice, ALsource *Source, ALCdevice *Device, ALsizei
DataSize64 -= MAX_POST_SAMPLES+MAX_PRE_SAMPLES;
DataSize64 <<= FRACTIONBITS;
DataSize64 -= DataPosFrac;
-
- DstBufferSize = (ALsizei)((DataSize64+(increment-1)) / increment);
- DstBufferSize = mini(DstBufferSize, (SamplesToDo-OutPos));
+ DstBufferSize = (ALsizei)mini64((DataSize64+(increment-1)) / increment,
+ SamplesToDo - OutPos);
/* Some mixers like having a multiple of 4, so try to give that unless
* this is the last update. */
- if(OutPos+DstBufferSize < SamplesToDo)
+ if(DstBufferSize < SamplesToDo-OutPos)
DstBufferSize &= ~3;
for(chan = 0;chan < NumChannels;chan++)
{
const ALfloat *ResampledData;
ALfloat *SrcData = Device->SourceData;
- ALsizei SrcDataSize;
+ ALsizei FilledAmt;
/* Load the previous samples into the source data first. */
memcpy(SrcData, voice->PrevSamples[chan], MAX_PRE_SAMPLES*sizeof(ALfloat));
- SrcDataSize = MAX_PRE_SAMPLES;
+ FilledAmt = MAX_PRE_SAMPLES;
/* TODO: Handle multi-buffer items by adding them together in
* SrcData. Need to work out how to deal with looping (loop
@@ -382,15 +380,15 @@ ALboolean MixSource(ALvoice *voice, ALsource *Source, ALCdevice *Device, ALsizei
/* Load what's left to play from the source buffer, and
* clear the rest of the temp buffer */
- DataSize = minu(SrcBufferSize - SrcDataSize,
+ DataSize = minu(SrcBufferSize - FilledAmt,
ALBuffer->SampleLen - DataPosInt);
- LoadSamples(&SrcData[SrcDataSize], &Data[DataPosInt * NumChannels*SampleSize],
+ LoadSamples(&SrcData[FilledAmt], &Data[DataPosInt * NumChannels*SampleSize],
NumChannels, ALBuffer->FmtType, DataSize);
- SrcDataSize += DataSize;
+ FilledAmt += DataSize;
- SilenceSamples(&SrcData[SrcDataSize], SrcBufferSize - SrcDataSize);
- SrcDataSize += SrcBufferSize - SrcDataSize;
+ SilenceSamples(&SrcData[FilledAmt], SrcBufferSize - FilledAmt);
+ FilledAmt += SrcBufferSize - FilledAmt;
}
else
{
@@ -399,20 +397,20 @@ ALboolean MixSource(ALvoice *voice, ALsource *Source, ALCdevice *Device, ALsizei
/* Load what's left of this loop iteration, then load
* repeats of the loop section */
- DataSize = minu(SrcBufferSize - SrcDataSize, LoopEnd - DataPosInt);
+ DataSize = minu(SrcBufferSize - FilledAmt, LoopEnd - DataPosInt);
- LoadSamples(&SrcData[SrcDataSize], &Data[DataPosInt * NumChannels*SampleSize],
+ LoadSamples(&SrcData[FilledAmt], &Data[DataPosInt * NumChannels*SampleSize],
NumChannels, ALBuffer->FmtType, DataSize);
- SrcDataSize += DataSize;
+ FilledAmt += DataSize;
DataSize = LoopEnd-LoopStart;
- while(SrcBufferSize > SrcDataSize)
+ while(SrcBufferSize > FilledAmt)
{
- DataSize = mini(SrcBufferSize - SrcDataSize, DataSize);
+ DataSize = mini(SrcBufferSize - FilledAmt, DataSize);
- LoadSamples(&SrcData[SrcDataSize], &Data[LoopStart * NumChannels*SampleSize],
+ LoadSamples(&SrcData[FilledAmt], &Data[LoopStart * NumChannels*SampleSize],
NumChannels, ALBuffer->FmtType, DataSize);
- SrcDataSize += DataSize;
+ FilledAmt += DataSize;
}
}
}
@@ -422,7 +420,7 @@ ALboolean MixSource(ALvoice *voice, ALsource *Source, ALCdevice *Device, ALsizei
ALbufferlistitem *tmpiter = BufferListItem;
ALsizei pos = DataPosInt;
- while(tmpiter && SrcBufferSize > SrcDataSize)
+ while(tmpiter && SrcBufferSize > FilledAmt)
{
const ALbuffer *ALBuffer;
if(tmpiter->num_buffers >= 1 && (ALBuffer=tmpiter->buffers[0]) != NULL)
@@ -439,10 +437,10 @@ ALboolean MixSource(ALvoice *voice, ALsource *Source, ALCdevice *Device, ALsizei
DataSize -= pos;
pos -= pos;
- DataSize = minu(SrcBufferSize - SrcDataSize, DataSize);
- LoadSamples(&SrcData[SrcDataSize], Data, NumChannels,
+ DataSize = minu(SrcBufferSize - FilledAmt, DataSize);
+ LoadSamples(&SrcData[FilledAmt], Data, NumChannels,
ALBuffer->FmtType, DataSize);
- SrcDataSize += DataSize;
+ FilledAmt += DataSize;
}
}
tmpiter = ATOMIC_LOAD(&tmpiter->next, almemory_order_acquire);
@@ -450,8 +448,8 @@ ALboolean MixSource(ALvoice *voice, ALsource *Source, ALCdevice *Device, ALsizei
tmpiter = BufferLoopItem;
else if(!tmpiter)
{
- SilenceSamples(&SrcData[SrcDataSize], SrcBufferSize - SrcDataSize);
- SrcDataSize += SrcBufferSize - SrcDataSize;
+ SilenceSamples(&SrcData[FilledAmt], SrcBufferSize - FilledAmt);
+ FilledAmt += SrcBufferSize - FilledAmt;
}
}
}