[pulseaudio-discuss] [PATCH] echo-cancel: Fix assert with webrtc's built-in drift compensation
Arun Raghavan
arun at arunraghavan.net
Fri Mar 17 02:29:01 UTC 2017
The webrtc canceller seems to have changed to require that the
set_stream_drift_samples() method be called before every call of
ProcessStream().
So we now call ec->set_stream_drift_samples() before calling
ec->record() by:
1. Always calling do_push_drift_comp() instead of only when the sink is
running
2. Calling set_stream_drift_samples() in the loop with record() instead
of outside
We do kind of leak this quirk of the webrtc canceller into the generic
bits of module-echo-cancel, but this should not be harmful in the
general case either.
---
src/modules/echo-cancel/module-echo-cancel.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/src/modules/echo-cancel/module-echo-cancel.c b/src/modules/echo-cancel/module-echo-cancel.c
index 0a9f290..2c7449a 100644
--- a/src/modules/echo-cancel/module-echo-cancel.c
+++ b/src/modules/echo-cancel/module-echo-cancel.c
@@ -736,9 +736,6 @@ static void do_push_drift_comp(struct userdata *u) {
u->sink_rem = plen % u->sink_blocksize;
u->source_rem = rlen % u->source_output_blocksize;
- /* Now let the canceller work its drift compensation magic */
- u->ec->set_drift(u->ec, drift);
-
if (u->save_aec) {
if (u->drift_file)
fprintf(u->drift_file, "d %a\n", drift);
@@ -778,6 +775,7 @@ static void do_push_drift_comp(struct userdata *u) {
cchunk.memblock = pa_memblock_new(u->source->core->mempool, cchunk.length);
cdata = pa_memblock_acquire(cchunk.memblock);
+ u->ec->set_drift(u->ec, drift);
u->ec->record(u->ec, rdata, cdata);
if (u->save_aec) {
@@ -946,8 +944,8 @@ static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk)
u->sink_skip -= to_skip;
}
- /* process and push out samples, do drift compensation only if the sink is actually running */
- if (u->ec->params.drift_compensation && u->sink->thread_info.state == PA_SINK_RUNNING)
+ /* process and push out samples */
+ if (u->ec->params.drift_compensation)
do_push_drift_comp(u);
else
do_push(u);
--
2.9.3
More information about the pulseaudio-discuss
mailing list