From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-media@vger.kernel.org
Cc: hverkuil@xs4all.nl, laurent.pinchart@ideasonboard.com,
tomi.valkeinen@ideasonboard.com, jacopo.mondi@ideasonboard.com,
bingbu.cao@intel.com, hongju.wang@intel.com,
Alain Volmat <alain.volmat@foss.st.com>
Subject: [PATCH v4 2/9] media: v4l: subdev: Also return pads array information on stream functions
Date: Thu, 26 Oct 2023 10:03:22 +0300 [thread overview]
Message-ID: <20231026070329.948847-3-sakari.ailus@linux.intel.com> (raw)
In-Reply-To: <20231026070329.948847-1-sakari.ailus@linux.intel.com>
There are two sets of functions that return information from sub-device
state, one for stream-unaware users and another for stream-aware users.
Add support for stream-aware functions to return format, crop and compose
information from pad-based array that are functionally equivalent to the
old, stream-unaware ones.
Also check state is non-NULL, in order to guard against old drivers
potentially calling this with NULL state for active formats or selection
rectangles.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/media/v4l2-core/v4l2-subdev.c | 51 +++++++++++++++++++++++++++
include/media/v4l2-subdev.h | 9 +++--
2 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
index ee4fe8f33a41..7feaea6b04ad 100644
--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -1684,6 +1684,23 @@ v4l2_subdev_state_get_stream_format(struct v4l2_subdev_state *state,
struct v4l2_subdev_stream_configs *stream_configs;
unsigned int i;
+ if (WARN_ON(!state))
+ return NULL;
+
+ if (state->pads) {
+ if (stream)
+ return NULL;
+
+ /*
+ * Set the pad to 0 on error as this is aligned with the
+ * behaviour of the pad state information access functions.
+ */
+ if (WARN_ON(pad >= state->sd->entity.num_pads))
+ pad = 0;
+
+ return &state->pads[pad].try_fmt;
+ }
+
lockdep_assert_held(state->lock);
stream_configs = &state->stream_configs;
@@ -1705,6 +1722,23 @@ v4l2_subdev_state_get_stream_crop(struct v4l2_subdev_state *state,
struct v4l2_subdev_stream_configs *stream_configs;
unsigned int i;
+ if (WARN_ON(!state))
+ return NULL;
+
+ if (state->pads) {
+ if (stream)
+ return NULL;
+
+ /*
+ * Set the pad to 0 on error as this is aligned with the
+ * behaviour of the pad state information access functions.
+ */
+ if (WARN_ON(pad >= state->sd->entity.num_pads))
+ pad = 0;
+
+ return &state->pads[pad].try_crop;
+ }
+
lockdep_assert_held(state->lock);
stream_configs = &state->stream_configs;
@@ -1726,6 +1760,23 @@ v4l2_subdev_state_get_stream_compose(struct v4l2_subdev_state *state,
struct v4l2_subdev_stream_configs *stream_configs;
unsigned int i;
+ if (WARN_ON(!state))
+ return NULL;
+
+ if (state->pads) {
+ if (stream)
+ return NULL;
+
+ /*
+ * Set the pad to 0 on error as this is aligned with the
+ * behaviour of the pad state information access functions.
+ */
+ if (WARN_ON(pad >= state->sd->entity.num_pads))
+ pad = 0;
+
+ return &state->pads[pad].try_compose;
+ }
+
lockdep_assert_held(state->lock);
stream_configs = &state->stream_configs;
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 6a02a565035c..0ba1cd8c3ac7 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -1550,7 +1550,8 @@ int v4l2_subdev_set_routing_with_fmt(struct v4l2_subdev *sd,
* This returns a pointer to &struct v4l2_mbus_framefmt for the given pad +
* stream in the subdev state.
*
- * If the state does not contain the given pad + stream, NULL is returned.
+ * For stream-unaware drivers the format for the corresponding pad is returned.
+ * If the pad does not exist, NULL is returned.
*/
struct v4l2_mbus_framefmt *
v4l2_subdev_state_get_stream_format(struct v4l2_subdev_state *state,
@@ -1565,7 +1566,8 @@ v4l2_subdev_state_get_stream_format(struct v4l2_subdev_state *state,
* This returns a pointer to crop rectangle for the given pad + stream in the
* subdev state.
*
- * If the state does not contain the given pad + stream, NULL is returned.
+ * For stream-unaware drivers the crop rectangle for the corresponding pad is
+ * returned. If the pad does not exist, NULL is returned.
*/
struct v4l2_rect *
v4l2_subdev_state_get_stream_crop(struct v4l2_subdev_state *state,
@@ -1581,7 +1583,8 @@ v4l2_subdev_state_get_stream_crop(struct v4l2_subdev_state *state,
* This returns a pointer to compose rectangle for the given pad + stream in the
* subdev state.
*
- * If the state does not contain the given pad + stream, NULL is returned.
+ * For stream-unaware drivers the compose rectangle for the corresponding pad is
+ * returned. If the pad does not exist, NULL is returned.
*/
struct v4l2_rect *
v4l2_subdev_state_get_stream_compose(struct v4l2_subdev_state *state,
--
2.39.2
next prev parent reply other threads:[~2023-10-26 7:03 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 ` Sakari Ailus [this message]
2023-10-26 7:11 ` [PATCH v4 2/9] media: v4l: subdev: Also return pads array information on stream functions 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
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=20231026070329.948847-3-sakari.ailus@linux.intel.com \
--to=sakari.ailus@linux.intel.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=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.