[libcamera-devel] [PATCH] cam: Print timestamp of captured buffers
Niklas Söderlund
niklas.soderlund at ragnatech.se
Mon Aug 24 23:56:10 CEST 2020
Hi Laurent,
Thanks for your work.
On 2020-08-22 16:35:42 +0300, Laurent Pinchart wrote:
> 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>
It would be nice to capture the before and after output of the tool in
the commit message. This is a nit so with and without it added,
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> 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
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list