summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cam/capture.cpp18
-rw-r--r--src/cam/capture.h4
2 files changed, 13 insertions, 9 deletions
diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index af9029b7..5510c009 100644
--- a/src/cam/capture.cpp
+++ b/src/cam/capture.cpp
@@ -5,7 +5,6 @@
* capture.cpp - Cam capture
*/
-#include <chrono>
#include <iomanip>
#include <iostream>
#include <limits.h>
@@ -159,14 +158,19 @@ void Capture::requestComplete(Request *request)
const Request::BufferMap &buffers = request->buffers();
- std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
- double fps = std::chrono::duration_cast<std::chrono::milliseconds>(now - last_).count();
- fps = last_ != std::chrono::steady_clock::time_point() && fps
- ? 1000.0 / fps : 0.0;
- last_ = now;
+ /*
+ * Compute the frame rate. The timestamp is arbitrarily retrieved from
+ * the first buffer, as all buffers should have matching timestamps.
+ */
+ uint64_t ts = buffers.begin()->second->metadata().timestamp;
+ double fps = ts - last_;
+ fps = last_ != 0 && fps ? 1000000000.0 / fps : 0.0;
+ last_ = ts;
std::stringstream info;
- info << "fps: " << std::fixed << std::setprecision(2) << fps;
+ info << ts / 1000000000 << "."
+ << std::setw(6) << std::setfill('0') << ts / 1000 % 1000000
+ << " (" << std::fixed << std::setprecision(2) << fps << " fps)";
for (auto it = buffers.begin(); it != buffers.end(); ++it) {
const Stream *stream = it->first;
diff --git a/src/cam/capture.h b/src/cam/capture.h
index b4e39d51..0aebdac9 100644
--- a/src/cam/capture.h
+++ b/src/cam/capture.h
@@ -7,8 +7,8 @@
#ifndef __CAM_CAPTURE_H__
#define __CAM_CAPTURE_H__
-#include <chrono>
#include <memory>
+#include <stdint.h>
#include <libcamera/buffer.h>
#include <libcamera/camera.h>
@@ -38,7 +38,7 @@ private:
std::map<const libcamera::Stream *, std::string> streamName_;
BufferWriter *writer_;
- std::chrono::steady_clock::time_point last_;
+ uint64_t last_;
EventLoop *loop_;
unsigned int captureCount_;