From 56a46842f8c782bcce804ffe8466ecab55eb257d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 9 Sep 2010 12:39:15 +0200 Subject: echo-cancel: improve accuracy Make the echo canceler drift up to 1ms now that things are more accurate. Add 10 samples of headroom to allow for timing inaccuracies. --- src/modules/echo-cancel/module-echo-cancel.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/modules/echo-cancel/module-echo-cancel.c b/src/modules/echo-cancel/module-echo-cancel.c index 4df77c30..467e2160 100644 --- a/src/modules/echo-cancel/module-echo-cancel.c +++ b/src/modules/echo-cancel/module-echo-cancel.c @@ -295,7 +295,7 @@ static void time_callback(pa_mainloop_api *a, pa_time_event *e, const struct tim new_rate = base_rate; } else { - if (diff_time > 4000) { + if (diff_time > 1000) { /* diff too big, quickly adjust */ pa_asyncmsgq_post(u->asyncmsgq, PA_MSGOBJECT(u->source_output), SOURCE_OUTPUT_MESSAGE_APPLY_DIFF_TIME, NULL, diff_time, NULL, NULL); @@ -594,6 +594,10 @@ static void apply_diff_time(struct userdata *u, int64_t diff_time) { diff = pa_usec_to_bytes (-diff_time, &u->source_output->sample_spec); if (diff > 0) { + /* add some extra safety samples to compensate for jitter in the + * timings */ + diff += 10 * pa_frame_size (&u->source_output->sample_spec); + pa_log_info("Playback after capture (%lld), drop sink %lld", (long long) diff_time, (long long) diff); u->sink_skip = diff; -- cgit