Re: [PATCH 4/4] v4l: Tell user space we're using monotonic timestamps

2013-01-05 Thread Sakari Ailus
Hi Kamil,

On Mon, Dec 17, 2012 at 12:48:25PM +0100, Kamil Debski wrote:
> > From: 'Sakari Ailus' [mailto:sakari.ai...@iki.fi]
> > Sent: Monday, December 17, 2012 12:35 PM
> > Subject: Re: [PATCH 4/4] v4l: Tell user space we're using monotonic
> > timestamps
> > 
> > Hi Kamil,
> > 
> > On Mon, Dec 17, 2012 at 12:19:51PM +0100, Kamil Debski wrote:
> > ...
> > > > > @@ -367,7 +368,8 @@ static void __fill_v4l2_buffer(struct
> > > > > vb2_buffer
> > > > *vb, struct v4l2_buffer *b)
> > > > >   /*
> > > > >* Clear any buffer state related flags.
> > > > >*/
> > > > > - b->flags &= ~V4L2_BUFFER_STATE_FLAGS;
> > > > > + b->flags &= ~V4L2_BUFFER_MASK_FLAGS;
> > > > > + b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> > >
> > > As far as I know, after __fill_v4l2_buffer is run driver has no means
> > > to change flags. Right?
> > 
> > Correct. Querybuf, for example, is implemented in vb2 and no driver
> > involvement is required. And we sure don't want to add it. ;)
> 
> I did not suggest that it should be added.

Good. :-)

> > 
> > > So how should a driver, which is not using the MONOTONIC timestamps
> > > inform the user space about it?
> > 
> > We currently support only monotonic timestamps. Support for different
> > kind of timestamps should be added to videobuf2 when they are needed.
> > The drivers would then be using a videobuf2 equivalent of
> > v4l2_get_timestamp().
> 
> Just as I though.
> Mind you - v4l2_get_timestamp() does not apply if the timestamp are simply
> copied.
> This is the case of some of the mem2mem devices, remember?

Yeah. Makes sense.

I guess memory-to-memory devices (apart from possibly those dealing with
compressed data which contains the timestamps) should just copy the
timestamps from output to capture buffers.

-- 
Cheers,

Sakari Ailus
e-mail: sakari.ai...@iki.fi XMPP: sai...@retiisi.org.uk
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH 4/4] v4l: Tell user space we're using monotonic timestamps

2012-12-17 Thread Kamil Debski
> From: 'Sakari Ailus' [mailto:sakari.ai...@iki.fi]
> Sent: Monday, December 17, 2012 12:35 PM
> Subject: Re: [PATCH 4/4] v4l: Tell user space we're using monotonic
> timestamps
> 
> Hi Kamil,
> 
> On Mon, Dec 17, 2012 at 12:19:51PM +0100, Kamil Debski wrote:
> ...
> > > > @@ -367,7 +368,8 @@ static void __fill_v4l2_buffer(struct
> > > > vb2_buffer
> > > *vb, struct v4l2_buffer *b)
> > > > /*
> > > >  * Clear any buffer state related flags.
> > > >  */
> > > > -   b->flags &= ~V4L2_BUFFER_STATE_FLAGS;
> > > > +   b->flags &= ~V4L2_BUFFER_MASK_FLAGS;
> > > > +   b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> >
> > As far as I know, after __fill_v4l2_buffer is run driver has no means
> > to change flags. Right?
> 
> Correct. Querybuf, for example, is implemented in vb2 and no driver
> involvement is required. And we sure don't want to add it. ;)

I did not suggest that it should be added.

> 
> > So how should a driver, which is not using the MONOTONIC timestamps
> > inform the user space about it?
> 
> We currently support only monotonic timestamps. Support for different
> kind of timestamps should be added to videobuf2 when they are needed.
> The drivers would then be using a videobuf2 equivalent of
> v4l2_get_timestamp().

Just as I though.
Mind you - v4l2_get_timestamp() does not apply if the timestamp are simply
copied.
This is the case of some of the mem2mem devices, remember?

Best wishes,
--
Kamil Debski
Linux Platform Group
Samsung Poland R&D Center


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/4] v4l: Tell user space we're using monotonic timestamps

2012-12-17 Thread 'Sakari Ailus'
Hi Kamil,

On Mon, Dec 17, 2012 at 12:19:51PM +0100, Kamil Debski wrote:
...
> > > @@ -367,7 +368,8 @@ static void __fill_v4l2_buffer(struct vb2_buffer
> > *vb, struct v4l2_buffer *b)
> > >   /*
> > >* Clear any buffer state related flags.
> > >*/
> > > - b->flags &= ~V4L2_BUFFER_STATE_FLAGS;
> > > + b->flags &= ~V4L2_BUFFER_MASK_FLAGS;
> > > + b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> 
> As far as I know, after __fill_v4l2_buffer is run driver has no means
> to change flags. Right?

Correct. Querybuf, for example, is implemented in vb2 and no driver
involvement is required. And we sure don't want to add it. ;)

> So how should a driver, which is not using the MONOTONIC timestamps inform
> the user space about it?

We currently support only monotonic timestamps. Support for different kind
of timestamps should be added to videobuf2 when they are needed. The drivers
would then be using a videobuf2 equivalent of v4l2_get_timestamp().

-- 
Kind regards,

Sakari Ailus
e-mail: sakari.ai...@iki.fi XMPP: sai...@retiisi.org.uk
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH 4/4] v4l: Tell user space we're using monotonic timestamps

2012-12-17 Thread Kamil Debski
Hi Hans, Sakari,

A quick question follows inline.

[snip]

> > diff --git a/drivers/media/v4l2-core/videobuf2-core.c
> > b/drivers/media/v4l2-core/videobuf2-core.c
> > index 432df11..19a5866 100644
> > --- a/drivers/media/v4l2-core/videobuf2-core.c
> > +++ b/drivers/media/v4l2-core/videobuf2-core.c
> > @@ -40,9 +40,10 @@ module_param(debug, int, 0644);
> >  #define call_qop(q, op, args...)   \
> > (((q)->ops->op) ? ((q)->ops->op(args)) : 0)
> >
> > -#define V4L2_BUFFER_STATE_FLAGS(V4L2_BUF_FLAG_MAPPED |
> V4L2_BUF_FLAG_QUEUED | \
> > +#define V4L2_BUFFER_MASK_FLAGS (V4L2_BUF_FLAG_MAPPED |
> V4L2_BUF_FLAG_QUEUED | \
> >  V4L2_BUF_FLAG_DONE | V4L2_BUF_FLAG_ERROR |
\
> > -V4L2_BUF_FLAG_PREPARED)
> > +V4L2_BUF_FLAG_PREPARED | \
> > +V4L2_BUF_FLAG_TIMESTAMP_MASK)
> >
> >  /**
> >   * __vb2_buf_mem_alloc() - allocate video memory for the given
> buffer
> > @@ -367,7 +368,8 @@ static void __fill_v4l2_buffer(struct vb2_buffer
> *vb, struct v4l2_buffer *b)
> > /*
> >  * Clear any buffer state related flags.
> >  */
> > -   b->flags &= ~V4L2_BUFFER_STATE_FLAGS;
> > +   b->flags &= ~V4L2_BUFFER_MASK_FLAGS;
> > +   b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;

As far as I know, after __fill_v4l2_buffer is run driver has no means
to change flags. Right?

So how should a driver, which is not using the MONOTONIC timestamps inform
the user space about it?

> >
> > switch (vb->state) {
> > case VB2_BUF_STATE_QUEUED:
> > @@ -863,7 +865,7 @@ static void __fill_vb2_buffer(struct vb2_buffer
> > *vb, const struct v4l2_buffer *b
> >
> > vb->v4l2_buf.field = b->field;
> > vb->v4l2_buf.timestamp = b->timestamp;
> > -   vb->v4l2_buf.flags = b->flags & ~V4L2_BUFFER_STATE_FLAGS;
> > +   vb->v4l2_buf.flags = b->flags & ~V4L2_BUFFER_MASK_FLAGS;
> >  }
> >
> >  /**
> >
> 
> Acked-by: Hans Verkuil 
> 

Best wishes,
-- 
Kamil Debski
Linux Platform Group
Samsung Poland R&D Center


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/4] v4l: Tell user space we're using monotonic timestamps

2012-11-16 Thread Hans Verkuil
On Thu November 15 2012 23:06:47 Sakari Ailus wrote:
> Set buffer timestamp flags for videobuf, videobuf2 and drivers that use
> neither.
> 
> Signed-off-by: Sakari Ailus 
> Acked-by: Laurent Pinchart 
> ---
>  drivers/media/pci/meye/meye.c |4 ++--
>  drivers/media/pci/zoran/zoran_driver.c|2 +-
>  drivers/media/platform/omap3isp/ispqueue.c|1 +
>  drivers/media/platform/vino.c |3 +++
>  drivers/media/usb/cpia2/cpia2_v4l.c   |5 -
>  drivers/media/usb/sn9c102/sn9c102_core.c  |2 +-
>  drivers/media/usb/stkwebcam/stk-webcam.c  |1 +
>  drivers/media/usb/usbvision/usbvision-video.c |5 +++--
>  drivers/media/v4l2-core/videobuf-core.c   |2 +-
>  drivers/media/v4l2-core/videobuf2-core.c  |   10 ++
>  10 files changed, 23 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/media/pci/meye/meye.c b/drivers/media/pci/meye/meye.c
> index 288adea..ac7ab6e 100644
> --- a/drivers/media/pci/meye/meye.c
> +++ b/drivers/media/pci/meye/meye.c
> @@ -1426,7 +1426,7 @@ static int vidioc_querybuf(struct file *file, void *fh, 
> struct v4l2_buffer *buf)
>   return -EINVAL;
>  
>   buf->bytesused = meye.grab_buffer[index].size;
> - buf->flags = V4L2_BUF_FLAG_MAPPED;
> + buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
>  
>   if (meye.grab_buffer[index].state == MEYE_BUF_USING)
>   buf->flags |= V4L2_BUF_FLAG_QUEUED;
> @@ -1499,7 +1499,7 @@ static int vidioc_dqbuf(struct file *file, void *fh, 
> struct v4l2_buffer *buf)
>  
>   buf->index = reqnr;
>   buf->bytesused = meye.grab_buffer[reqnr].size;
> - buf->flags = V4L2_BUF_FLAG_MAPPED;
> + buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
>   buf->field = V4L2_FIELD_NONE;
>   buf->timestamp = meye.grab_buffer[reqnr].timestamp;
>   buf->sequence = meye.grab_buffer[reqnr].sequence;
> diff --git a/drivers/media/pci/zoran/zoran_driver.c 
> b/drivers/media/pci/zoran/zoran_driver.c
> index 53f12c7..33521a4 100644
> --- a/drivers/media/pci/zoran/zoran_driver.c
> +++ b/drivers/media/pci/zoran/zoran_driver.c
> @@ -1334,7 +1334,7 @@ static int zoran_v4l2_buffer_status(struct zoran_fh *fh,
>   struct zoran *zr = fh->zr;
>   unsigned long flags;
>  
> - buf->flags = V4L2_BUF_FLAG_MAPPED;
> + buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
>  
>   switch (fh->map_mode) {
>   case ZORAN_MAP_MODE_RAW:
> diff --git a/drivers/media/platform/omap3isp/ispqueue.c 
> b/drivers/media/platform/omap3isp/ispqueue.c
> index 15bf3ea..6599963 100644
> --- a/drivers/media/platform/omap3isp/ispqueue.c
> +++ b/drivers/media/platform/omap3isp/ispqueue.c
> @@ -674,6 +674,7 @@ static int isp_video_queue_alloc(struct isp_video_queue 
> *queue,
>   buf->vbuf.index = i;
>   buf->vbuf.length = size;
>   buf->vbuf.type = queue->type;
> + buf->vbuf.flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
>   buf->vbuf.field = V4L2_FIELD_NONE;
>   buf->vbuf.memory = memory;
>  
> diff --git a/drivers/media/platform/vino.c b/drivers/media/platform/vino.c
> index 28350e7..eb5d6f9 100644
> --- a/drivers/media/platform/vino.c
> +++ b/drivers/media/platform/vino.c
> @@ -3410,6 +3410,9 @@ static void vino_v4l2_get_buffer_status(struct 
> vino_channel_settings *vcs,
>   if (fb->map_count > 0)
>   b->flags |= V4L2_BUF_FLAG_MAPPED;
>  
> + b->flags &= ~V4L2_BUF_FLAG_TIMESTAMP_MASK;
> + b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> +
>   b->index = fb->id;
>   b->memory = (vcs->fb_queue.type == VINO_MEMORY_MMAP) ?
>   V4L2_MEMORY_MMAP : V4L2_MEMORY_USERPTR;
> diff --git a/drivers/media/usb/cpia2/cpia2_v4l.c 
> b/drivers/media/usb/cpia2/cpia2_v4l.c
> index aeb9d22..d5d42b6 100644
> --- a/drivers/media/usb/cpia2/cpia2_v4l.c
> +++ b/drivers/media/usb/cpia2/cpia2_v4l.c
> @@ -825,6 +825,8 @@ static int cpia2_querybuf(struct file *file, void *fh, 
> struct v4l2_buffer *buf)
>   else
>   buf->flags = 0;
>  
> + buf->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> +
>   switch (cam->buffers[buf->index].status) {
>   case FRAME_EMPTY:
>   case FRAME_ERROR:
> @@ -943,7 +945,8 @@ static int cpia2_dqbuf(struct file *file, void *fh, 
> struct v4l2_buffer *buf)
>  
>   buf->index = frame;
>   buf->bytesused = cam->buffers[buf->index].length;
> - buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE;
> + buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE
> + | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
>   buf->field = V4L2_FIELD_NONE;
>   buf->timestamp = cam->buffers[buf->index].timestamp;
>   buf->sequence = cam->buffers[buf->index].seq;
> diff --git a/drivers/media/usb/sn9c102/sn9c102_core.c 
> b/drivers/media/usb/sn9c102/sn9c102_core.c
> index 843fadc..2e0e2ff 100644
> --- a/drivers/media/usb/sn9c102/

[PATCH 4/4] v4l: Tell user space we're using monotonic timestamps

2012-11-15 Thread Sakari Ailus
Set buffer timestamp flags for videobuf, videobuf2 and drivers that use
neither.

Signed-off-by: Sakari Ailus 
Acked-by: Laurent Pinchart 
---
 drivers/media/pci/meye/meye.c |4 ++--
 drivers/media/pci/zoran/zoran_driver.c|2 +-
 drivers/media/platform/omap3isp/ispqueue.c|1 +
 drivers/media/platform/vino.c |3 +++
 drivers/media/usb/cpia2/cpia2_v4l.c   |5 -
 drivers/media/usb/sn9c102/sn9c102_core.c  |2 +-
 drivers/media/usb/stkwebcam/stk-webcam.c  |1 +
 drivers/media/usb/usbvision/usbvision-video.c |5 +++--
 drivers/media/v4l2-core/videobuf-core.c   |2 +-
 drivers/media/v4l2-core/videobuf2-core.c  |   10 ++
 10 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/drivers/media/pci/meye/meye.c b/drivers/media/pci/meye/meye.c
index 288adea..ac7ab6e 100644
--- a/drivers/media/pci/meye/meye.c
+++ b/drivers/media/pci/meye/meye.c
@@ -1426,7 +1426,7 @@ static int vidioc_querybuf(struct file *file, void *fh, 
struct v4l2_buffer *buf)
return -EINVAL;
 
buf->bytesused = meye.grab_buffer[index].size;
-   buf->flags = V4L2_BUF_FLAG_MAPPED;
+   buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
 
if (meye.grab_buffer[index].state == MEYE_BUF_USING)
buf->flags |= V4L2_BUF_FLAG_QUEUED;
@@ -1499,7 +1499,7 @@ static int vidioc_dqbuf(struct file *file, void *fh, 
struct v4l2_buffer *buf)
 
buf->index = reqnr;
buf->bytesused = meye.grab_buffer[reqnr].size;
-   buf->flags = V4L2_BUF_FLAG_MAPPED;
+   buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
buf->field = V4L2_FIELD_NONE;
buf->timestamp = meye.grab_buffer[reqnr].timestamp;
buf->sequence = meye.grab_buffer[reqnr].sequence;
diff --git a/drivers/media/pci/zoran/zoran_driver.c 
b/drivers/media/pci/zoran/zoran_driver.c
index 53f12c7..33521a4 100644
--- a/drivers/media/pci/zoran/zoran_driver.c
+++ b/drivers/media/pci/zoran/zoran_driver.c
@@ -1334,7 +1334,7 @@ static int zoran_v4l2_buffer_status(struct zoran_fh *fh,
struct zoran *zr = fh->zr;
unsigned long flags;
 
-   buf->flags = V4L2_BUF_FLAG_MAPPED;
+   buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
 
switch (fh->map_mode) {
case ZORAN_MAP_MODE_RAW:
diff --git a/drivers/media/platform/omap3isp/ispqueue.c 
b/drivers/media/platform/omap3isp/ispqueue.c
index 15bf3ea..6599963 100644
--- a/drivers/media/platform/omap3isp/ispqueue.c
+++ b/drivers/media/platform/omap3isp/ispqueue.c
@@ -674,6 +674,7 @@ static int isp_video_queue_alloc(struct isp_video_queue 
*queue,
buf->vbuf.index = i;
buf->vbuf.length = size;
buf->vbuf.type = queue->type;
+   buf->vbuf.flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
buf->vbuf.field = V4L2_FIELD_NONE;
buf->vbuf.memory = memory;
 
diff --git a/drivers/media/platform/vino.c b/drivers/media/platform/vino.c
index 28350e7..eb5d6f9 100644
--- a/drivers/media/platform/vino.c
+++ b/drivers/media/platform/vino.c
@@ -3410,6 +3410,9 @@ static void vino_v4l2_get_buffer_status(struct 
vino_channel_settings *vcs,
if (fb->map_count > 0)
b->flags |= V4L2_BUF_FLAG_MAPPED;
 
+   b->flags &= ~V4L2_BUF_FLAG_TIMESTAMP_MASK;
+   b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
+
b->index = fb->id;
b->memory = (vcs->fb_queue.type == VINO_MEMORY_MMAP) ?
V4L2_MEMORY_MMAP : V4L2_MEMORY_USERPTR;
diff --git a/drivers/media/usb/cpia2/cpia2_v4l.c 
b/drivers/media/usb/cpia2/cpia2_v4l.c
index aeb9d22..d5d42b6 100644
--- a/drivers/media/usb/cpia2/cpia2_v4l.c
+++ b/drivers/media/usb/cpia2/cpia2_v4l.c
@@ -825,6 +825,8 @@ static int cpia2_querybuf(struct file *file, void *fh, 
struct v4l2_buffer *buf)
else
buf->flags = 0;
 
+   buf->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
+
switch (cam->buffers[buf->index].status) {
case FRAME_EMPTY:
case FRAME_ERROR:
@@ -943,7 +945,8 @@ static int cpia2_dqbuf(struct file *file, void *fh, struct 
v4l2_buffer *buf)
 
buf->index = frame;
buf->bytesused = cam->buffers[buf->index].length;
-   buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE;
+   buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE
+   | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
buf->field = V4L2_FIELD_NONE;
buf->timestamp = cam->buffers[buf->index].timestamp;
buf->sequence = cam->buffers[buf->index].seq;
diff --git a/drivers/media/usb/sn9c102/sn9c102_core.c 
b/drivers/media/usb/sn9c102/sn9c102_core.c
index 843fadc..2e0e2ff 100644
--- a/drivers/media/usb/sn9c102/sn9c102_core.c
+++ b/drivers/media/usb/sn9c102/sn9c102_core.c
@@ -173,7 +173,7 @@ sn9c102_request_buffers(struct sn9c102_device* cam, u32 
count,
cam->frame[i].buf.sequence =