From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sakari Ailus <sakari.ailus@iki.fi>
Cc: linux-media@vger.kernel.org, hverkuil@xs4all.nl, k.debski@samsung.com
Subject: Re: [PATCH v4.1 3/3] v4l: Add V4L2_BUF_FLAG_TIMESTAMP_SOF and use it
Date: Wed, 28 Aug 2013 18:14:44 +0200 [thread overview]
Message-ID: <3137420.D3pZN9rLod@avalon> (raw)
In-Reply-To: <20130828160922.GF2835@valkosipuli.retiisi.org.uk>
On Wednesday 28 August 2013 19:09:23 Sakari Ailus wrote:
> Hi Laurent,
>
> Thanks for the comments!
>
> On Wed, Aug 28, 2013 at 06:03:20PM +0200, Laurent Pinchart wrote:
> > Hi Sakari,
> >
> > Thank you for the patches.
> >
> > On Wednesday 28 August 2013 18:24:55 Sakari Ailus wrote:
> > > Some devices such as the uvc produce timestamps at the beginning of the
> > > frame rather than at the end of it. Add a buffer flag
> > > (V4L2_BUF_FLAG_TIMESTAMP_SOF) to tell about this.
> > >
> > > Also document timestamp_type in struct vb2_queue, and make the uvc set
> > > the
> > > buffer flag.
> > >
> > > Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi>
> > > ---
> > > since v4:
> > > - Fixes according to Hans's comments.
> > >
> > > - Note in comment the uvc driver will set the SOF flag from now on.
> > >
> > > - Change comment of vb2_queue timestamp_type field: this is timestamp
> > > flags
> > >
> > > rather than just type. I stopped short of renaming the field.
> > >
> > > Documentation/DocBook/media/v4l/io.xml | 19 ++++++++++++++-----
> > > drivers/media/usb/uvc/uvc_queue.c | 3 ++-
> > > include/media/videobuf2-core.h | 1 +
> > > include/uapi/linux/videodev2.h | 10 ++++++++++
> > > 4 files changed, 27 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/Documentation/DocBook/media/v4l/io.xml
> > > b/Documentation/DocBook/media/v4l/io.xml index 2c155cc..3aee210 100644
> > > --- a/Documentation/DocBook/media/v4l/io.xml
> > > +++ b/Documentation/DocBook/media/v4l/io.xml
> > > @@ -654,11 +654,12 @@ 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>
> > > + <para>The timestamp is taken once the complete frame has been
> > > +received (or transmitted for output devices) unless
> > > +<constant>V4L2_BUF_FLAG_TIMESTAMP_SOF</constant> buffer flag is set.
> > > +If <constant>V4L2_BUF_FLAG_TIMESTAMP_SOF</constant> is set, the
> > > +timestamp is taken when the first pixel of the frame is received
> > > +(or transmitted).</para>
> > >
> > > <table frame="none" pgwide="1" id="v4l2-buffer">
> > >
> > > <title>struct <structname>v4l2_buffer</structname></title>
> > >
> > > @@ -1120,6 +1121,14 @@ 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_TIMESTAMP_SOF</constant></entry>
> > > + <entry>0x00010000</entry>
> > > + <entry>The buffer timestamp has been taken when the first
> > > + pixel is received (or transmitted for output devices). If
> > > + this flag is not set, the timestamp is taken when the
> > > + entire frame has been received (or transmitted).</entry>
> > > + </row>
> > >
> > > </tbody>
> > >
> > > </tgroup>
> > >
> > > </table>
> > >
> > > diff --git a/drivers/media/usb/uvc/uvc_queue.c
> > > b/drivers/media/usb/uvc/uvc_queue.c index cd962be..0d80512 100644
> > > --- a/drivers/media/usb/uvc/uvc_queue.c
> > > +++ b/drivers/media/usb/uvc/uvc_queue.c
> > > @@ -149,7 +149,8 @@ int uvc_queue_init(struct uvc_video_queue *queue,
> > > enum
> > > v4l2_buf_type type, queue->queue.buf_struct_size = sizeof(struct
> > > uvc_buffer);
> > >
> > > queue->queue.ops = &uvc_queue_qops;
> > > queue->queue.mem_ops = &vb2_vmalloc_memops;
> > >
> > > - queue->queue.timestamp_type = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> > > + queue->queue.timestamp_type = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
> > > + | V4L2_BUF_FLAG_TIMESTAMP_SOF;
> > >
> > > ret = vb2_queue_init(&queue->queue);
> > > if (ret)
> > >
> > > return ret;
> > >
> > > diff --git a/include/media/videobuf2-core.h
> > > b/include/media/videobuf2-core.h index 6781258..033efc7 100644
> > > --- a/include/media/videobuf2-core.h
> > > +++ b/include/media/videobuf2-core.h
> > > @@ -307,6 +307,7 @@ struct v4l2_fh;
> > >
> > > * @buf_struct_size: size of the driver-specific buffer structure;
> > > * "0" indicates the driver doesn't want to use a custom buffer
> > > * structure type, so sizeof(struct vb2_buffer) will is used
> > >
> > > + * @timestamp_type: Timestamp flags; V4L2_BUF_FLAGS_TIMESTAMP_*
> > >
> > > * @gfp_flags: additional gfp flags used when allocating the buffers.
> > > * Typically this is 0, but it may be e.g. GFP_DMA or __GFP_DMA32
> > > * to force the buffer allocation to a specific memory zone.
> > >
> > > diff --git a/include/uapi/linux/videodev2.h
> > > b/include/uapi/linux/videodev2.h index 691077d..c57765e 100644
> > > --- a/include/uapi/linux/videodev2.h
> > > +++ b/include/uapi/linux/videodev2.h
> > > @@ -695,6 +695,16 @@ struct v4l2_buffer {
> > >
> > > #define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x00000000
> > > #define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x00002000
> > > #define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x00004000
> > >
> > > +/*
> > > + * Timestamp taken once the first pixel is received (or transmitted).
> > > + * If the flag is not set the buffer timestamp is taken at the end of
> > > + * the frame. This is not a timestamp type.
> >
> > UVC devices timestamp frames when the frame is captured, not when the
> > first
> > pixel is transmitted.
>
> I.e. we shouldn't set the SOF flag? "When the frame is captured" doesn't say
> much, or almost anything in terms of *when*. The frames have exposure time
> and rolling shutter makes a difference, too.
The UVC 1.1 specification defines the timestamp as
"The source clock time in native deviceclock units when the raw frame capture
begins."
What devices do in practice may differ :-)
> > For the other two patches,
> >
> > Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> Thanks! :-)
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2013-08-28 16:13 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-25 23:02 [PATCH v4 0/3] Fix buffer timestamp documentation Sakari Ailus
2013-08-25 23:02 ` [PATCH v4 1/3] v4l: Document timestamp behaviour to correspond to reality Sakari Ailus
2013-08-28 12:13 ` Hans Verkuil
2013-08-28 15:04 ` Sakari Ailus
2013-08-28 15:23 ` [PATCH v4.1 " Sakari Ailus
2013-08-28 15:19 ` Hans Verkuil
2013-08-25 23:02 ` [PATCH v4 2/3] v4l: Use full 32 bits for buffer flags Sakari Ailus
2013-08-25 23:02 ` [PATCH v4 3/3] v4l: Add V4L2_BUF_FLAG_TIMESTAMP_SOF and use it Sakari Ailus
2013-08-28 12:19 ` Hans Verkuil
2013-08-28 15:24 ` [PATCH v4.1 " Sakari Ailus
2013-08-28 15:30 ` Hans Verkuil
2013-08-28 16:06 ` Sakari Ailus
2013-08-28 16:03 ` Laurent Pinchart
2013-08-28 16:09 ` Sakari Ailus
2013-08-28 16:14 ` Laurent Pinchart [this message]
2013-08-28 16:39 ` Sakari Ailus
2013-08-28 23:25 ` Laurent Pinchart
2013-08-29 11:33 ` Sakari Ailus
2013-08-30 11:31 ` Laurent Pinchart
2013-08-30 16:08 ` Sakari Ailus
2013-08-31 21:43 ` Laurent Pinchart
2013-09-05 16:31 ` Sakari Ailus
2013-09-06 11:05 ` Laurent Pinchart
2013-12-12 12:37 ` Hans Verkuil
2014-01-31 15:39 ` Laurent Pinchart
2014-01-31 15:45 ` Hans Verkuil
2014-01-31 16:42 ` Sakari Ailus
2014-01-31 17:21 ` Hans Verkuil
2014-02-01 9:06 ` Sakari Ailus
2014-02-02 9:27 ` Laurent Pinchart
2014-02-05 8:13 ` Sakari Ailus
2014-02-07 22:52 ` [PATCH v4.2 3/4] v4l: Add timestamp source flags, mask and document them Sakari Ailus
2014-02-07 22:52 ` [PATCH v4.2 4/4] v4l: Document timestamp buffer flag behaviour Sakari Ailus
2014-02-08 12:32 ` Hans Verkuil
2014-02-08 17:30 ` Sakari Ailus
2014-02-10 9:49 ` [PATCH v4.2 3/4] v4l: Add timestamp source flags, mask and document them Hans Verkuil
2014-02-10 10:24 ` Sakari Ailus
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=3137420.D3pZN9rLod@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.