[libcamera-devel] [PATCH] cam: Print timestamp of captured buffers

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Aug 22 15:35:42 CEST 2020


Print the timestamp of the captured buffer in addition to the frame
rate, as this is more precise information that can help debugging issue.
While at it, compute the frame rate on the buffer timestamps instead of
sampling the clock in the request completion handler.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/cam/capture.cpp | 18 +++++++++++-------
 src/cam/capture.h   |  4 ++--
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index af9029b743de..5510c009ca57 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 b4e39d51fdfa..0aebdac944cf 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_;
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list