В (c ++ like) псевдокоде эти два я использовал в промышленных приложениях для обработки изображений, которые должны были обрабатывать изображения с набора камер с внешним запуском. Изменения в «частоте кадров» имели другой источник (медленное или более быстрое производство на ленте), но проблема та же. (Я предполагаю, что у вас есть простой вызов timer.peek (), который дает вам что-то вроде nr msec (nsec?) С момента запуска приложения или последнего вызова)
Решение 1: быстро, но не обновляется каждый кадр
do while (1)
{
ProcessImage(frame)
if (frame.framenumber%poll_interval==0)
{
new_time=timer.peek()
framerate=poll_interval/(new_time - last_time)
last_time=new_time
}
}
Решение 2: обновляется каждый кадр, требуется больше памяти и процессора
do while (1)
{
ProcessImage(frame)
new_time=timer.peek()
delta=new_time - last_time
last_time = new_time
total_time += delta
delta_history.push(delta)
framerate= delta_history.length() / total_time
while (delta_history.length() > avg_interval)
{
oldest_delta = delta_history.pop()
total_time -= oldest_delta
}
}