From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: Sakari Ailus <sakari.ailus@iki.fi>,
linux-media@vger.kernel.org, k.debski@samsung.com
Subject: Re: [PATCH 1/1] v4l: Document timestamp behaviour to correspond to reality
Date: Mon, 28 Jan 2013 20:56:21 +0100 [thread overview]
Message-ID: <3003277.ZHAgxXzzuq@avalon> (raw)
In-Reply-To: <201301281055.14085.hverkuil@xs4all.nl>
On Monday 28 January 2013 10:55:14 Hans Verkuil wrote:
> On Fri January 25 2013 19:03:29 Sakari Ailus wrote:
> > Document that monotonic timestamps are taken after the corresponding frame
> > has been received, not when the reception has begun. This corresponds to
> > the reality of current drivers: the timestamp is naturally taken when the
> > hardware triggers an interrupt to tell the driver to handle the received
> > frame.
> >
> > Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi>
> > ---
> >
> > Documentation/DocBook/media/v4l/io.xml | 27 ++++++++++++++-------------
> > 1 files changed, 14 insertions(+), 13 deletions(-)
> >
> > diff --git a/Documentation/DocBook/media/v4l/io.xml
> > b/Documentation/DocBook/media/v4l/io.xml index 2c4646d..3b8bf61 100644
> > --- a/Documentation/DocBook/media/v4l/io.xml
> > +++ b/Documentation/DocBook/media/v4l/io.xml
> > @@ -654,19 +654,20 @@ 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>Nominally timestamps refer to the first data byte
> > transmitted.
> > -In practice however the wide range of hardware covered by the V4L2 API
> > -limits timestamp accuracy. Often an interrupt routine will
> > -sample the system clock shortly after the field or frame was stored
> > -completely in memory. So applications must expect a constant
> > -difference up to one field or frame period plus a small (few scan
> > -lines) random error. The delay and error can be much
> > -larger due to compression or transmission over an external bus when
> > -the frames are not properly stamped by the sender. This is frequently
> > -the case with USB cameras. Here timestamps refer to the instant the
> > -field or frame was received by the driver, not the capture time. These
> > -devices identify by not enumerating any video standards, see <xref
> > -linkend="standard" />.</para>
> > + <para>On 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.
>
> add: " (or transmitted for video output devices)"
The uvcvideo driver currently uses monotonic timestamps corresponding to the
start of the frame :-)
> > For other kinds of
> > +timestamps this may vary depending on the driver. In practice however the
> > +wide range of hardware covered by the V4L2 API limits timestamp accuracy.
> > +Often an interrupt routine will sample the system clock shortly after the
> > +field or frame was stored completely in memory. So applications must
> > expect +a constant difference up to one field or frame period plus a
> > small (few scan +lines) random error. The delay and error can be much
> > larger due to +compression or transmission over an external bus when the
> > frames are not +properly stamped by the sender. This is frequently the
> > case with USB +cameras. Here timestamps refer to the instant the field or
> > frame was +received by the driver, not the capture time. These devices
> > identify by not +enumerating any video standards, see <xref
> > linkend="standard" />.</para>
> I'm not sure if there is any reliable way at the moment to identify such
> devices. At least in the past (that may not be true anymore) some webcam
> drivers *did* implement S_STD.
>
> There are also devices where one input is a webcam and another input is a
> composite (TV) input (the vino driver for old SGIs is one of those).
>
> The best method I know is to check the capabilities field returned by
> ENUMINPUT for the current input and see if any of the STD/DV_TIMINGS/PRESETS
> caps are set. If not, then it is a camera. Of course, this assumes there
> are no more webcam drivers that use S_STD.
>
> I would much prefer to add a proper webcam input type to ENUMINPUT, but I'm
> afraid that would break apps.
>
> > <para>Similar limitations apply to output timestamps. Typically
> >
> > the video hardware locks to a clock controlling the video timing, the
>
> This paragraph on output timestamps can be deleted IMHO.
>
> And the paragraph after that can probably be removed completely as well
> that we no longer use gettimeofday:
>
> "Apart of limitations of the video device and natural inaccuracies of
> all clocks, it should be noted system time itself is not perfectly stable.
> It can be affected by power saving cycles, warped to insert leap seconds,
> or even turned back or forth by the system administrator affecting long
> term measurements."
>
> Ditto for the footnote at the end of that paragraph.
>
> The timestamp field documentation is wrong as well for output types. No
> driver uses the timestamp field as input (i.e. delaying frames until that
> timestamp has been reached). It also says that the timestamp is the time at
> which the first data byte was sent out, that should be the last data byte.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2013-01-28 19:56 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-25 18:03 [PATCH 1/1] v4l: Document timestamp behaviour to correspond to reality Sakari Ailus
2013-01-28 9:55 ` Hans Verkuil
2013-01-28 19:56 ` Laurent Pinchart [this message]
2013-01-28 23:02 ` Sakari Ailus
2013-01-28 23:41 ` Laurent Pinchart
2013-02-01 22:25 ` 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=3003277.ZHAgxXzzuq@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.