From b2beb11c8dda45a4cd36f2f0d763033b87be531e Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 6 Jul 2013 18:22:12 +0200 Subject: [PATCH] improve timing accuracy for meter-falloff calc. --- libs/ardour/audioengine.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 5b9d34f5e5..9f102a016a 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -759,13 +759,25 @@ void AudioEngine::meter_thread () { pthread_set_name (X_("meter")); + struct timeval clock1, clock2; + int64_t delay = 10000; /* 1/100th sec interval */ while (true) { - Glib::usleep (10000); /* 1/100th sec interval */ + /* TODO use select() for sleep: + * select() has a maxium delay time, + * [u]sleep has a minimum delay time + */ + Glib::usleep (delay); if (g_atomic_int_get(&m_meter_exit)) { break; } + gettimeofday(&clock1, NULL); Metering::Meter (); + gettimeofday(&clock2, NULL); + const int64_t elapsed_time = + (clock2.tv_sec-clock1.tv_sec) * 10000 + + (clock2.tv_usec-clock1.tv_usec); + delay = max((int64_t)0, 10000 - elapsed_time); } } -- 2.30.2