summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluming <luming1@xiaomi.com>2020-01-03 10:16:22 +0800
committerAndy Hung <hunga@google.com>2020-02-05 21:33:14 +0000
commit2e56379329873c4be3b5e3e04363020cd82356d9 (patch)
tree13a689b5ee1c75cf71322f18b92ef8459ee2d831
parent79ec36fa8410d9644ae07d2ec25620edf832756f (diff)
downloadaudio-2e56379329873c4be3b5e3e04363020cd82356d9.tar.gz
visualizer: fix issue of subtraction overflow
Test: playing music and using app to create Visualizer AudioEffect, enable it and check whether if audioserver crash. Test: Clarity app with AAC file, verified visualizer works in offload. Bug: 148959619 Change-Id: Ia7d02b519a6175fb4b52ef530ebb8c5e60614aeb
-rw-r--r--visualizer/offload_visualizer.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/visualizer/offload_visualizer.c b/visualizer/offload_visualizer.c
index 74beac7..e445e84 100644
--- a/visualizer/offload_visualizer.c
+++ b/visualizer/offload_visualizer.c
@@ -835,13 +835,16 @@ int visualizer_command(effect_context_t * context, uint32_t cmdCode, uint32_t cm
if (context->state == EFFECT_STATE_ACTIVE) {
int32_t latency_ms = visu_ctxt->latency;
const uint32_t delta_ms = visualizer_get_delta_time_ms_from_updated_time(visu_ctxt);
- latency_ms -= delta_ms;
- if (latency_ms < 0) {
+ if (latency_ms < delta_ms) {
latency_ms = 0;
+ } else {
+ latency_ms -= delta_ms;
}
const uint32_t delta_smp = context->config.inputCfg.samplingRate * latency_ms / 1000;
- int32_t capture_point = visu_ctxt->capture_idx - visu_ctxt->capture_size - delta_smp;
+ int32_t capture_point = 0;
+ __builtin_sub_overflow(visu_ctxt->capture_idx, visu_ctxt->capture_size + delta_smp,
+ &capture_point);
int32_t capture_size = visu_ctxt->capture_size;
if (capture_point < 0) {
int32_t size = -capture_point;