Avoid a divide-by-zero in UhjDecoder::decodeStereo

master
Chris Robinson 2022-03-07 17:32:13 -08:00
parent 1369a081a0
commit 90db129d60
1 changed files with 4 additions and 4 deletions

View File

@ -191,14 +191,14 @@ void UhjDecoder::decodeStereo(const al::span<float*> samples, const size_t sampl
*/ */
const float wtarget{mWidthControl}; const float wtarget{mWidthControl};
const float wcurrent{unlikely(mCurrentWidth < 0.0f) ? wtarget : mCurrentWidth}; const float wcurrent{unlikely(mCurrentWidth < 0.0f) ? wtarget : mCurrentWidth};
const float wstep{(wtarget - wcurrent) / static_cast<float>(forwardSamples)}; if(likely(wtarget == wcurrent) || unlikely(forwardSamples == 0))
if(likely(wstep < 0.00001f))
{ {
for(size_t i{0};i < samplesToDo+sFilterDelay;++i) for(size_t i{0};i < samplesToDo+sFilterDelay;++i)
mD[i] = (left[i] - right[i]) * wtarget; mD[i] = (left[i] - right[i]) * wcurrent;
} }
else else
{ {
const float wstep{(wtarget - wcurrent) / static_cast<float>(forwardSamples)};
float fi{0.0f}; float fi{0.0f};
size_t i{0}; size_t i{0};
for(;i < forwardSamples;++i) for(;i < forwardSamples;++i)
@ -208,8 +208,8 @@ void UhjDecoder::decodeStereo(const al::span<float*> samples, const size_t sampl
} }
for(;i < samplesToDo+sFilterDelay;++i) for(;i < samplesToDo+sFilterDelay;++i)
mD[i] = (left[i] - right[i]) * wtarget; mD[i] = (left[i] - right[i]) * wtarget;
mCurrentWidth = wtarget;
} }
mCurrentWidth = wtarget;
} }
float *RESTRICT woutput{al::assume_aligned<16>(samples[0])}; float *RESTRICT woutput{al::assume_aligned<16>(samples[0])};