diff options
author | Chris Robinson <[email protected]> | 2014-05-19 05:46:01 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2014-05-19 05:46:01 -0700 |
commit | cd983245f1967e04f833acc0ec27aefa94f061b0 (patch) | |
tree | 3bb462b9649026ac6676728d34b03f3737a8c740 /Alc/mixer.c | |
parent | 8e04a8a0228aea5df0881f6b44d0fea61036d080 (diff) |
Return a sample pointer from resamplers
Both resampling and filtering now avoid copying samples when they no-op.
Diffstat (limited to 'Alc/mixer.c')
-rw-r--r-- | Alc/mixer.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/Alc/mixer.c b/Alc/mixer.c index 86a0eef6..6ee76d1f 100644 --- a/Alc/mixer.c +++ b/Alc/mixer.c @@ -176,8 +176,8 @@ ALvoid MixSource(ALactivesource *src, ALCdevice *Device, ALuint SamplesToDo) for(chan = 0;chan < NumChannels;chan++) { - ALfloat *SrcData = Device->SampleData1; - ALfloat *ResampledData = Device->SampleData2; + const ALfloat *ResampledData; + ALfloat *SrcData = Device->SourceData; ALuint SrcDataSize = 0; if(Source->SourceType == AL_STATIC) @@ -341,16 +341,18 @@ ALvoid MixSource(ALactivesource *src, ALCdevice *Device, ALuint SamplesToDo) } /* Now resample, then filter and mix to the appropriate outputs. */ - src->Resample(&SrcData[BufferPrePadding], DataPosFrac, - increment, ResampledData, DstBufferSize); - + ResampledData = src->Resample( + &SrcData[BufferPrePadding], DataPosFrac, increment, + Device->ResampledData, DstBufferSize + ); { DirectParams *parms = &src->Direct; const ALfloat *samples; samples = DoFilters( &parms->Filters[chan].LowPass, &parms->Filters[chan].HighPass, - SrcData, ResampledData, DstBufferSize, parms->Filters[chan].ActiveType + Device->FilteredData, ResampledData, DstBufferSize, + parms->Filters[chan].ActiveType ); if(!src->IsHrtf) src->Dry.Mix(parms->OutBuffer, samples, &parms->Mix.Gains[chan], @@ -375,7 +377,8 @@ ALvoid MixSource(ALactivesource *src, ALCdevice *Device, ALuint SamplesToDo) samples = DoFilters( &parms->Filters[chan].LowPass, &parms->Filters[chan].HighPass, - SrcData, ResampledData, DstBufferSize, parms->Filters[chan].ActiveType + Device->FilteredData, ResampledData, DstBufferSize, + parms->Filters[chan].ActiveType ); src->WetMix(parms->OutBuffer, samples, &parms->Gain, maxu(parms->Counter, OutPos) - OutPos, |