From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-media@vger.kernel.org
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
tomi.valkeinen@ideasonboard.com, bingbu.cao@intel.com,
hongju.wang@intel.com, hverkuil@xs4all.nl,
Andrey Konovalov <andrey.konovalov@linaro.org>,
Jacopo Mondi <jacopo.mondi@ideasonboard.com>,
Dmitry Perchanov <dmitry.perchanov@intel.com>,
"Ng, Khai Wen" <khai.wen.ng@intel.com>
Subject: [PATCH v6 10/28] media: Documentation: v4l: Document source routes
Date: Tue, 3 Oct 2023 15:07:55 +0300 [thread overview]
Message-ID: <20231003120813.77726-1-sakari.ailus@linux.intel.com> (raw)
In-Reply-To: <20231003115237.76828-1-sakari.ailus@linux.intel.com>
Document how internal pads are used on source routes. Use the IMX219
camera sensor as an example.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
.../userspace-api/media/v4l/dev-subdev.rst | 179 ++++++++++++++++++
1 file changed, 179 insertions(+)
diff --git a/Documentation/userspace-api/media/v4l/dev-subdev.rst b/Documentation/userspace-api/media/v4l/dev-subdev.rst
index a387e8a15b8d..fb73a95401c3 100644
--- a/Documentation/userspace-api/media/v4l/dev-subdev.rst
+++ b/Documentation/userspace-api/media/v4l/dev-subdev.rst
@@ -553,6 +553,27 @@ A stream at a specific point in the media pipeline is identified by the
sub-device and a (pad, stream) pair. For sub-devices that do not support
multiplexed streams the 'stream' field is always 0.
+.. _v4l2-subdev-source-routes:
+
+Internal pads and source routes
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Cases where a single sub-device source pad is traversed by multiple streams one
+or more of which originate from within the sub-device itself are special as
+there is no external sink pad for such routes. In those cases, the sources of
+the internally generated streams are represented by internal sink pads, which
+are sink pads that have the :ref:`MEDIA_PAD_FL_INTERNAL <MEDIA-PAD-FL-INTERNAL>`
+pad flag set.
+
+Internal pads have all the properties of an external pad, including formats and
+selections. The format in this case is the source format of the stream. An
+internal pad always has a single stream only (0).
+
+*Source routes* are routes from an internal sink pad to an external source
+pad. In most cases source routes are not modifiable but they can be activated
+and deactivated using the :ref:`V4L2_SUBDEV_ROUTE_FL_ACTIVE
+<v4l2-subdev-routing-flags>` flag, depending on driver capabilities.
+
Interaction between routes, streams, formats and selections
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -668,3 +689,161 @@ To configure this pipeline, the userspace must take the following steps:
the configurations along the stream towards the receiver, using
:ref:`VIDIOC_SUBDEV_S_FMT <VIDIOC_SUBDEV_G_FMT>` ioctls to configure each
stream endpoint in each sub-device.
+
+Internal pads setup example
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A simple example of a multiplexed stream setup might be as follows:
+
+- A CCS camera sensor source sub-device, with one sink pad (0), one source pad
+ (1), an internal sink pad (2) that represents the source of embedded
+ data. There are two routes, one from the sink pad to the source, and another
+ from the internal sink pad to the source pad. The embedded data stream needs
+ to be enabled by activating the related route. The configuration of the rest
+ of the CCS sub-devices is omitted from this example.
+
+- Multiplexer bridge (Bridge). The bridge has one sink pad, connected to the
+ sensor (pad 0), and one source pad (pad 1), which outputs two streams.
+
+- Receiver in the SoC (Receiver). The receiver has a single sink pad (pad 0),
+ connected to the bridge, and two source pads (pads 1-2), going to the DMA
+ engine. The receiver demultiplexes the incoming streams to the source pads.
+
+- DMA Engines in the SoC (DMA Engine), one for each stream. Each DMA engine is
+ connected to a single source pad in the receiver.
+
+The sensor, the bridge and the receiver are modeled as V4L2 sub-devices,
+exposed to userspace via /dev/v4l-subdevX device nodes. The DMA engines are
+modeled as V4L2 devices, exposed to userspace via /dev/videoX nodes.
+
+To configure this pipeline, the userspace must take the following steps:
+
+1) Set up media links between entities: connect the sensors to the bridge,
+ bridge to the receiver, and the receiver to the DMA engines. This step does
+ not differ from normal non-multiplexed media controller setup.
+
+2) Configure routing
+
+.. flat-table:: Camera sensor
+ :header-rows: 1
+
+ * - Sink Pad/Stream
+ - Source Pad/Stream
+ - Routing Flags
+ - Comments
+ * - 0/0
+ - 1/0
+ - V4L2_SUBDEV_ROUTE_FL_ACTIVE
+ - Pixel data stream from the sink pad
+ * - 2/0
+ - 1/1
+ - **V4L2_SUBDEV_ROUTE_FL_ACTIVE**
+ - Metadata stream from the internal sink pad
+
+.. flat-table:: Bridge routing table
+ :header-rows: 1
+
+ * - Sink Pad/Stream
+ - Source Pad/Stream
+ - Routing Flags
+ - Comments
+ * - 0/0
+ - 1/0
+ - V4L2_SUBDEV_ROUTE_FL_ACTIVE
+ - Pixel data stream from camera sensor
+ * - 0/1
+ - 1/1
+ - V4L2_SUBDEV_ROUTE_FL_ACTIVE
+ - Metadata stream from camera sensor
+
+.. flat-table:: Receiver routing table
+ :header-rows: 1
+
+ * - Sink Pad/Stream
+ - Source Pad/Stream
+ - Routing Flags
+ - Comments
+ * - 0/0
+ - 1/0
+ - V4L2_SUBDEV_ROUTE_FL_ACTIVE
+ - Pixel data stream from camera sensor
+ * - 0/1
+ - 2/0
+ - V4L2_SUBDEV_ROUTE_FL_ACTIVE
+ - Metadata stream from camera sensor
+
+The options available in sensor's routing configuration are dictated by
+hardware capabilities: typically camera sensors always produce image data
+stream while the embedded data stream typically can be either enabled or
+disabled.
+
+3) Configure formats and selections
+
+ This example assumes that the formats are propagated from sink pad to the
+ source pad as-is. The tables contain fields of both struct v4l2_subdev_format
+ and struct v4l2_mbus_framefmt.
+
+.. flat-table:: Formats set on the sub-devices. Bold values are set, others are
+ static or propagated.
+ :header-rows: 1
+ :fill-cells:
+
+ * - Sub-device
+ - Pad/Stream
+ - Width
+ - Height
+ - Code
+ * - :rspan:`3` Camera sensor sub-device (IMX219)
+ - 1/0
+ - 3296
+ - 2480
+ - MEDIA_BUS_FMT_SRGGB10
+ * - 0/0
+ - **3296**
+ - **2480**
+ - **MEDIA_BUS_FMT_SRGGB10**
+ * - 2/0
+ - 3296
+ - 2
+ - MEDIA_BUS_FMT_IMX219_EMBEDDED
+ * - 1/1
+ - 3296
+ - 2
+ - MEDIA_BUS_FMT_META_10
+ * - :rspan:`3` Bridge
+ - 0/0
+ - **3296**
+ - **2480**
+ - **MEDIA_BUS_FMT_SRGGB10**
+ * - 1/0
+ - 3296
+ - 2480
+ - MEDIA_BUS_FMT_SRGGB10
+ * - 0/1
+ - **3296**
+ - **2**
+ - **MEDIA_BUS_FMT_META_10**
+ * - 1/1
+ - 3296
+ - 2
+ - MEDIA_BUS_FMT_META_10
+ * - :rspan:`3` Receiver
+ - 0/0
+ - **3296**
+ - **2480**
+ - **MEDIA_BUS_FMT_SRGGB10**
+ * - 1/0
+ - 3296
+ - 2480
+ - MEDIA_BUS_FMT_SRGGB10
+ * - 0/1
+ - **3296**
+ - **2**
+ - **MEDIA_BUS_FMT_META_10**
+ * - 2/0
+ - 3296
+ - 2
+ - MEDIA_BUS_FMT_META_10
+
+The embedded data format does not need to be configured as the format is
+dictated by the pixel data format in this case.
--
2.39.2
next prev parent reply other threads:[~2023-10-03 12:08 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-03 11:52 [PATCH v6 00/28] Generic line based metadata support, internal pads Sakari Ailus
2023-10-03 11:52 ` [PATCH v6 01/28] media: mc: Add INTERNAL pad flag Sakari Ailus
2023-10-05 9:52 ` Hans Verkuil
2023-10-05 10:22 ` Sakari Ailus
2023-10-05 11:16 ` Hans Verkuil
2023-10-25 21:17 ` Sakari Ailus
2023-10-11 19:22 ` Sakari Ailus
2023-10-05 11:04 ` Tomi Valkeinen
2023-10-11 19:35 ` Sakari Ailus
2023-10-03 11:52 ` [PATCH v6 02/28] media: uapi: Add generic serial metadata mbus formats Sakari Ailus
[not found] ` <20231027144742.GC19539@pendragon.ideasonboard.com>
2023-10-27 20:43 ` Sakari Ailus
2023-10-03 11:52 ` [PATCH v6 03/28] media: uapi: Document which mbus format fields are valid for metadata Sakari Ailus
2023-10-05 11:28 ` Tomi Valkeinen
2023-10-11 19:41 ` Sakari Ailus
2023-10-03 11:52 ` [PATCH v6 04/28] media: uapi: Add generic 8-bit metadata format definitions Sakari Ailus
2023-10-03 11:52 ` [PATCH v6 05/28] media: v4l: Support line-based metadata capture Sakari Ailus
2023-10-05 10:00 ` Hans Verkuil
2023-10-03 11:52 ` [PATCH v6 06/28] media: uapi: ccs: Add media bus code for MIPI CCS embedded data Sakari Ailus
2023-10-03 11:52 ` [PATCH v6 07/28] media: Documentation: ccs: Document routing Sakari Ailus
2023-10-03 11:52 ` [PATCH v6 08/28] media: Documentation: Additional streams generally don't harm capture Sakari Ailus
2023-10-05 11:40 ` Tomi Valkeinen
2023-10-03 11:52 ` [PATCH v6 09/28] media: Documentation: Document embedded data guidelines for camera sensors Sakari Ailus
2023-10-05 10:10 ` Hans Verkuil
2023-10-05 11:53 ` Tomi Valkeinen
2023-10-05 14:13 ` Sakari Ailus
2023-10-05 14:11 ` Sakari Ailus
2023-10-05 10:14 ` Hans Verkuil
2023-10-05 14:35 ` Sakari Ailus
2023-10-03 12:07 ` Sakari Ailus [this message]
2023-10-05 10:26 ` [PATCH v6 10/28] media: Documentation: v4l: Document source routes Hans Verkuil
2023-10-09 17:31 ` Sakari Ailus
2023-10-05 12:37 ` Tomi Valkeinen
2023-10-09 17:26 ` Sakari Ailus
2023-10-03 12:07 ` [PATCH v6 11/28] media: Documentation: Document S_ROUTING behaviour Sakari Ailus
2023-10-05 12:59 ` Tomi Valkeinen
2023-10-12 20:00 ` Sakari Ailus
2023-10-03 12:07 ` [PATCH v6 12/28] media: v4l: subdev: Add helpers for format, crop and compose pointers Sakari Ailus
2023-10-05 13:12 ` Tomi Valkeinen
2023-10-13 6:05 ` Sakari Ailus
2023-10-03 12:07 ` [PATCH v6 13/28] media: v4l: subdev: Add a function to lock two sub-device states, use it Sakari Ailus
2023-10-09 10:34 ` Tomi Valkeinen
2023-10-25 21:11 ` Sakari Ailus
2023-10-03 12:07 ` [PATCH v6 14/28] media: v4l: subdev: Move G_ROUTING handling below S_ROUTING Sakari Ailus
2023-10-09 10:36 ` Tomi Valkeinen
2023-10-25 21:05 ` Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 15/28] media: v4l: subdev: Copy argument back to user also for S_ROUTING Sakari Ailus
2023-10-05 10:37 ` Hans Verkuil
2023-10-12 20:09 ` Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 16/28] media: v4l: subdev: Add len_routes field to struct v4l2_subdev_routing Sakari Ailus
2023-10-05 11:00 ` Hans Verkuil
2023-11-28 13:30 ` Sakari Ailus
2023-12-04 13:36 ` Hans Verkuil
2023-10-03 12:08 ` [PATCH v6 17/28] media: v4l: subdev: Return routes set using S_ROUTING Sakari Ailus
2023-10-05 11:05 ` Hans Verkuil
2023-10-25 20:12 ` Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 18/28] media: uapi: Allow a larger number of routes than there's room for Sakari Ailus
2023-10-05 11:08 ` Hans Verkuil
2023-10-25 21:00 ` Sakari Ailus
2023-10-09 10:56 ` Tomi Valkeinen
2023-10-25 21:07 ` Laurent Pinchart
[not found] ` <adaadd6e-c163-4c3a-b851-b2de184b5b5e@xs4all.nl>
2023-10-30 7:57 ` Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 19/28] media: v4l: subdev: Add trivial set_routing support Sakari Ailus
2023-10-09 11:09 ` Tomi Valkeinen
2023-10-03 12:08 ` [PATCH v6 20/28] media: uapi: v4l: subdev: Enable streams API Sakari Ailus
2023-10-09 12:52 ` Tomi Valkeinen
2023-10-25 21:13 ` Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 21/28] media: ccs: No need to set streaming to false in power off Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 22/28] media: ccs: Use {enable,disable}_streams operations Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 23/28] media: ccs: Track streaming state Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 24/28] media: ccs: Move ccs_validate_csi_data_format up Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 25/28] media: ccs: Support frame descriptors Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 26/28] media: ccs: Add support for embedded data stream Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 27/28] media: ccs: Remove ccs_get_crop_compose helper Sakari Ailus
2023-10-03 12:08 ` [PATCH v6 28/28] media: ccs: Rely on sub-device state locking Sakari Ailus
2023-10-05 8:05 ` [PATCH v6 00/28] Generic line based metadata support, internal pads Tomi Valkeinen
2023-10-05 9:04 ` Sakari Ailus
2023-10-05 11:17 ` Tomi Valkeinen
2023-10-09 12:16 ` Sakari Ailus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231003120813.77726-1-sakari.ailus@linux.intel.com \
--to=sakari.ailus@linux.intel.com \
--cc=andrey.konovalov@linaro.org \
--cc=bingbu.cao@intel.com \
--cc=dmitry.perchanov@intel.com \
--cc=hongju.wang@intel.com \
--cc=hverkuil@xs4all.nl \
--cc=jacopo.mondi@ideasonboard.com \
--cc=khai.wen.ng@intel.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=tomi.valkeinen@ideasonboard.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.