From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: linux-media@vger.kernel.org, hverkuil@xs4all.nl,
tomi.valkeinen@ideasonboard.com, jacopo.mondi@ideasonboard.com,
bingbu.cao@intel.com, hongju.wang@intel.com,
Alain Volmat <alain.volmat@foss.st.com>
Subject: Re: [PATCH v4 5/9] media: v4l: subdev: Make stream argument optional in state access functions
Date: Fri, 27 Oct 2023 12:14:27 +0300 [thread overview]
Message-ID: <20231027091427.GA10143@pendragon.ideasonboard.com> (raw)
In-Reply-To: <ZTt-7tMQQVGGVGTi@kekkonen.localdomain>
On Fri, Oct 27, 2023 at 09:12:14AM +0000, Sakari Ailus wrote:
> On Fri, Oct 27, 2023 at 12:10:13PM +0300, Laurent Pinchart wrote:
> > > > > +/*
> > > > > + * Wrap v4l2_subdev_state_get_format(), allowing the function to be called with
> > > > > + * two or three arguments. The purpose of the __v4l2_subdev_state_get_format()
> > > > > + * macro below is to come up with the name of the function or macro to call,
> > > > > + * using the last two arguments (_stream and _pad). The selected function or
> > > > > + * macro is then called using the arguments specified by the caller. A similar
> > > > > + * arrangement is used for v4l2_subdev_state_crop() and
> > > > > + * v4l2_subdev_state_compose() below.
> > > > > + */
> > > > > +#define v4l2_subdev_state_get_format(...) \
> > > > > + __v4l2_subdev_state_get_format(__VA_ARGS__, \
> > > > > + _stream, _pad)(__VA_ARGS__)
> > > > > +#define __v4l2_subdev_state_get_format(_1, _2, _3, ARG, ...) \
> > > >
> > > > How about renaming this macro to __v4l2_subdev_state_get_format_name ...
> > > >
> > > > > + __v4l2_subdev_state_get_format ## ARG
> > > > > +#define __v4l2_subdev_state_get_format_pad(state, pad) \
> > > > > + __v4l2_subdev_state_get_format_stream(state, pad, 0)
> > > > > struct v4l2_mbus_framefmt *
> > > > > -v4l2_subdev_state_get_format(struct v4l2_subdev_state *state, unsigned int pad,
> > > > > - u32 stream);
> > > > > +__v4l2_subdev_state_get_format_stream(struct v4l2_subdev_state *state,
> > > > > + unsigned int pad, u32 stream);
> > > >
> > > > ... and this function to __v4l2_subdev_state_get_format() ? That way the
> > > > macro used by drivers and the backend function will have the same name,
> > > > with a __ prefix for the function. I think it would be a bit cleaner.
> > > > Same below.
> > > >
> > > > But now that I've written that, I realize you would need an additional
> > > > __v4l2_subdev_state_get_format_stream() macro. I'll let you decide if
> > > > you think that's cleaner or not.
> > > >
> > > >
> > > > You could also take it one step forward, and avoid three copies of the
> > > > same name selection macro:
> > > >
> > > > #define __v4l2_subdev_state_get_macro(name, _1, _2, _3, ARG, ...) \
> > > > __v4l2_subdev_state_get_ ## name ## ARG
> > > >
> > > > #define v4l2_subdev_state_get_format(...) \
> > > > __v4l2_subdev_state_get_macro(format, __VA_ARGS__, \
> > > > _stream, _pad)(__VA_ARGS__)
> > >
> > > This seems like a good idea. How about calling it
> > > __v4l2_subdev_state_gen_call()? It better describes what it does I think.
> >
> > Works for me. It's internal anyway.
> >
> > > > #define __v4l2_subdev_state_get_format_pad(state, pad) \
> > > > __v4l2_subdev_state_get_format(state, pad, 0)
> > > > #define __v4l2_subdev_state_get_format_stream(state, pad, stream) \
> > > > __v4l2_subdev_state_get_format(state, pad, stream)
> > >
> > > This one isn't needed.
> >
> > You could indeed drop it if you remove the _stream argument to the
> > __v4l2_subdev_state_get_macro() macro above. I thought it would be nice
> > to keep it though, to make it more explicit, but I don't mind much.
>
> This is certainly up to interpretation but I generally prefer fewer
> wrappers. :-)
Up to you.
> We can also make the function __v4l2_subdev_state_get_format() by just
> removing "_stream" from the macro call --- empty arguments are allowed.
Yes, that's what I meant.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2023-10-27 9:14 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-26 7:03 [PATCH v4 0/9] Unify sub-device state access functions Sakari Ailus
2023-10-26 7:03 ` [PATCH v4 1/9] media: v4l: subdev: Store the sub-device in the sub-device state Sakari Ailus
2023-10-26 7:03 ` [PATCH v4 2/9] media: v4l: subdev: Also return pads array information on stream functions Sakari Ailus
2023-10-26 7:11 ` Hans Verkuil
2023-10-26 7:39 ` Sakari Ailus
2023-10-26 7:03 ` [PATCH v4 3/9] media: v4l: subdev: Rename sub-device state information access functions Sakari Ailus
2023-10-26 7:26 ` Hans Verkuil
2023-10-26 8:25 ` Sakari Ailus
2023-10-26 9:51 ` Laurent Pinchart
2023-10-26 10:10 ` Sakari Ailus
2023-10-26 13:40 ` Laurent Pinchart
2023-10-26 7:03 ` [PATCH v4 4/9] media: v4l: subdev: v4l2_subdev_state_get_format always returns format now Sakari Ailus
2023-10-26 7:03 ` [PATCH v4 5/9] media: v4l: subdev: Make stream argument optional in state access functions Sakari Ailus
2023-10-26 13:49 ` Laurent Pinchart
2023-10-27 9:06 ` Sakari Ailus
2023-10-27 9:10 ` Laurent Pinchart
2023-10-27 9:12 ` Sakari Ailus
2023-10-27 9:14 ` Laurent Pinchart [this message]
2023-10-27 9:21 ` Sakari Ailus
2023-10-26 7:03 ` [PATCH v4 6/9] media: v4l: subdev: Switch to stream-aware state functions Sakari Ailus
2023-10-26 7:03 ` [PATCH v4 7/9] media: v4l: subdev: Remove stream-unaware sub-device state access Sakari Ailus
2023-10-26 13:54 ` Laurent Pinchart
2023-10-26 7:03 ` [PATCH v4 8/9] media: v4l: subdev: Return NULL from pad access functions on error Sakari Ailus
2023-10-26 7:35 ` Hans Verkuil
2023-10-26 7:43 ` Sakari Ailus
2023-10-26 13:55 ` Laurent Pinchart
2023-10-26 7:03 ` [PATCH v4 9/9] media: v4l: subdev: Warn on stream when accessing stream-unaware data Sakari Ailus
2023-10-26 7:36 ` Hans Verkuil
2023-10-26 7:40 ` Sakari Ailus
2023-10-26 14:20 ` Laurent Pinchart
2023-10-26 17:50 ` Sakari Ailus
2023-10-26 18:09 ` Laurent Pinchart
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=20231027091427.GA10143@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=alain.volmat@foss.st.com \
--cc=bingbu.cao@intel.com \
--cc=hongju.wang@intel.com \
--cc=hverkuil@xs4all.nl \
--cc=jacopo.mondi@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--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.