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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Aug 25 01:02:18 CEST 2020


Hi Kieran,

On Mon, Aug 24, 2020 at 10:29:56AM +0100, Kieran Bingham wrote:
> On 22/08/2020 14:35, 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>
> > ---
> >  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;
> 
> how many seconds does this add? (Sorry I /reallly/ hate std::pair
> nomenclature... and using it like this in the context of a timestamp too
> ... :-S)

I'm not a big fan either. The good news is that this will go away as
soon as we add a timestamp to the request :-)

> Other than that,
> 
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> 
> > +	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