device: estimate stddev of frames capture

This commit is contained in:
Kamil Trzcinski
2023-06-09 00:48:54 +02:00
parent a26542da39
commit f7a15ce68a
4 changed files with 31 additions and 1 deletions

View File

@@ -171,6 +171,10 @@ buffer_t *buffer_list_dequeue(buffer_list_t *buf_list)
goto error;
}
uint64_t dequeued_us = 0;
if (buf_list->last_dequeued_us > 0)
dequeued_us = get_monotonic_time_us(NULL, NULL) - buf_list->last_dequeued_us;
buf_list->last_dequeued_us = get_monotonic_time_us(NULL, NULL);
buf_list->last_capture_time_us = buf_list->last_dequeued_us - buf->captured_time_us;
buf_list->last_in_queue_time_us = buf_list->last_dequeued_us - buf->enqueue_time_us;
@@ -203,6 +207,18 @@ buffer_t *buffer_list_dequeue(buffer_list_t *buf_list)
}
buf_list->stats.frames++;
float old_average = buf_list->stats.avg_dequeued_us;
float old_sum = buf_list->stats.avg_dequeued_us * buf_list->stats.frames_since_reset;
float old_stddev_sum = buf_list->stats.stddev_dequeued_us * buf_list->stats.stddev_dequeued_us * buf_list->stats.frames_since_reset;
buf_list->stats.frames_since_reset++;
if (dequeued_us > buf_list->stats.max_dequeued_us)
buf_list->stats.max_dequeued_us = dequeued_us;
buf_list->stats.avg_dequeued_us = (float)(old_sum + dequeued_us) / buf_list->stats.frames_since_reset;
buf_list->stats.stddev_dequeued_us = sqrt(
( old_stddev_sum + (dequeued_us - old_average) * (dequeued_us - buf_list->stats.avg_dequeued_us)
) / buf_list->stats.frames_since_reset);
return buf;
error: