From: Tomasz Figa <tfiga@chromium.org>
To: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: linux-media@vger.kernel.org, sakari.ailus@linux.intel.com,
Jacopo Mondi <jacopo+renesas@jmondi.org>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
niklas.soderlund+renesas@ragnatech.se,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
Pratyush Yadav <p.yadav@ti.com>
Subject: Re: [PATCH v11 34/36] media: v4l2-subdev: Add v4l2_subdev_state_xlate_streams() helper
Date: Thu, 7 Jul 2022 19:27:41 +0900 [thread overview]
Message-ID: <Ysa1HZh5f38iXDHf@chromium.org> (raw)
In-Reply-To: <20220301161156.1119557-35-tomi.valkeinen@ideasonboard.com>
Hi Tomi, Laurent,
On Tue, Mar 01, 2022 at 06:11:54PM +0200, Tomi Valkeinen wrote:
> From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> Add a helper function to translate streams between two pads of a subdev,
> using the subdev's internal routing table.
>
Thanks for the patch! Please see my comments inline.
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> ---
> drivers/media/v4l2-core/v4l2-subdev.c | 25 +++++++++++++++++++++++++
> include/media/v4l2-subdev.h | 23 +++++++++++++++++++++++
> 2 files changed, 48 insertions(+)
>
> diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
> index e30338a53088..6a9fc62dacbf 100644
> --- a/drivers/media/v4l2-core/v4l2-subdev.c
> +++ b/drivers/media/v4l2-core/v4l2-subdev.c
> @@ -1529,6 +1529,31 @@ v4l2_subdev_state_get_opposite_stream_format(struct v4l2_subdev_state *state,
> }
> EXPORT_SYMBOL_GPL(v4l2_subdev_state_get_opposite_stream_format);
>
> +u64 v4l2_subdev_state_xlate_streams(const struct v4l2_subdev_state *state,
> + u32 pad0, u32 pad1, u64 *streams)
> +{
> + const struct v4l2_subdev_krouting *routing = &state->routing;
> + struct v4l2_subdev_route *route;
> + u64 streams0 = 0;
> + u64 streams1 = 0;
> +
> + for_each_active_route(routing, route) {
> + if (route->sink_pad == pad0 && route->source_pad == pad1 &&
> + (*streams & BIT(route->sink_stream))) {
> + streams0 |= BIT(route->sink_stream);
> + streams1 |= BIT(route->source_stream);
> + }
> + if (route->source_pad == pad0 && route->sink_pad == pad1 &&
> + (*streams & BIT(route->source_stream))) {
> + streams0 |= BIT(route->source_stream);
> + streams1 |= BIT(route->sink_stream);
> + }
> + }
> +
> + *streams = streams0;
> + return streams1;
> +}
> +
> int v4l2_subdev_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_state *state,
> struct v4l2_subdev_format *format)
> {
> diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
> index 1eced0f47296..992debe116ac 100644
> --- a/include/media/v4l2-subdev.h
> +++ b/include/media/v4l2-subdev.h
> @@ -1497,6 +1497,29 @@ struct v4l2_mbus_framefmt *
> v4l2_subdev_state_get_opposite_stream_format(struct v4l2_subdev_state *state,
> u32 pad, u32 stream);
>
> +/**
> + * v4l2_subdev_state_xlate_streams() - Translate streams from one pad to another
> + *
> + * @state: Subdevice state
> + * @pad0: The first pad
> + * @pad1: The second pad
> + * @streams: Streams bitmask on the first pad
> + *
> + * Streams on sink pads of a subdev are routed to source pads as expressed in
> + * the subdev state routing table. Stream numbers don't necessarily match on
> + * the sink and source side of a route. This function translates stream numbers
> + * on @pad0, expressed as a bitmask in @streams, to the corresponding streams
> + * on @pad1 using the routing table from the @state. It returns the stream mask
> + * on @pad1, and updates @streams with the streams that have been found in the
> + * routing table.
> + *
> + * @pad0 and @pad1 must be a sink and a source, in any order.
> + *
> + * Return: The bitmask of streams of @pad1 that are routed to @streams on @pad0.
It might be just me, but somehow I associate "translate" with turning a
name from one namespace into a corresponding name from another
namespace. In this case I initially assumed that this function is
supposed to accept stream IDs from pad0 and return corresponding
stream IDs from pad1. However, it looks like this is move like - "tell
me which streams on pad1 are connected to the given pad0 streams". Is
this correct?
If yes, maybe v4l2_subdev_state_get_routed_streams() be a better name?
Best regards,
Tomasz
next prev parent reply other threads:[~2022-07-07 10:27 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-01 16:11 [PATCH v11 00/36] v4l: routing and streams support Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 01/36] media: entity: Use pad as a starting point for graph walk Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 02/36] media: entity: Use pads instead of entities in the media graph walk stack Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 03/36] media: entity: Walk the graph based on pads Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 04/36] media: mc: Start walk from a specific pad in use count calculation Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 05/36] media: entity: Add iterator helper for entity pads Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 06/36] media: entity: Move the pipeline from entity to pads Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 07/36] media: entity: Use pad as the starting point for a pipeline Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 08/36] media: entity: Add has_route entity operation Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 09/36] media: entity: Add media_entity_has_route() function Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 10/36] media: entity: Use routing information during graph traversal Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 11/36] media: entity: Skip link validation for pads to which there is no route Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 12/36] media: entity: Add an iterator helper for connected pads Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 13/36] media: entity: Add only connected pads to the pipeline Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 14/36] media: entity: Add debug information in graph walk route check Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 15/36] media: Add bus type to frame descriptors Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 16/36] media: Add CSI-2 bus configuration " Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 17/36] media: Add stream to frame descriptor Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 18/36] media: subdev: increase V4L2_FRAME_DESC_ENTRY_MAX to 8 Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 19/36] media: add V4L2_SUBDEV_FL_MULTIPLEXED Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 20/36] media: add V4L2_SUBDEV_CAP_MPLEXED Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 21/36] media: Documentation: Add GS_ROUTING documentation Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 22/36] media: subdev: Add [GS]_ROUTING subdev ioctls and operations Tomi Valkeinen
2022-07-07 9:15 ` Tomasz Figa
2022-07-14 6:47 ` Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 23/36] media: subdev: add v4l2_subdev_has_route() Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 24/36] media: subdev: add v4l2_subdev_set_routing helper() Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 25/36] media: Documentation: add multiplexed streams documentation Tomi Valkeinen
2022-03-16 9:04 ` Jacopo Mondi
2022-03-17 7:18 ` Tomi Valkeinen
2022-03-17 8:27 ` Jacopo Mondi
2022-03-01 16:11 ` [PATCH v11 26/36] media: subdev: add stream based configuration Tomi Valkeinen
2022-03-16 9:59 ` Jacopo Mondi
2022-03-17 8:01 ` Tomi Valkeinen
2022-03-17 8:38 ` Jacopo Mondi
2022-03-17 8:48 ` Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 27/36] media: subdev: use streams in v4l2_subdev_link_validate() Tomi Valkeinen
2022-03-16 10:47 ` Jacopo Mondi
2022-03-17 8:39 ` Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 28/36] media: subdev: add "opposite" stream helper funcs Tomi Valkeinen
2022-03-16 10:50 ` Jacopo Mondi
2022-03-17 9:10 ` Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 29/36] media: subdev: add v4l2_subdev_get_fmt() helper function Tomi Valkeinen
2022-03-16 11:00 ` Jacopo Mondi
2022-03-01 16:11 ` [PATCH v11 30/36] media: subdev: Fallback to pad config in v4l2_subdev_get_fmt() Tomi Valkeinen
2022-03-16 11:03 ` Jacopo Mondi
2022-03-17 9:18 ` Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 31/36] media: subdev: add v4l2_subdev_set_routing_with_fmt() helper Tomi Valkeinen
2022-03-16 11:04 ` Jacopo Mondi
2022-03-01 16:11 ` [PATCH v11 32/36] media: subdev: add v4l2_subdev_routing_validate() helper Tomi Valkeinen
2022-03-16 11:10 ` Jacopo Mondi
2022-03-17 9:15 ` Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 33/36] media: subdev: Add for_each_active_route() macro Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 34/36] media: v4l2-subdev: Add v4l2_subdev_state_xlate_streams() helper Tomi Valkeinen
2022-03-16 11:26 ` Jacopo Mondi
2022-03-17 9:27 ` Tomi Valkeinen
2022-03-17 9:35 ` Tomi Valkeinen
2022-07-07 10:27 ` Tomasz Figa [this message]
2022-07-14 7:41 ` Tomi Valkeinen
2022-07-19 5:38 ` Tomasz Figa
2022-03-01 16:11 ` [PATCH v11 35/36] media: v4l2-subdev: Add subdev .(enable|disable)_streams() operations Tomi Valkeinen
2022-03-16 12:05 ` Jacopo Mondi
2022-03-17 9:43 ` Tomi Valkeinen
2022-03-01 16:11 ` [PATCH v11 36/36] media: v4l2-subdev: Add v4l2_subdev_s_stream_helper() function Tomi Valkeinen
2022-03-16 12:10 ` Jacopo Mondi
2022-03-17 9:45 ` Tomi Valkeinen
2022-07-07 10:38 ` [PATCH v11 00/36] v4l: routing and streams support Tomasz Figa
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=Ysa1HZh5f38iXDHf@chromium.org \
--to=tfiga@chromium.org \
--cc=hverkuil-cisco@xs4all.nl \
--cc=jacopo+renesas@jmondi.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=niklas.soderlund+renesas@ragnatech.se \
--cc=p.yadav@ti.com \
--cc=sakari.ailus@linux.intel.com \
--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.