aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/mixer.c
diff options
context:
space:
mode:
Diffstat (limited to 'Alc/mixer.c')
-rw-r--r--Alc/mixer.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/Alc/mixer.c b/Alc/mixer.c
index 5c04b55a..1d422da0 100644
--- a/Alc/mixer.c
+++ b/Alc/mixer.c
@@ -105,6 +105,8 @@ static void MixMono_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
ALfloat value; \
\
increment = Source->Params.Step; \
+ data += *DataPosInt; \
+ DataEnd -= *DataPosInt; \
\
DryBuffer = Device->DryBuffer; \
ClickRemoval = Device->ClickRemoval; \
@@ -113,7 +115,7 @@ static void MixMono_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
for(i = 0;i < OUTPUTCHANNELS;i++) \
DrySend[i] = Source->Params.DryGains[i]; \
\
- pos = *DataPosInt; \
+ pos = 0; \
frac = *DataPosFrac; \
\
if(j == 0) \
@@ -195,7 +197,7 @@ static void MixMono_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
WetFilter = &Source->Params.Send[out].iirFilter; \
WetSend = Source->Params.Send[out].WetGain; \
\
- pos = *DataPosInt; \
+ pos = 0; \
frac = *DataPosFrac; \
j -= BufferSize; \
\
@@ -239,7 +241,7 @@ static void MixMono_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
WetPendingClicks[0] += value*WetSend; \
} \
} \
- *DataPosInt = pos; \
+ *DataPosInt += pos; \
*DataPosFrac = frac; \
}
@@ -279,6 +281,8 @@ static void MixStereo_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
ALfloat value; \
\
increment = Source->Params.Step; \
+ data += *DataPosInt * Channels; \
+ DataEnd -= *DataPosInt; \
\
DryBuffer = Device->DryBuffer; \
ClickRemoval = Device->ClickRemoval; \
@@ -287,7 +291,7 @@ static void MixStereo_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
for(i = 0;i < OUTPUTCHANNELS;i++) \
DrySend[i] = Source->Params.DryGains[i]; \
\
- pos = *DataPosInt; \
+ pos = 0; \
frac = *DataPosFrac; \
\
if(j == 0) \
@@ -364,7 +368,7 @@ static void MixStereo_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
WetFilter = &Source->Params.Send[out].iirFilter; \
WetSend = Source->Params.Send[out].WetGain; \
\
- pos = *DataPosInt; \
+ pos = 0; \
frac = *DataPosFrac; \
j -= BufferSize; \
\
@@ -418,7 +422,7 @@ static void MixStereo_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
} \
} \
} \
- *DataPosInt = pos; \
+ *DataPosInt += pos; \
*DataPosFrac = frac; \
}
@@ -435,7 +439,6 @@ DECL_MIX_STEREO(ALubyte, lerp8)
DECL_MIX_STEREO(ALubyte, cos_lerp8)
-
#define DECL_MIX_MC(T,chans,sampler) \
static void MixMC_##T##_##chans##_##sampler(ALsource *Source, ALCdevice *Device,\
const T *data, ALuint *DataPosInt, ALuint *DataPosFrac, ALuint DataEnd, \
@@ -454,6 +457,8 @@ static void MixMC_##T##_##chans##_##sampler(ALsource *Source, ALCdevice *Device,
ALfloat value; \
\
increment = Source->Params.Step; \
+ data += *DataPosInt * Channels; \
+ DataEnd -= *DataPosInt; \
\
DryBuffer = Device->DryBuffer; \
ClickRemoval = Device->ClickRemoval; \
@@ -462,7 +467,7 @@ static void MixMC_##T##_##chans##_##sampler(ALsource *Source, ALCdevice *Device,
for(i = 0;i < OUTPUTCHANNELS;i++) \
DrySend[i] = Source->Params.DryGains[i]; \
\
- pos = *DataPosInt; \
+ pos = 0; \
frac = *DataPosFrac; \
\
if(j == 0) \
@@ -533,7 +538,7 @@ static void MixMC_##T##_##chans##_##sampler(ALsource *Source, ALCdevice *Device,
WetFilter = &Source->Params.Send[out].iirFilter; \
WetSend = Source->Params.Send[out].WetGain; \
\
- pos = *DataPosInt; \
+ pos = 0; \
frac = *DataPosFrac; \
j -= BufferSize; \
\
@@ -587,7 +592,7 @@ static void MixMC_##T##_##chans##_##sampler(ALsource *Source, ALCdevice *Device,
} \
} \
} \
- *DataPosInt = pos; \
+ *DataPosInt += pos; \
*DataPosFrac = frac; \
}