[PATCHv2,00/12] Add support for read-only requests

Message ID 20200818143719.102128-1-hverkuil-cisco@xs4all.nl (mailing list archive)
Headers
Series Add support for read-only requests |

Message

Hans Verkuil Aug. 18, 2020, 2:37 p.m. UTC
  Read-only requests do not contain any configuration values when queued
(only buffers can be part of a read-only request), but they do allow the
driver to associate additional information with the completed request.

This is useful to e.g. add per-frame metadata such as HDMI InfoFrames to
a captured buffer.

While working on this I discovered that the Request API is also missing a
feature: if userspace did not set any controls, then the request object
will not contain a control object (that's created only if the user sets a
control in the request).

This is fine for e.g. stateless codecs since they require that each request
contains controls, so this is always done. And this is also the reason that
this hasn't been a problem before, since the Request API is almost exclusively
used by stateless codecs.

But for e.g. vivid this means that the completed request does not contain
any controls in the request with the values of the time that the frame was
captured (or output).

In addition, if a driver needs to set a status control, then that control
won't be part of the request either.

This series adds a v4l2_ctrl_request_add_handler() function that can be
called in the req_validate() callback of the request. If the request
doesn't contain a control object, then it will add a new one.

This series adds read-only request support to vivid, vim2m and vicodec, and
adds new helper functions to vb2 (vb2_request_buffer_first) and v4l2-mem2mem.c
(v4l2_m2m_request_validate).

In addition, the first patch of this series adds debugfs support to the
media device to be able to keep track of outstanding requests and request
objects. Without this it is next to impossible to check if all requests and
request objects are properly released after all file handles are closed.

This series supersedes this old RFC series:

https://patchwork.linuxtv.org/project/linux-media/cover/20200728094851.121933-1-hverkuil-cisco@xs4all.nl/

I'll also post an RFC patch for v4l-utils that adds support for this to
v4l2-ctl and v4l2-compliance.

Regards,

	Hans


Hans Verkuil (12):
  media/mc: keep track of outstanding requests
  vivid: add read-only int32 control
  media: document read-only requests
  videodev2.h: add V4L2_BUF_CAP_SUPPORTS_RO_REQUESTS
  videobuf2-core: add vb2_request_buffer_first()
  v4l2-ctrls.c: add v4l2_ctrl_request_add_handler
  vivid: call v4l2_ctrl_request_add_handler()
  vivid: add ro_requests module option
  v4l2-mem2mem.c: add v4l2_m2m_request_validate()
  vim2m: use v4l2_m2m_request_validate()
  vim2m: support read-only requests on the capture queue
  vicodec: add support for read-only requests

 Documentation/admin-guide/media/vivid.rst     | 10 +++
 .../mediactl/media-request-ioc-queue.rst      |  5 ++
 .../media/mediactl/request-api.rst            | 11 +++
 .../media/v4l/vidioc-reqbufs.rst              |  6 ++
 .../media/common/videobuf2/videobuf2-core.c   | 22 ++++++
 .../media/common/videobuf2/videobuf2-v4l2.c   |  4 +-
 drivers/media/mc/mc-device.c                  | 27 +++++++
 drivers/media/mc/mc-devnode.c                 | 13 ++++
 drivers/media/mc/mc-request.c                 |  8 ++-
 .../media/test-drivers/vicodec/vicodec-core.c | 70 +++++++++----------
 drivers/media/test-drivers/vim2m.c            | 13 +++-
 drivers/media/test-drivers/vivid/vivid-core.c | 52 ++++++++++++++
 drivers/media/test-drivers/vivid/vivid-core.h |  1 +
 .../media/test-drivers/vivid/vivid-ctrls.c    | 13 ++++
 .../test-drivers/vivid/vivid-kthread-cap.c    | 10 +--
 drivers/media/v4l2-core/v4l2-ctrls.c          | 35 ++++++++++
 drivers/media/v4l2-core/v4l2-mem2mem.c        | 45 ++++++++++--
 include/media/media-device.h                  |  9 +++
 include/media/media-devnode.h                 |  4 ++
 include/media/media-request.h                 |  2 +
 include/media/v4l2-ctrls.h                    | 21 ++++++
 include/media/v4l2-mem2mem.h                  | 28 +++++++-
 include/media/videobuf2-core.h                |  8 +++
 include/uapi/linux/videodev2.h                |  1 +
 24 files changed, 368 insertions(+), 50 deletions(-)