LibAudio: Prevent overflow in QOA LMS prediction

This commit is contained in:
kleines Filmröllchen 2023-08-20 18:08:52 +02:00 committed by Andrew Kaster
parent ede8582def
commit 24f5914d18
Notes: sideshowbarker 2024-07-16 20:39:14 +09:00

View file

@ -38,10 +38,11 @@ LMSState::LMSState(u64 history_packed, u64 weights_packed)
i32 LMSState::predict() const
{
i32 prediction = 0;
// The spec specifies that overflows are not allowed, but we do a safe thing anyways.
Checked<i32> prediction = 0;
for (size_t i = 0; i < lms_history; ++i)
prediction += history[i] * weights[i];
return prediction >> 13;
prediction.saturating_add(Checked<i32>::saturating_mul(history[i], weights[i]));
return prediction.value() >> 13;
}
void LMSState::update(i32 sample, i32 residual)