diff options
author | Wim Taymans <wim.taymans@collabora.co.uk> | 2010-09-09 12:39:15 +0200 |
---|---|---|
committer | Arun Raghavan <arun.raghavan@collabora.co.uk> | 2011-03-28 14:41:00 +0530 |
commit | 56a46842f8c782bcce804ffe8466ecab55eb257d (patch) | |
tree | 68340a4b4503c44fb352860f5148091386f5b560 | |
parent | 9f79c0ebb14644762aa032673eadc8c42271b645 (diff) |
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.
-rw-r--r-- | src/modules/echo-cancel/module-echo-cancel.c | 6 |
1 files changed, 5 insertions, 1 deletions
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; |