improve timing accuracy for meter-falloff calc.

This commit is contained in:
Robin Gareus 2013-07-06 18:22:12 +02:00
parent c5ded1dbeb
commit b2beb11c8d

View file

@ -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);
}
}