Linux Media Controller development
 help / color / mirror / Atom feed
* [PATCHv15 00/35] Request API
@ 2018-06-04 11:46 Hans Verkuil
  2018-06-04 11:46 ` [PATCHv15 01/35] uapi/linux/media.h: add request API Hans Verkuil
                   ` (34 more replies)
  0 siblings, 35 replies; 61+ messages in thread
From: Hans Verkuil @ 2018-06-04 11:46 UTC (permalink / raw)
  To: linux-media

From: Hans Verkuil <hans.verkuil@cisco.com>

Hi all,

This is version 15 of the Request API series.

The main changes compared to v14 are:

- Squashed various patches from v14 together where applicable.

- All comments to v13/v14 patches have been processed and code
  adapted where applicable.

- Added new init_buffer vb2 buffer op to initialize struct
  vb2_v4l2_buffer (the request_fd field should be inited to -1).

- The vb2 internal state PREPARED has been removed. Instead two
  new bool fields 'synced' and 'prepared' keep track of whether
  buffers are synced and/or prepared. This simplifies vb2 when it
  comes to keeping track of the buffer state and this is especially
  important when buffers can be in a request, but not yet queued.

- After dequeueing a buffer that was part of a request the request_fd
  is filled in correctly, but it is also cleared (init_buffer) internally.
  So calling querybuf after the dqbuf will not have an associated
  request anymore. This makes sense since the buffer has no longer any
  relationship with a request after dqbuf was called.

- Once you start queueing buffers in a request it is no longer allowed
  to queue buffers directly (i.e. without a request) until the queue
  is cancelled. This might be relaxed in the future, but for now this
  prevents mixing request and non-request buffers.

- vim2m now uses delayed work instead of a timer.

- It is no longer allowed to use requests for capture buffers of a
  memory-to-memory device. See this discussion:
  https://www.mail-archive.com/linux-media@vger.kernel.org/msg132202.html

This series has been tested extensively with v4l2-compliance (modified
to test requests) and the vim2m and vivid drivers.

Regarding locking:

There are two request locks used: req_queue_mutex (part of media_device)
ensures high-level serialization of queueing/reiniting and canceling
requests. It serializes STREAMON/OFF, close() and MEDIA_REQUEST_IOC_QUEUE.
This is the top-level lock and should be taken before any others.

The 'lock' spin_lock in struct media_request protects that structure and
should be held for a short time only.

When MEDIA_REQUEST_IOC_QUEUE is called it will validate and queue both
control handlers and vb2 buffers. For control handlers the control handler
lock will be taken, for vb2 buffers the vb2_queue lock will be taken.
This requires that the lock field in vb2_queue is set, which is checked in
videobuf2-v4l2.c.

TODO:

vim2m: the media topology is a bit bogus, this needs to be fixed
(i.e. a proper HW entity should be added). But for now it is
good enough for testing.

Everything seemed to slip nicely into place while working on this,
so I hope this is finally an implementation that we can proceed to
upstream and build upon for complex camera pipelines in the future.

This patch series is also available here:

https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=reqv15

The patched v4l2-compliance is available here:

https://git.linuxtv.org/hverkuil/v4l-utils.git/log/?h=request

Regards,

	Hans

Alexandre Courbot (2):
  videodev2.h: add request_fd field to v4l2_ext_controls
  Documentation: v4l: document request API

Hans Verkuil (31):
  uapi/linux/media.h: add request API
  media-request: implement media requests
  media-request: add media_request_get_by_fd
  media-request: add media_request_object_find
  v4l2-device.h: add v4l2_device_supports_requests() helper
  v4l2-dev: lock req_queue_mutex
  v4l2-ctrls: v4l2_ctrl_add_handler: add from_other_dev
  v4l2-ctrls: prepare internal structs for request API
  v4l2-ctrls: alloc memory for p_req
  v4l2-ctrls: use ref in helper instead of ctrl
  v4l2-ctrls: add core request support
  v4l2-ctrls: support g/s_ext_ctrls for requests
  vb2: store userspace data in vb2_v4l2_buffer
  davinci_vpfe: remove bogus vb2->state check
  vb2: drop VB2_BUF_STATE_PREPARED, use bool prepared/synced instead
  videodev2.h: Add request_fd field to v4l2_buffer
  vb2: add init_buffer buffer op
  videobuf2-core: embed media_request_object
  videobuf2-core: integrate with media requests
  videobuf2-v4l2: integrate with media requests
  videobuf2-core: add request helper functions
  videobuf2-v4l2: add vb2_request_queue/validate helpers
  videobuf2-core: add uses_requests flag
  videobuf2-v4l2: refuse qbuf if queue uses requests
  v4l2-mem2mem: add vb2_m2m_request_queue
  vim2m: add media device
  vim2m: use workqueue
  vim2m: support requests
  vivid: add mc
  vivid: add request support
  RFC: media-requests: add debugfs node

Sakari Ailus (2):
  media: doc: Add media-request.h header to documentation build
  v4l2-mem2mem: Simplify exiting the function in v4l2_m2m_try_schedule

 Documentation/media/kapi/mc-core.rst          |   2 +
 .../media/uapi/mediactl/media-controller.rst  |   1 +
 .../media/uapi/mediactl/media-funcs.rst       |   3 +
 .../uapi/mediactl/media-ioc-request-alloc.rst |  71 +++
 .../uapi/mediactl/media-request-ioc-queue.rst |  50 ++
 .../mediactl/media-request-ioc-reinit.rst     |  51 ++
 .../media/uapi/mediactl/request-api.rst       | 219 ++++++++
 Documentation/media/uapi/v4l/buffer.rst       |  18 +-
 .../media/uapi/v4l/vidioc-g-ext-ctrls.rst     |  28 +-
 Documentation/media/uapi/v4l/vidioc-qbuf.rst  |  11 +
 .../media/videodev2.h.rst.exceptions          |   1 +
 drivers/media/Makefile                        |   3 +-
 .../media/common/videobuf2/videobuf2-core.c   | 244 +++++++--
 .../media/common/videobuf2/videobuf2-v4l2.c   | 492 +++++++++++------
 drivers/media/dvb-core/dvb_vb2.c              |   5 +-
 drivers/media/dvb-frontends/rtl2832_sdr.c     |   5 +-
 drivers/media/media-device.c                  |  55 ++
 drivers/media/media-devnode.c                 |  17 +
 drivers/media/media-request.c                 | 491 +++++++++++++++++
 drivers/media/pci/bt8xx/bttv-driver.c         |   2 +-
 drivers/media/pci/cx23885/cx23885-417.c       |   2 +-
 drivers/media/pci/cx88/cx88-blackbird.c       |   2 +-
 drivers/media/pci/cx88/cx88-video.c           |   2 +-
 drivers/media/pci/saa7134/saa7134-empress.c   |   4 +-
 drivers/media/pci/saa7134/saa7134-video.c     |   2 +-
 .../media/platform/exynos4-is/fimc-capture.c  |   2 +-
 drivers/media/platform/omap3isp/ispvideo.c    |   4 +-
 drivers/media/platform/rcar-vin/rcar-core.c   |   2 +-
 drivers/media/platform/rcar_drif.c            |   2 +-
 .../media/platform/s3c-camif/camif-capture.c  |   4 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_dec.c  |   4 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_enc.c  |   4 +-
 .../media/platform/soc_camera/soc_camera.c    |   7 +-
 drivers/media/platform/vim2m.c                |  93 +++-
 drivers/media/platform/vivid/vivid-core.c     |  69 +++
 drivers/media/platform/vivid/vivid-core.h     |   8 +
 drivers/media/platform/vivid/vivid-ctrls.c    |  46 +-
 .../media/platform/vivid/vivid-kthread-cap.c  |  12 +
 .../media/platform/vivid/vivid-kthread-out.c  |  12 +
 drivers/media/platform/vivid/vivid-sdr-cap.c  |  16 +
 drivers/media/platform/vivid/vivid-vbi-cap.c  |  10 +
 drivers/media/platform/vivid/vivid-vbi-out.c  |  10 +
 drivers/media/platform/vivid/vivid-vid-cap.c  |  10 +
 drivers/media/platform/vivid/vivid-vid-out.c  |  10 +
 drivers/media/usb/cpia2/cpia2_v4l.c           |   2 +-
 drivers/media/usb/cx231xx/cx231xx-417.c       |   2 +-
 drivers/media/usb/cx231xx/cx231xx-video.c     |   4 +-
 drivers/media/usb/msi2500/msi2500.c           |   2 +-
 drivers/media/usb/tm6000/tm6000-video.c       |   2 +-
 drivers/media/usb/uvc/uvc_queue.c             |   5 +-
 drivers/media/usb/uvc/uvc_v4l2.c              |   3 +-
 drivers/media/usb/uvc/uvcvideo.h              |   1 +
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c |  14 +-
 drivers/media/v4l2-core/v4l2-ctrls.c          | 501 +++++++++++++++++-
 drivers/media/v4l2-core/v4l2-dev.c            |  13 +
 drivers/media/v4l2-core/v4l2-device.c         |   3 +-
 drivers/media/v4l2-core/v4l2-ioctl.c          |  44 +-
 drivers/media/v4l2-core/v4l2-mem2mem.c        |  70 ++-
 drivers/media/v4l2-core/v4l2-subdev.c         |   9 +-
 .../staging/media/davinci_vpfe/vpfe_video.c   |   7 +-
 drivers/staging/media/imx/imx-media-dev.c     |   2 +-
 drivers/staging/media/imx/imx-media-fim.c     |   2 +-
 drivers/staging/media/omap4iss/iss_video.c    |   3 +-
 drivers/usb/gadget/function/uvc_queue.c       |   2 +-
 include/media/media-device.h                  |  33 ++
 include/media/media-devnode.h                 |   4 +
 include/media/media-request.h                 | 380 +++++++++++++
 include/media/v4l2-ctrls.h                    |  76 ++-
 include/media/v4l2-device.h                   |  11 +
 include/media/v4l2-mem2mem.h                  |   4 +
 include/media/videobuf2-core.h                |  53 +-
 include/media/videobuf2-v4l2.h                |  20 +-
 include/uapi/linux/media.h                    |  12 +
 include/uapi/linux/videodev2.h                |  14 +-
 74 files changed, 3036 insertions(+), 368 deletions(-)
 create mode 100644 Documentation/media/uapi/mediactl/media-ioc-request-alloc.rst
 create mode 100644 Documentation/media/uapi/mediactl/media-request-ioc-queue.rst
 create mode 100644 Documentation/media/uapi/mediactl/media-request-ioc-reinit.rst
 create mode 100644 Documentation/media/uapi/mediactl/request-api.rst
 create mode 100644 drivers/media/media-request.c
 create mode 100644 include/media/media-request.h

-- 
2.17.0

^ permalink raw reply	[flat|nested] 61+ messages in thread

end of thread, other threads:[~2018-07-03 14:22 UTC | newest]

Thread overview: 61+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-04 11:46 [PATCHv15 00/35] Request API Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 01/35] uapi/linux/media.h: add request API Hans Verkuil
2018-07-03  9:21   ` Mauro Carvalho Chehab
2018-07-03  9:33     ` Hans Verkuil
2018-07-03 10:04       ` Mauro Carvalho Chehab
2018-06-04 11:46 ` [PATCHv15 02/35] media-request: implement media requests Hans Verkuil
2018-06-15  7:08   ` Hans Verkuil
2018-07-02  8:58     ` Tomasz Figa
2018-07-02  9:11       ` Hans Verkuil
2018-07-02 10:57         ` Tomasz Figa
2018-07-02 10:56   ` Tomasz Figa
2018-07-02 11:26     ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 03/35] media: doc: Add media-request.h header to documentation build Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 04/35] media-request: add media_request_get_by_fd Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 05/35] media-request: add media_request_object_find Hans Verkuil
2018-07-02 12:33   ` Tomasz Figa
2018-07-02 12:37     ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 06/35] v4l2-device.h: add v4l2_device_supports_requests() helper Hans Verkuil
2018-07-02 13:01   ` Sakari Ailus
2018-06-04 11:46 ` [PATCHv15 07/35] v4l2-dev: lock req_queue_mutex Hans Verkuil
2018-07-02 13:06   ` Tomasz Figa
2018-07-02 13:23     ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 08/35] videodev2.h: add request_fd field to v4l2_ext_controls Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 09/35] v4l2-ctrls: v4l2_ctrl_add_handler: add from_other_dev Hans Verkuil
2018-06-04 16:22   ` Hans Verkuil
2018-06-05 10:16     ` Philipp Zabel
2018-06-04 17:11   ` Ezequiel Garcia
2018-06-04 11:46 ` [PATCHv15 10/35] v4l2-ctrls: prepare internal structs for request API Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 11/35] v4l2-ctrls: alloc memory for p_req Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 12/35] v4l2-ctrls: use ref in helper instead of ctrl Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 13/35] v4l2-ctrls: add core request support Hans Verkuil
2018-06-04 17:18   ` Ezequiel Garcia
2018-06-15  7:18   ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 14/35] v4l2-ctrls: support g/s_ext_ctrls for requests Hans Verkuil
2018-06-15  7:20   ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 15/35] vb2: store userspace data in vb2_v4l2_buffer Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 16/35] davinci_vpfe: remove bogus vb2->state check Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 17/35] vb2: drop VB2_BUF_STATE_PREPARED, use bool prepared/synced instead Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 18/35] videodev2.h: Add request_fd field to v4l2_buffer Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 19/35] vb2: add init_buffer buffer op Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 20/35] videobuf2-core: embed media_request_object Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 21/35] videobuf2-core: integrate with media requests Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 22/35] videobuf2-v4l2: " Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 23/35] videobuf2-core: add request helper functions Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 24/35] videobuf2-v4l2: add vb2_request_queue/validate helpers Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 25/35] videobuf2-core: add uses_requests flag Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 26/35] videobuf2-v4l2: refuse qbuf if queue uses requests Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 27/35] v4l2-mem2mem: Simplify exiting the function in v4l2_m2m_try_schedule Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 28/35] v4l2-mem2mem: add vb2_m2m_request_queue Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 29/35] Documentation: v4l: document request API Hans Verkuil
2018-07-03 11:50   ` Mauro Carvalho Chehab
2018-07-03 13:02     ` Hans Verkuil
2018-07-03 14:08       ` Mauro Carvalho Chehab
2018-07-03 14:22         ` Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 30/35] vim2m: add media device Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 31/35] vim2m: use workqueue Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 32/35] vim2m: support requests Hans Verkuil
2018-06-04 17:15   ` Ezequiel Garcia
2018-06-04 11:46 ` [PATCHv15 33/35] vivid: add mc Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 34/35] vivid: add request support Hans Verkuil
2018-06-04 11:46 ` [PATCHv15 35/35] RFC: media-requests: add debugfs node Hans Verkuil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox