[PATCH v16 00/20] v4l: routing and streams support

From: Tomi Valkeinen
Date: Thu Dec 15 2022 - 07:17:19 EST


Hi,

This is v16 of the streams series. The v15 can be found from:

https://lore.kernel.org/all/20221003121852.616745-1-tomi.valkeinen@xxxxxxxxxxxxxxxx/

My work branch with additional drivers can be found from:

git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git streams/work-v16

And there's also the v4l-utils series v2 to add support to v4l2-ctl and
media-ctl:

https://lore.kernel.org/all/20220714132116.132498-1-tomi.valkeinen@xxxxxxxxxxxxxxxx/

(Note: the v4l-utils above has not been changed to accommodate the drop
of V4L2_SUBDEV_ROUTE_FL_SOURCE yet)

Changes in v16:
- v4l2_subdev_link_validate_get_format: Drop use of for_each_set_bit(),
as the sink_streams_mask is not unsigned long.
- v4l2_subdev_set_routing: Cast parameters given to check_mul_overflow()
to size_t to avoid compiler warnings.
- Drop V4L2_SUBDEV_ROUTE_FL_SOURCE
- Require a code change and kernel compilation to enable Streams API.

A bit more details for the last two changes:

V4L2_SUBDEV_ROUTE_FL_SOURCE felt somewhat hacky, and the whole question
of how sensors' streams in various cases should be handled was unclear.
Thus it was decided (me, Laurent, Sakari) that we should only support
the current single-stream sensors and work on multi-streams sensors on
top of this series. This should not hinder any use case that was
supportable in the v15, as most likely the second stream from a sensor
would be an embedded data stream, and embedded data is not (really)
supported upstream.

The routing and stream support has been worked on for years by multiple
persons, and has proven to be very complicated feature, or a set of
features. While this series has been used on multiple different
platforms for various use cases, we would still like to be on the safe
side, especially regarding the userspace APIs. Thus, we decided that it
would be good to get this series merged while still making it clear that
the uAPI is not quite stable yet, and to achieve that, there's a static
variable in v4l2-subdev.c that the user needs to set to enable the API.

Tomi

Jacopo Mondi (2):
media: Documentation: Add GS_ROUTING documentation
media: subdev: Add for_each_active_route() macro

Laurent Pinchart (5):
media: subdev: Add [GS]_ROUTING subdev ioctls and operations
media: subdev: add v4l2_subdev_routing_validate() helper
media: v4l2-subdev: Add v4l2_subdev_state_xlate_streams() helper
media: v4l2-subdev: Add subdev .(enable|disable)_streams() operations
media: v4l2-subdev: Add v4l2_subdev_s_stream_helper() function

Sakari Ailus (1):
media: Add stream to frame descriptor

Tomi Valkeinen (12):
media: v4l2-subdev: Sort includes
media: add V4L2_SUBDEV_FL_STREAMS
media: add V4L2_SUBDEV_CAP_STREAMS
media: subdev: Require code change to enable [GS]_ROUTING
media: subdev: add v4l2_subdev_has_pad_interdep()
media: subdev: add v4l2_subdev_set_routing helper()
media: Documentation: add multiplexed streams documentation
media: subdev: add stream based configuration
media: subdev: use streams in v4l2_subdev_link_validate()
media: subdev: add "opposite" stream helper funcs
media: subdev: add streams to v4l2_subdev_get_fmt() helper function
media: subdev: add v4l2_subdev_set_routing_with_fmt() helper

.clang-format | 1 +
.../driver-api/media/v4l2-subdev.rst | 8 +
.../userspace-api/media/v4l/dev-subdev.rst | 140 +++
.../userspace-api/media/v4l/user-func.rst | 1 +
.../v4l/vidioc-subdev-enum-frame-interval.rst | 5 +-
.../v4l/vidioc-subdev-enum-frame-size.rst | 5 +-
.../v4l/vidioc-subdev-enum-mbus-code.rst | 5 +-
.../media/v4l/vidioc-subdev-g-crop.rst | 5 +-
.../media/v4l/vidioc-subdev-g-fmt.rst | 5 +-
.../v4l/vidioc-subdev-g-frame-interval.rst | 5 +-
.../media/v4l/vidioc-subdev-g-routing.rst | 147 +++
.../media/v4l/vidioc-subdev-g-selection.rst | 5 +-
drivers/media/v4l2-core/v4l2-ioctl.c | 25 +-
drivers/media/v4l2-core/v4l2-subdev.c | 1000 ++++++++++++++++-
include/media/v4l2-subdev.h | 377 +++++++
include/uapi/linux/v4l2-subdev.h | 74 +-
16 files changed, 1758 insertions(+), 50 deletions(-)
create mode 100644 Documentation/userspace-api/media/v4l/vidioc-subdev-g-routing.rst

--
2.34.1