[v11,00/36] v4l: routing and streams support

Message ID 20220301161156.1119557-1-tomi.valkeinen@ideasonboard.com (mailing list archive)
Headers
Series v4l: routing and streams support |

Message

Tomi Valkeinen March 1, 2022, 4:11 p.m. UTC
  Hi,

Here's v11 of the streams series (used to be "multiplexed streams").

v10 can be found from:

https://lore.kernel.org/all/20211130141536.891878-1-tomi.valkeinen@ideasonboard.com/

This series is based on the v5 of the subdev active state:

https://lore.kernel.org/all/20220301105548.305191-1-tomi.valkeinen@ideasonboard.com/

My work branch with additional drivers can be found from:

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

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

https://lore.kernel.org/all/20211130141815.892354-1-tomi.valkeinen@ideasonboard.com/

The main changes compared to v10:

- Rebased on the v5 of the active state series, which has different
  locking system than what we had in v10 of this series.
- Moved code around in v4l2-subdev.[ch] so that the functions are inside
  the correct ifdefs
- A better route validation helper v4l2_subdev_routing_validate
- Subdev enable/disable_streams ops (see "media: v4l2-subdev: Add subdev
  .(enable|disable)_streams() operations")

There are still some comments I haven't addressed from the v10 review,
and I'd like to change the route flags a bit. We've also thought about
adding more support for drivers that don't need multiple streams but
would still use the new streams APIs to simplify the drivers.

However, as the v10 is already quite old, and I posted the v5 for the
active state, I thought it's better to also post the current version of
the streams series.

 Tomi

Jacopo Mondi (3):
  media: entity: Add iterator helper for entity pads
  media: Documentation: Add GS_ROUTING documentation
  media: subdev: Add for_each_active_route() macro

Laurent Pinchart (9):
  media: entity: Add has_route entity operation
  media: entity: Add media_entity_has_route() function
  media: entity: Use routing information during graph traversal
  media: subdev: Add [GS]_ROUTING subdev ioctls and operations
  media: subdev: Fallback to pad config in v4l2_subdev_get_fmt()
  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 (13):
  media: entity: Use pad as a starting point for graph walk
  media: entity: Use pads instead of entities in the media graph walk
    stack
  media: entity: Walk the graph based on pads
  media: mc: Start walk from a specific pad in use count calculation
  media: entity: Move the pipeline from entity to pads
  media: entity: Use pad as the starting point for a pipeline
  media: entity: Skip link validation for pads to which there is no
    route
  media: entity: Add an iterator helper for connected pads
  media: entity: Add only connected pads to the pipeline
  media: entity: Add debug information in graph walk route check
  media: Add bus type to frame descriptors
  media: Add CSI-2 bus configuration to frame descriptors
  media: Add stream to frame descriptor

Tomi Valkeinen (11):
  media: subdev: increase V4L2_FRAME_DESC_ENTRY_MAX to 8
  media: add V4L2_SUBDEV_FL_MULTIPLEXED
  media: add V4L2_SUBDEV_CAP_MPLEXED
  media: subdev: add v4l2_subdev_has_route()
  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 v4l2_subdev_get_fmt() helper function
  media: subdev: add v4l2_subdev_set_routing_with_fmt() helper

 .clang-format                                 |    1 +
 Documentation/driver-api/media/mc-core.rst    |   18 +-
 .../driver-api/media/v4l2-subdev.rst          |    8 +
 .../userspace-api/media/v4l/dev-subdev.rst    |  167 +++
 .../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     |  150 +++
 .../media/v4l/vidioc-subdev-g-selection.rst   |    5 +-
 drivers/media/mc/mc-device.c                  |   13 +-
 drivers/media/mc/mc-entity.c                  |  270 +++--
 drivers/media/pci/intel/ipu3/ipu3-cio2-main.c |    6 +-
 .../media/platform/exynos4-is/fimc-capture.c  |    8 +-
 .../platform/exynos4-is/fimc-isp-video.c      |    8 +-
 drivers/media/platform/exynos4-is/fimc-isp.c  |    2 +-
 drivers/media/platform/exynos4-is/fimc-lite.c |   10 +-
 drivers/media/platform/exynos4-is/media-dev.c |   20 +-
 drivers/media/platform/omap3isp/isp.c         |    2 +-
 drivers/media/platform/omap3isp/ispvideo.c    |   25 +-
 drivers/media/platform/omap3isp/ispvideo.h    |    2 +-
 .../media/platform/qcom/camss/camss-video.c   |    6 +-
 drivers/media/platform/rcar-vin/rcar-core.c   |   16 +-
 drivers/media/platform/rcar-vin/rcar-dma.c    |    8 +-
 .../platform/rockchip/rkisp1/rkisp1-capture.c |    6 +-
 .../media/platform/s3c-camif/camif-capture.c  |    6 +-
 drivers/media/platform/stm32/stm32-dcmi.c     |    6 +-
 .../platform/sunxi/sun4i-csi/sun4i_dma.c      |    6 +-
 .../platform/sunxi/sun6i-csi/sun6i_video.c    |    6 +-
 drivers/media/platform/ti-vpe/cal-video.c     |    6 +-
 drivers/media/platform/vsp1/vsp1_video.c      |   18 +-
 drivers/media/platform/xilinx/xilinx-dma.c    |   20 +-
 drivers/media/platform/xilinx/xilinx-dma.h    |    2 +-
 .../media/test-drivers/vimc/vimc-capture.c    |    6 +-
 drivers/media/usb/au0828/au0828-core.c        |    8 +-
 drivers/media/v4l2-core/v4l2-ioctl.c          |   25 +-
 drivers/media/v4l2-core/v4l2-mc.c             |   43 +-
 drivers/media/v4l2-core/v4l2-subdev.c         | 1002 ++++++++++++++++-
 drivers/staging/media/imx/imx-media-utils.c   |    8 +-
 drivers/staging/media/ipu3/ipu3-v4l2.c        |    6 +-
 drivers/staging/media/omap4iss/iss.c          |    2 +-
 drivers/staging/media/omap4iss/iss_video.c    |   40 +-
 drivers/staging/media/omap4iss/iss_video.h    |    2 +-
 drivers/staging/media/tegra-video/tegra210.c  |    6 +-
 include/media/media-entity.h                  |  125 +-
 include/media/v4l2-subdev.h                   |  403 ++++++-
 include/uapi/linux/v4l2-subdev.h              |   88 +-
 50 files changed, 2273 insertions(+), 343 deletions(-)
 create mode 100644 Documentation/userspace-api/media/v4l/vidioc-subdev-g-routing.rst
  

Comments

Tomasz Figa July 7, 2022, 10:38 a.m. UTC | #1
On Tue, Mar 01, 2022 at 06:11:20PM +0200, Tomi Valkeinen wrote:
> Hi,
> 
> Here's v11 of the streams series (used to be "multiplexed streams").
> 
> v10 can be found from:
> 
> https://lore.kernel.org/all/20211130141536.891878-1-tomi.valkeinen@ideasonboard.com/
> 
> This series is based on the v5 of the subdev active state:
> 
> https://lore.kernel.org/all/20220301105548.305191-1-tomi.valkeinen@ideasonboard.com/
> 
> My work branch with additional drivers can be found from:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git streams/work-v11
> 
> And there's also the v4l-utils series to add support to v4l2-ctl and
> media-ctl:
> 
> https://lore.kernel.org/all/20211130141815.892354-1-tomi.valkeinen@ideasonboard.com/
> 
> The main changes compared to v10:
> 
> - Rebased on the v5 of the active state series, which has different
>   locking system than what we had in v10 of this series.
> - Moved code around in v4l2-subdev.[ch] so that the functions are inside
>   the correct ifdefs
> - A better route validation helper v4l2_subdev_routing_validate
> - Subdev enable/disable_streams ops (see "media: v4l2-subdev: Add subdev
>   .(enable|disable)_streams() operations")
> 
> There are still some comments I haven't addressed from the v10 review,
> and I'd like to change the route flags a bit. We've also thought about
> adding more support for drivers that don't need multiple streams but
> would still use the new streams APIs to simplify the drivers.
> 
> However, as the v10 is already quite old, and I posted the v5 for the
> active state, I thought it's better to also post the current version of
> the streams series.

Thanks Tomi and everyone for working on this series. With the few nits I
posted addressed:

Reviewed-by: Tomasz Figa <tfiga@chromium.org>

Best regards,
Tomasz