aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--alc/alu.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/alc/alu.cpp b/alc/alu.cpp
index fa362586..ac6c27ec 100644
--- a/alc/alu.cpp
+++ b/alc/alu.cpp
@@ -1890,7 +1890,8 @@ void Write(const al::span<const FloatBufferLine> InBuffer, void *OutBuffer, cons
ASSUME(FrameStep > 0);
ASSUME(SamplesToDo > 0);
- DevFmtType_t<T> *outbase = static_cast<DevFmtType_t<T>*>(OutBuffer) + Offset*FrameStep;
+ DevFmtType_t<T> *outbase{static_cast<DevFmtType_t<T>*>(OutBuffer) + Offset*FrameStep};
+ size_t c{0};
for(const FloatBufferLine &inbuf : InBuffer)
{
DevFmtType_t<T> *out{outbase++};
@@ -1900,6 +1901,16 @@ void Write(const al::span<const FloatBufferLine> InBuffer, void *OutBuffer, cons
out += FrameStep;
};
std::for_each(inbuf.begin(), inbuf.begin()+SamplesToDo, conv_sample);
+ ++c;
+ }
+ if(const size_t extra{FrameStep - c})
+ {
+ const auto silence = SampleConv<DevFmtType_t<T>>(0.0f);
+ for(size_t i{0};i < SamplesToDo;++i)
+ {
+ std::fill_n(outbase, extra, silence);
+ outbase += FrameStep;
+ }
}
}