[libcamera-devel] [PATCH] libcamera: buffer: Improve timestamp documentation

Niklas Söderlund niklas.soderlund at ragnatech.se
Sun Aug 30 10:11:24 CEST 2020


Hello,

On 2020-08-28 17:59:41 +0300, Laurent Pinchart wrote:
> Hi Kieran,
> 
> Thank you for the patch.
> 
> > The Buffer timestamp documentation is short and does not explain that
> > the timestamp is based on a monotonic time source, as opposed to the
> > real/wall-time clocks available in the system.
> > 
> > Expand upon the statements to detail that it can not be used directly as
> > a wall-clock for the captured date/time without a further reference
> > point, and that by taking a reference point - the user will be bringing
> > in potential inconsistencies which must be considered.
> > 
> > Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> > ---
> >  src/libcamera/buffer.cpp | 8 +++++++-
> >  1 file changed, 7 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/libcamera/buffer.cpp b/src/libcamera/buffer.cpp
> > index a094737d0392..c08ca4234b29 100644
> > --- a/src/libcamera/buffer.cpp
> > +++ b/src/libcamera/buffer.cpp
> > @@ -92,7 +92,13 @@ LOG_DEFINE_CATEGORY(Buffer)
> >   * The timestamp is expressed as a number of nanoseconds relative to the system
> >   * clock since an unspecified time point.
> >   *
> > - * \todo Be more precise on what timestamps refer to.
> > + * This timestamp is monotonic and not affected by changes in system time,
> > + * however it is still susceptible to small adjustments made by NTP.
> > + *
> > + * This clock has no specification on its time base, so can not be directly be
> > + * converted to a 'real' wall clock time without a comparable reference point.
> > + * However, continued conversions from the reference point, may bring in
> > + * inaccuracies due to changes on the real time clock which must be considered.
> 
> I'd keep a todo here, as we still haven't decided what clock source is
> the most suitable. Describing what is being done today is of course a
> good idea, but one issue is that we get the timestamp directly from
> V4L2, and V4L2 doesn't guarantee what timestamp source is used. I've had
> a look at Linus' master branch, and we have, in drivers/media/,
> 
>     103 ktime_get
>       6 ktime_get_boottime
>       6 ktime_get_real
> 
> ktime_get_boottime is only used in DVB, so we're fine there.
> ktime_get_real is used by
> 
> drivers/media/pci/ttpci/av7110.c:       ktime_get_real_ts64(&ts);
> drivers/media/rc/streamzap.c:           sz->signal_start = ktime_get_real();
> drivers/media/rc/streamzap.c:   sz->signal_start = ktime_get_real();
> drivers/media/test-drivers/vivid/vivid-rds-gen.c:                       time64_to_tm(ktime_get_real_seconds(), 0, &tm);
> drivers/media/test-drivers/vivid/vivid-vbi-gen.c:       time64_to_tm(ktime_get_real_seconds(), 0, &tm);
> drivers/media/usb/uvc/uvc_video.c:              return ktime_get_real();
> 
> UVC supports selecting either the monotonic or real clock, with the
> monotonic clock being the default, so I think we're fine too.
> 
> We can thus assume for the time being that we only get CLOCK_MONOTONIC
> timestamp. Should we simplify the doc by just telling we use
> CLOCK_MONOTONIC, with a todo comment to revisit the topic and possibly
> select a different clock, or make the clock source configurable ?

I think we should always use the CLOCK_MONOTONIC for buffer/request 
timestamps. For other clocks we might have clock drift or adjustment 
(ntp) messing with the values creating subtle bugs. For applications 
wanting to have a stamp to write to file I think they need to create 
that themself, taking all the localization and timezones into account 
:-)

> 
> >   */
> >  
> >  /**
> 
> -- 
> 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