diff --git a/src/modules/module-echo-cancel.c b/src/modules/module-echo-cancel.c index 7e08eec5f..aa087e999 100644 --- a/src/modules/module-echo-cancel.c +++ b/src/modules/module-echo-cancel.c @@ -1587,19 +1587,27 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) goto error; } + unsigned int num = 0, denom = 1; if (impl->aec->latency) { - unsigned int num, denom, req_num, req_denom; + + if (sscanf(impl->aec->latency, "%u/%u", &num, &denom) != 2) { + pw_log_warn("Invalid AEC latency '%s', assuming 0", impl->aec->latency); + num = 0; + denom = 1; + } + } + if (num != 0 && denom != 0) { + unsigned int req_num = 0, req_denom = 1; unsigned int factor = 0; unsigned int new_num = 0; - spa_assert_se(sscanf(impl->aec->latency, "%u/%u", &num, &denom) == 2); - if ((str = pw_properties_get(props, PW_KEY_NODE_LATENCY)) != NULL) { - sscanf(str, "%u/%u", &req_num, &req_denom); - factor = (req_num * denom) / (req_denom * num); - new_num = req_num / factor * factor; + if (sscanf(str, "%u/%u", &req_num, &req_denom) == 2 && + req_denom != 0) { + factor = (req_num * denom) / (req_denom * num); + new_num = req_num / factor * factor; + } } - if (factor == 0 || new_num == 0) { pw_log_info("Setting node latency to %s", impl->aec->latency); pw_properties_set(props, PW_KEY_NODE_LATENCY, impl->aec->latency);