All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sakari Ailus <sakari.ailus@iki.fi>
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
	linux-media@vger.kernel.org, k.debski@samsung.com
Subject: Re: [PATCH v5.1 3/7] v4l: Add timestamp source flags, mask and document them
Date: Fri, 21 Feb 2014 12:58:58 +0100	[thread overview]
Message-ID: <1627498.vqEXNhvDry@avalon> (raw)
In-Reply-To: <53071CFA.5060503@iki.fi>

Hi Sakari,

On Friday 21 February 2014 11:31:38 Sakari Ailus wrote:
> Hans Verkuil wrote:
> > On 02/20/2014 08:41 PM, Sakari Ailus wrote:
> >> Some devices do not produce timestamps that correspond to the end of the
> >> frame. The user space should be informed on the matter. This patch
> >> achieves that by adding buffer flags (and a mask) for timestamp sources
> >> since more possible timestamping points are expected than just two.
> >> 
> >> A three-bit mask is defined (V4L2_BUF_FLAG_TSTAMP_SRC_MASK) and two of
> >> the
> >> eight possible values is are defined V4L2_BUF_FLAG_TSTAMP_SRC_EOF for end
> >> of frame (value zero) V4L2_BUF_FLAG_TSTAMP_SRC_SOE for start of exposure
> >> (next value).
> > 
> > Sorry, but I still have two small notes:
> >> Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi>
> >> ---
> >> since v5:
> >> - Add a note on software generated timestamp inaccuracy.
> >> 
> >>   Documentation/DocBook/media/v4l/io.xml   |   38
> >>   +++++++++++++++++++++++++-----
> >>   drivers/media/v4l2-core/videobuf2-core.c |    4 +++-
> >>   include/media/videobuf2-core.h           |    2 ++
> >>   include/uapi/linux/videodev2.h           |    4 ++++
> >>   4 files changed, 41 insertions(+), 7 deletions(-)
> >> 
> >> diff --git a/Documentation/DocBook/media/v4l/io.xml
> >> b/Documentation/DocBook/media/v4l/io.xml index 46d24b3..22b87bc 100644
> >> --- a/Documentation/DocBook/media/v4l/io.xml
> >> +++ b/Documentation/DocBook/media/v4l/io.xml
> >> @@ -653,12 +653,6 @@ plane, are stored in struct
> >> <structname>v4l2_plane</structname> instead.>> 
> >>   In that case, struct <structname>v4l2_buffer</structname> contains an
> >>   array of plane structures.</para>
> >> 
> >> -      <para>For timestamp types that are sampled from the system clock
> >> -(V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC) it is guaranteed that the timestamp
> >> is
> >> -taken after the complete frame has been received (or transmitted in
> >> -case of video output devices). For other kinds of
> >> -timestamps this may vary depending on the driver.</para>
> >> -
> >> 
> >>       <table frame="none" pgwide="1" id="v4l2-buffer">
> >>       
> >>         <title>struct <structname>v4l2_buffer</structname></title>
> >>         <tgroup cols="4">
> >> 
> >> @@ -1119,6 +1113,38 @@ in which case caches have not been used.</entry>
> >> 
> >>   	    <entry>The CAPTURE buffer timestamp has been taken from the
> >>   	    corresponding OUTPUT buffer. This flag applies only to mem2mem
> >>   	    devices.</entry>>>   	  
> >>   	  </row>
> >> 
> >> +	  <row>
> >> +	    <entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_MASK</constant></entry>
> >> +	    <entry>0x00070000</entry>
> >> +	    <entry>Mask for timestamp sources below. The timestamp source
> >> +	    defines the point of time the timestamp is taken in relation to
> >> +	    the frame. Logical and operation between the
> >> +	    <structfield>flags</structfield> field and
> >> +	    <constant>V4L2_BUF_FLAG_TSTAMP_SRC_MASK</constant> produces the
> >> +	    value of the timestamp source.</entry>
> >> +	  </row>
> >> +	  <row>
> >> +	    <entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_EOF</constant></entry>
> >> +	    <entry>0x00000000</entry>
> >> +	    <entry>End Of Frame. The buffer timestamp has been taken
> >> +	    when the last pixel of the frame has been received or the
> >> +	    last pixel of the frame has been transmitted. In practice,
> >> +	    software generated timestamps will typically be read from
> >> +	    the clock a small amount of time after the last pixel has
> >> +	    been received, depending on the system and other activity
> > 
> > s/been received/been received or transmitted/
> 
> I'll fix that.
> 
> >> +	    in it.</entry>
> >> +	  </row>
> >> +	  <row>
> >> +	    <entry><constant>V4L2_BUF_FLAG_TSTAMP_SRC_SOE</constant></entry>
> >> +	    <entry>0x00010000</entry>
> >> +	    <entry>Start Of Exposure. The buffer timestamp has been
> >> +	    taken when the exposure of the frame has begun. In
> >> +	    practice, software generated timestamps will typically be
> >> +	    read from the clock a small amount of time after the last
> >> +	    pixel has been received, depending on the system and other
> >> +	    activity in it. This is only valid for buffer type
> >> +	    <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>.</entry>
> > 
> > I would move the last sentence up to just before "In practice...". The
> > way it is now it looks like an afterthought.
> 
> Same here.
> 
> > I am also not sure whether the whole "In practice" sentence is valid
> > here. Certainly the bit about "the last pixel" isn't since this is the
> > "SOE" case and not the End Of Frame. In the case of the UVC driver (and
> > that's the only one using this timestamp source) the timestamps come from
> > the hardware as I understand it, so the "software generated" bit doesn't
> > apply.
> 
> Indeed. I don't know how the timestamp is even produced by the hardware.

In practice I don't know either, as that's hidden in the device firmware. The 
UVC specification just describes the timestamp as "The source clock time in 
native device clock units when the raw frame capture begins."

Let's face it, I'm pretty sure many devices don't care much and will send a 
time stamp that's taken at some other, possibly semi-random, time.

> It's possible to calculate it (decrementing the readout time + exposure
> time from the end of frame timestamp) and that's what the devices
> supposedly do. The pre-frame exposure time isn't available to the host,
> so the end of frame timestamp cannot be calculated by the host from the
> camera generated timestamp.
> 
> However the link to the host is USB which has a lot more latency than
> almost anything else which makes even hardware generated timestamps a
> little imprecise.

Why so ? There will be a jitter in frame arrival, but the hardware timestamp 
should be accurate (at least if properly generated by the camera firmware).

-- 
Regards,

Laurent Pinchart


  reply	other threads:[~2014-02-21 11:57 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-15 20:52 [PATCH v5 0/7] Fix buffer timestamp documentation, add new timestamp flags Sakari Ailus
2014-02-15 20:52 ` [PATCH v5 1/7] v4l: Document timestamp behaviour to correspond to reality Sakari Ailus
2014-02-15 20:53 ` [PATCH v5 2/7] v4l: Use full 32 bits for buffer flags Sakari Ailus
2014-02-17  8:46   ` Hans Verkuil
2014-02-23 11:49   ` Hans Verkuil
2014-02-24 15:34     ` Sakari Ailus
2014-02-24 16:02       ` Hans Verkuil
2014-02-24 17:57         ` Laurent Pinchart
2014-02-24 16:13       ` Kamil Debski
2014-02-25 11:44         ` 'Sakari Ailus'
2014-02-25 12:02           ` Hans Verkuil
2014-02-15 20:53 ` [PATCH v5 3/7] v4l: Add timestamp source flags, mask and document them Sakari Ailus
2014-02-17  8:54   ` Hans Verkuil
2014-02-17 23:29     ` Sakari Ailus
2014-02-20 19:41       ` [PATCH v5.1 " Sakari Ailus
2014-02-20 20:36         ` Hans Verkuil
2014-02-20 21:10           ` Sylwester Nawrocki
2014-02-20 21:20             ` Sylwester Nawrocki
2014-02-21  9:51             ` Sakari Ailus
2014-02-20 23:30           ` Laurent Pinchart
2014-02-21  7:17             ` Hans Verkuil
2014-02-21  9:31           ` Sakari Ailus
2014-02-21 11:58             ` Laurent Pinchart [this message]
2014-02-21 13:04               ` Sakari Ailus
2014-02-21 13:19                 ` Laurent Pinchart
2014-02-23 10:40             ` [PATCH v5.2 " Sakari Ailus
2014-02-23 11:36               ` Hans Verkuil
2014-02-25 13:09   ` [PATCH v5 " Kamil Debski
2014-02-26  0:09     ` 'Sakari Ailus'
2014-02-15 20:53 ` [PATCH v5 4/7] uvcvideo: Tell the user space we're using start-of-exposure timestamps Sakari Ailus
2014-02-17  0:51   ` Laurent Pinchart
2014-02-15 20:53 ` [PATCH v5 5/7] exynos-gsc, m2m-deinterlace, mx2_emmaprp: Copy v4l2_buffer data from src to dst Sakari Ailus
2014-02-25 13:08   ` Kamil Debski
2014-02-15 20:53 ` [PATCH v5 6/7] v4l: Copy timestamp source flags to destination on m2m devices Sakari Ailus
2014-02-25 13:08   ` Kamil Debski
2014-02-15 20:53 ` [PATCH v5 7/7] v4l: Document timestamp buffer flag behaviour Sakari Ailus
2014-02-15 21:03   ` Hans Verkuil
2014-02-16 17:50     ` Sakari Ailus
2014-02-17  0:56     ` Laurent Pinchart
2014-02-17  8:43       ` Hans Verkuil
2014-02-17 23:32         ` Sakari Ailus
2014-02-17 23:33           ` Sakari Ailus
2014-02-20 19:42             ` [PATCH v5.1 " Sakari Ailus
2014-02-20 20:25               ` Hans Verkuil
2014-02-23 10:39                 ` Sakari Ailus
2014-02-23 11:45   ` [PATCH v5 " Hans Verkuil
2014-02-25 17:08     ` Sakari Ailus
2014-02-25 17:28       ` Hans Verkuil
2014-02-26  0:04         ` Sakari Ailus
2014-02-26  0:07           ` Hans Verkuil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1627498.vqEXNhvDry@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=hverkuil@xs4all.nl \
    --cc=k.debski@samsung.com \
    --cc=linux-media@vger.kernel.org \
    --cc=sakari.ailus@iki.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.