Commit 1b18e7a0be859911b22138ce27258687efc528b8
Committed by
Mauro Carvalho Chehab
1 parent
8e6057b510
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
[media] v4l: Tell user space we're using monotonic timestamps
Set buffer timestamp flags for videobuf, videobuf2 and drivers that use neither. Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Showing 10 changed files with 23 additions and 12 deletions Side-by-side Diff
- drivers/media/pci/meye/meye.c
- drivers/media/pci/zoran/zoran_driver.c
- drivers/media/platform/omap3isp/ispqueue.c
- drivers/media/platform/vino.c
- drivers/media/usb/cpia2/cpia2_v4l.c
- drivers/media/usb/sn9c102/sn9c102_core.c
- drivers/media/usb/stkwebcam/stk-webcam.c
- drivers/media/usb/usbvision/usbvision-video.c
- drivers/media/v4l2-core/videobuf-core.c
- drivers/media/v4l2-core/videobuf2-core.c
drivers/media/pci/meye/meye.c
... | ... | @@ -1426,7 +1426,7 @@ |
1426 | 1426 | return -EINVAL; |
1427 | 1427 | |
1428 | 1428 | buf->bytesused = meye.grab_buffer[index].size; |
1429 | - buf->flags = V4L2_BUF_FLAG_MAPPED; | |
1429 | + buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
1430 | 1430 | |
1431 | 1431 | if (meye.grab_buffer[index].state == MEYE_BUF_USING) |
1432 | 1432 | buf->flags |= V4L2_BUF_FLAG_QUEUED; |
... | ... | @@ -1499,7 +1499,7 @@ |
1499 | 1499 | |
1500 | 1500 | buf->index = reqnr; |
1501 | 1501 | buf->bytesused = meye.grab_buffer[reqnr].size; |
1502 | - buf->flags = V4L2_BUF_FLAG_MAPPED; | |
1502 | + buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
1503 | 1503 | buf->field = V4L2_FIELD_NONE; |
1504 | 1504 | buf->timestamp = meye.grab_buffer[reqnr].timestamp; |
1505 | 1505 | buf->sequence = meye.grab_buffer[reqnr].sequence; |
drivers/media/pci/zoran/zoran_driver.c
... | ... | @@ -1334,7 +1334,7 @@ |
1334 | 1334 | struct zoran *zr = fh->zr; |
1335 | 1335 | unsigned long flags; |
1336 | 1336 | |
1337 | - buf->flags = V4L2_BUF_FLAG_MAPPED; | |
1337 | + buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
1338 | 1338 | |
1339 | 1339 | switch (fh->map_mode) { |
1340 | 1340 | case ZORAN_MAP_MODE_RAW: |
drivers/media/platform/omap3isp/ispqueue.c
drivers/media/platform/vino.c
... | ... | @@ -3410,6 +3410,9 @@ |
3410 | 3410 | if (fb->map_count > 0) |
3411 | 3411 | b->flags |= V4L2_BUF_FLAG_MAPPED; |
3412 | 3412 | |
3413 | + b->flags &= ~V4L2_BUF_FLAG_TIMESTAMP_MASK; | |
3414 | + b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
3415 | + | |
3413 | 3416 | b->index = fb->id; |
3414 | 3417 | b->memory = (vcs->fb_queue.type == VINO_MEMORY_MMAP) ? |
3415 | 3418 | V4L2_MEMORY_MMAP : V4L2_MEMORY_USERPTR; |
drivers/media/usb/cpia2/cpia2_v4l.c
... | ... | @@ -825,6 +825,8 @@ |
825 | 825 | else |
826 | 826 | buf->flags = 0; |
827 | 827 | |
828 | + buf->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
829 | + | |
828 | 830 | switch (cam->buffers[buf->index].status) { |
829 | 831 | case FRAME_EMPTY: |
830 | 832 | case FRAME_ERROR: |
... | ... | @@ -943,7 +945,8 @@ |
943 | 945 | |
944 | 946 | buf->index = frame; |
945 | 947 | buf->bytesused = cam->buffers[buf->index].length; |
946 | - buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE; | |
948 | + buf->flags = V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE | |
949 | + | V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
947 | 950 | buf->field = V4L2_FIELD_NONE; |
948 | 951 | buf->timestamp = cam->buffers[buf->index].timestamp; |
949 | 952 | buf->sequence = cam->buffers[buf->index].seq; |
drivers/media/usb/sn9c102/sn9c102_core.c
... | ... | @@ -173,7 +173,7 @@ |
173 | 173 | cam->frame[i].buf.sequence = 0; |
174 | 174 | cam->frame[i].buf.field = V4L2_FIELD_NONE; |
175 | 175 | cam->frame[i].buf.memory = V4L2_MEMORY_MMAP; |
176 | - cam->frame[i].buf.flags = 0; | |
176 | + cam->frame[i].buf.flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
177 | 177 | } |
178 | 178 | |
179 | 179 | return cam->nbuffers; |
drivers/media/usb/stkwebcam/stk-webcam.c
... | ... | @@ -466,6 +466,7 @@ |
466 | 466 | buf->dev = dev; |
467 | 467 | buf->v4lbuf.index = index; |
468 | 468 | buf->v4lbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; |
469 | + buf->v4lbuf.flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
469 | 470 | buf->v4lbuf.field = V4L2_FIELD_NONE; |
470 | 471 | buf->v4lbuf.memory = V4L2_MEMORY_MMAP; |
471 | 472 | buf->v4lbuf.m.offset = 2*index*buf->v4lbuf.length; |
drivers/media/usb/usbvision/usbvision-video.c
... | ... | @@ -761,7 +761,7 @@ |
761 | 761 | if (vb->index >= usbvision->num_frames) |
762 | 762 | return -EINVAL; |
763 | 763 | /* Updating the corresponding frame state */ |
764 | - vb->flags = 0; | |
764 | + vb->flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
765 | 765 | frame = &usbvision->frame[vb->index]; |
766 | 766 | if (frame->grabstate >= frame_state_ready) |
767 | 767 | vb->flags |= V4L2_BUF_FLAG_QUEUED; |
... | ... | @@ -843,7 +843,8 @@ |
843 | 843 | vb->memory = V4L2_MEMORY_MMAP; |
844 | 844 | vb->flags = V4L2_BUF_FLAG_MAPPED | |
845 | 845 | V4L2_BUF_FLAG_QUEUED | |
846 | - V4L2_BUF_FLAG_DONE; | |
846 | + V4L2_BUF_FLAG_DONE | | |
847 | + V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
847 | 848 | vb->index = f->index; |
848 | 849 | vb->sequence = f->sequence; |
849 | 850 | vb->timestamp = f->timestamp; |
drivers/media/v4l2-core/videobuf-core.c
drivers/media/v4l2-core/videobuf2-core.c
... | ... | @@ -40,9 +40,10 @@ |
40 | 40 | #define call_qop(q, op, args...) \ |
41 | 41 | (((q)->ops->op) ? ((q)->ops->op(args)) : 0) |
42 | 42 | |
43 | -#define V4L2_BUFFER_STATE_FLAGS (V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_QUEUED | \ | |
43 | +#define V4L2_BUFFER_MASK_FLAGS (V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_QUEUED | \ | |
44 | 44 | V4L2_BUF_FLAG_DONE | V4L2_BUF_FLAG_ERROR | \ |
45 | - V4L2_BUF_FLAG_PREPARED) | |
45 | + V4L2_BUF_FLAG_PREPARED | \ | |
46 | + V4L2_BUF_FLAG_TIMESTAMP_MASK) | |
46 | 47 | |
47 | 48 | /** |
48 | 49 | * __vb2_buf_mem_alloc() - allocate video memory for the given buffer |
... | ... | @@ -401,7 +402,8 @@ |
401 | 402 | /* |
402 | 403 | * Clear any buffer state related flags. |
403 | 404 | */ |
404 | - b->flags &= ~V4L2_BUFFER_STATE_FLAGS; | |
405 | + b->flags &= ~V4L2_BUFFER_MASK_FLAGS; | |
406 | + b->flags |= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; | |
405 | 407 | |
406 | 408 | switch (vb->state) { |
407 | 409 | case VB2_BUF_STATE_QUEUED: |
... | ... | @@ -939,7 +941,7 @@ |
939 | 941 | |
940 | 942 | vb->v4l2_buf.field = b->field; |
941 | 943 | vb->v4l2_buf.timestamp = b->timestamp; |
942 | - vb->v4l2_buf.flags = b->flags & ~V4L2_BUFFER_STATE_FLAGS; | |
944 | + vb->v4l2_buf.flags = b->flags & ~V4L2_BUFFER_MASK_FLAGS; | |
943 | 945 | } |
944 | 946 | |
945 | 947 | /** |