EffectModule: robust computation of mMaxDisableWaitCnt
To compensate for overflow / underflow.
Test: Solo Tester and CTS effects
Bug: 70684279
Change-Id: I7ac3d74c43320a2c6427ba2b424c8edb5a0250b1
diff --git a/services/audioflinger/Effects.cpp b/services/audioflinger/Effects.cpp
index cd3c588..979908a 100644
--- a/services/audioflinger/Effects.cpp
+++ b/services/audioflinger/Effects.cpp
@@ -578,8 +578,11 @@
}
}
- mMaxDisableWaitCnt = (MAX_DISABLE_TIME_MS * mConfig.outputCfg.samplingRate) /
- (1000 * mConfig.outputCfg.buffer.frameCount);
+ // mConfig.outputCfg.buffer.frameCount cannot be zero.
+ mMaxDisableWaitCnt = (uint32_t)std::max(
+ (uint64_t)1, // mMaxDisableWaitCnt must be greater than zero.
+ (uint64_t)MAX_DISABLE_TIME_MS * mConfig.outputCfg.samplingRate
+ / ((uint64_t)1000 * mConfig.outputCfg.buffer.frameCount));
exit:
// TODO: consider clearing mConfig on error.