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: Tue, 19 Jul 2022 14:38:22 +0900 [thread overview]
Message-ID: <CAAFQd5A8K4PPgfWnRNXC7vjjb-B6hn1T=haQPhtNw7tp1pdbKQ@mail.gmail.com> (raw)
In-Reply-To: <d1eb02fc-a5a9-7b19-64da-fdd719f3e342@ideasonboard.com>
On Thu, Jul 14, 2022 at 4:41 PM Tomi Valkeinen
<tomi.valkeinen@ideasonboard.com> wrote:
>
> Hi,
>
> On 07/07/2022 13:27, Tomasz Figa wrote:
> > 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?
>
> So is your point that as the function returns a bitmask, and not a
> mapping of the stream IDs, this is not a translate function?
Yep.
>
> > If yes, maybe v4l2_subdev_state_get_routed_streams() be a better name?
>
> I think this name would also fit quite well for a function that returns
> a mapping of the streams. So... I don't have a strong opinion on this.
> To me, neither the current name nor the proposed one clearly explains
> alone what the function does.
Well, since it's a kernel function, it probably can be renamed later.
Anyway, I forgot to place "nit:" before the comment. It's not really a
strong opinion from me either.
Best regards,
Tomasz
next prev parent reply other threads:[~2022-07-19 5:38 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
2022-07-14 7:41 ` Tomi Valkeinen
2022-07-19 5:38 ` Tomasz Figa [this message]
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='CAAFQd5A8K4PPgfWnRNXC7vjjb-B6hn1T=haQPhtNw7tp1pdbKQ@mail.gmail.com' \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).