aboutsummaryrefslogtreecommitdiffstats
path: root/alc/effects/convolution.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'alc/effects/convolution.cpp')
-rw-r--r--alc/effects/convolution.cpp39
1 files changed, 18 insertions, 21 deletions
diff --git a/alc/effects/convolution.cpp b/alc/effects/convolution.cpp
index 9d8f9767..77efc11e 100644
--- a/alc/effects/convolution.cpp
+++ b/alc/effects/convolution.cpp
@@ -124,14 +124,13 @@ struct ConvolutionState final : public EffectState {
alignas(16) std::array<complex_d,ConvolveUpdateSize> mFftBuffer{};
ALuint mNumChannels;
- alignas(16) FloatBufferLine mTempBuffer[MAX_FILTER_CHANNELS]{};
-
struct {
+ alignas(16) FloatBufferLine mBuffer{};
float mHfScale{};
BandSplitter mFilter{};
float Current[MAX_OUTPUT_CHANNELS]{};
float Target[MAX_OUTPUT_CHANNELS]{};
- } mOutChans[MAX_FILTER_CHANNELS];
+ } mChans[MAX_FILTER_CHANNELS];
ConvolutionState() = default;
~ConvolutionState() override = default;
@@ -153,8 +152,8 @@ void ConvolutionState::NormalMix(const al::span<FloatBufferLine> samplesOut,
const size_t samplesToDo)
{
for(size_t c{0};c < mNumChannels;++c)
- MixSamples({mTempBuffer[c].data(), samplesToDo}, samplesOut, mOutChans[c].Current,
- mOutChans[c].Target, samplesToDo, 0);
+ MixSamples({mChans[c].mBuffer.data(), samplesToDo}, samplesOut, mChans[c].Current,
+ mChans[c].Target, samplesToDo, 0);
}
void ConvolutionState::UpsampleMix(const al::span<FloatBufferLine> samplesOut,
@@ -162,9 +161,9 @@ void ConvolutionState::UpsampleMix(const al::span<FloatBufferLine> samplesOut,
{
for(size_t c{0};c < mNumChannels;++c)
{
- const al::span<float> src{mTempBuffer[c].data(), samplesToDo};
- mOutChans[c].mFilter.processHfScale(src, mOutChans[c].mHfScale);
- MixSamples(src, samplesOut, mOutChans[c].Current, mOutChans[c].Target, samplesToDo, 0);
+ const al::span<float> src{mChans[c].mBuffer.data(), samplesToDo};
+ mChans[c].mFilter.processHfScale(src, mChans[c].mHfScale);
+ MixSamples(src, samplesOut, mChans[c].Current, mChans[c].Target, samplesToDo, 0);
}
}
@@ -175,12 +174,10 @@ void ConvolutionState::deviceUpdate(const ALCdevice *device)
buffer.fill(0.0f);
mFftBuffer.fill(complex_d{});
- for(auto &buffer : mTempBuffer)
- buffer.fill(0.0);
-
const BandSplitter splitter{400.0f / static_cast<float>(device->Frequency)};
- for(auto &e : mOutChans)
+ for(auto &e : mChans)
{
+ e.mBuffer.fill(0.0f);
e.mHfScale = 1.0f;
e.mFilter = splitter;
std::fill(std::begin(e.Current), std::end(e.Current), 0.0f);
@@ -292,9 +289,9 @@ void ConvolutionState::update(const ALCcontext *context, const ALeffectslot *slo
mMix = &ConvolutionState::UpsampleMix;
const auto scales = BFormatDec::GetHFOrderScales(mFilter->mAmbiOrder,
device->mAmbiOrder);
- mOutChans[0].mHfScale = scales[0];
+ mChans[0].mHfScale = scales[0];
for(size_t i{1};i < mNumChannels;++i)
- mOutChans[i].mHfScale = scales[1];
+ mChans[i].mHfScale = scales[1];
}
mOutTarget = target.Main->Buffer;
@@ -308,7 +305,7 @@ void ConvolutionState::update(const ALCcontext *context, const ALeffectslot *slo
{
const size_t acn{index_map[c]};
coeffs[acn] = scales[acn];
- ComputePanGains(target.Main, coeffs.data(), gain, mOutChans[c].Target);
+ ComputePanGains(target.Main, coeffs.data(), gain, mChans[c].Target);
coeffs[acn] = 0.0f;
}
}
@@ -322,8 +319,8 @@ void ConvolutionState::update(const ALCcontext *context, const ALeffectslot *slo
if(lidx != INVALID_CHANNEL_INDEX && ridx != INVALID_CHANNEL_INDEX)
{
mOutTarget = target.RealOut->Buffer;
- mOutChans[0].Target[lidx] = gain;
- mOutChans[1].Target[ridx] = gain;
+ mChans[0].Target[lidx] = gain;
+ mChans[1].Target[ridx] = gain;
}
else
{
@@ -331,8 +328,8 @@ void ConvolutionState::update(const ALCcontext *context, const ALeffectslot *slo
const auto rcoeffs = CalcDirectionCoeffs({ 1.0f, 0.0f, 0.0f}, 0.0f);
mOutTarget = target.Main->Buffer;
- ComputePanGains(target.Main, lcoeffs.data(), gain, mOutChans[0].Target);
- ComputePanGains(target.Main, rcoeffs.data(), gain, mOutChans[1].Target);
+ ComputePanGains(target.Main, lcoeffs.data(), gain, mChans[0].Target);
+ ComputePanGains(target.Main, rcoeffs.data(), gain, mChans[1].Target);
}
}
else if(mFilter->mChannels == FmtMono)
@@ -340,7 +337,7 @@ void ConvolutionState::update(const ALCcontext *context, const ALeffectslot *slo
const auto coeffs = CalcDirectionCoeffs({0.0f, 0.0f, -1.0f}, 0.0f);
mOutTarget = target.Main->Buffer;
- ComputePanGains(target.Main, coeffs.data(), gain, mOutChans[0].Target);
+ ComputePanGains(target.Main, coeffs.data(), gain, mChans[0].Target);
}
}
@@ -363,7 +360,7 @@ void ConvolutionState::process(const size_t samplesToDo,
for(size_t c{0};c < mNumChannels;++c)
{
auto fifo_iter = mOutput[c].begin() + mFifoPos;
- std::transform(fifo_iter, fifo_iter+todo, mTempBuffer[c].begin()+base,
+ std::transform(fifo_iter, fifo_iter+todo, mChans[c].mBuffer.begin()+base,
[](double d) noexcept -> float { return static_cast<float>(d); });
}