From: Paul Elder <paul.elder@ideasonboard.com>
To: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Sakari Ailus <sakari.ailus@iki.fi>,
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
Stefan Klug <stefan.klug@ideasonboard.com>,
Daniel Scally <dan.scally@ideasonboard.com>,
Kieran Bingham <kieran.bingham@ideasonboard.com>,
Umang Jain <umang.jain@ideasonboard.com>,
Dafna Hirschfeld <dafna@fastmail.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Heiko Stuebner <heiko@sntech.de>
Subject: Re: [PATCH v5 5/7] media: rkisp1: Cache the currently active format
Date: Fri, 5 Jul 2024 19:56:14 +0900 [thread overview]
Message-ID: <ZofRTqbsyGKZr7OV@pyrite.rasen.tech> (raw)
In-Reply-To: <20240703161048.247124-6-jacopo.mondi@ideasonboard.com>
On Wed, Jul 03, 2024 at 06:10:44PM +0200, Jacopo Mondi wrote:
> The rkisp1-params driver assumes the data buffer format is the only
> currently supported "fixed" one. The usage of the "fixed" format is
> assumed when allocating memory for the scratch buffers and when
> initializing the vb2 queue.
>
> In order to prepare to support the "extensible" format beside the
> existing "fixed" one, add support in the driver for both formats by
> caching a pointer to the active one in the driver structure and use it
> in the vb2 queue operations and subdev pad operations implementations.
>
> Do not yet allow userspace to select between the two formats as the
> support for the "extensible" format parsing will be introduced in a later
> patch in the series.
>
> While at it, document the un-documented ycbcr_encoding field of
> struct rkisp1_params_ops.
>
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
> ---
> .../platform/rockchip/rkisp1/rkisp1-common.h | 8 +--
> .../platform/rockchip/rkisp1/rkisp1-params.c | 52 ++++++++++++-------
> 2 files changed, 38 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index 8d520c5c71c3..43cc727a628d 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -255,7 +255,7 @@ struct rkisp1_buffer {
> struct rkisp1_params_buffer {
> struct vb2_v4l2_buffer vb;
> struct list_head queue;
> - struct rkisp1_params_cfg *cfg;
> + void *cfg;
> };
>
> static inline struct rkisp1_params_buffer *
> @@ -392,8 +392,9 @@ struct rkisp1_params_ops {
> * @ops: pointer to the variant-specific operations
> * @config_lock: locks the buffer list 'params'
> * @params: queue of rkisp1_buffer
> - * @vdev_fmt: v4l2_format of the metadata format
> + * @metafmt the currently enabled metadata format
> * @quantization: the quantization configured on the isp's src pad
> + * @ycbcr_encoding the YCbCr encoding
> * @raw_type: the bayer pattern on the isp video sink pad
> */
> struct rkisp1_params {
> @@ -403,7 +404,8 @@ struct rkisp1_params {
>
> spinlock_t config_lock; /* locks the buffers list 'params' */
> struct list_head params;
> - struct v4l2_format vdev_fmt;
> +
> + const struct v4l2_meta_format *metafmt;
>
> enum v4l2_quantization quantization;
> enum v4l2_ycbcr_encoding ycbcr_encoding;
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> index e333cda21fdd..45c4b1bcee63 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
> @@ -35,6 +35,22 @@
> #define RKISP1_ISP_CC_COEFF(n) \
> (RKISP1_CIF_ISP_CC_COEFF_0 + (n) * 4)
>
> +enum rkisp1_params_formats {
> + RKISP1_PARAMS_FIXED,
> + RKISP1_PARAMS_EXTENSIBLE,
> +};
> +
> +static const struct v4l2_meta_format rkisp1_params_formats[] = {
> + [RKISP1_PARAMS_FIXED] = {
> + .dataformat = V4L2_META_FMT_RK_ISP1_PARAMS,
> + .buffersize = sizeof(struct rkisp1_params_cfg),
> + },
> + [RKISP1_PARAMS_EXTENSIBLE] = {
> + .dataformat = V4L2_META_FMT_RK_ISP1_EXT_PARAMS,
> + .buffersize = sizeof(struct rkisp1_ext_params_cfg),
> + },
> +};
> +
> static inline void
> rkisp1_param_set_bits(struct rkisp1_params *params, u32 reg, u32 bit_mask)
> {
> @@ -1738,7 +1754,7 @@ static int rkisp1_params_enum_fmt_meta_out(struct file *file, void *priv,
> if (f->index > 0 || f->type != video->queue->type)
> return -EINVAL;
>
> - f->pixelformat = params->vdev_fmt.fmt.meta.dataformat;
> + f->pixelformat = params->metafmt->dataformat;
>
> return 0;
> }
> @@ -1754,8 +1770,8 @@ static int rkisp1_params_g_fmt_meta_out(struct file *file, void *fh,
> return -EINVAL;
>
> memset(meta, 0, sizeof(*meta));
> - meta->dataformat = params->vdev_fmt.fmt.meta.dataformat;
> - meta->buffersize = params->vdev_fmt.fmt.meta.buffersize;
> + meta->dataformat = params->metafmt->dataformat;
> + meta->buffersize = params->metafmt->buffersize;
>
> return 0;
> }
> @@ -1798,13 +1814,15 @@ static int rkisp1_params_vb2_queue_setup(struct vb2_queue *vq,
> unsigned int sizes[],
> struct device *alloc_devs[])
> {
> + struct rkisp1_params *params = vq->drv_priv;
> +
> *num_buffers = clamp_t(u32, *num_buffers,
> RKISP1_ISP_PARAMS_REQ_BUFS_MIN,
> RKISP1_ISP_PARAMS_REQ_BUFS_MAX);
>
> *num_planes = 1;
>
> - sizes[0] = sizeof(struct rkisp1_params_cfg);
> + sizes[0] = params->metafmt->buffersize;
>
> return 0;
> }
> @@ -1813,8 +1831,10 @@ static int rkisp1_params_vb2_buf_init(struct vb2_buffer *vb)
> {
> struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
> struct rkisp1_params_buffer *params_buf = to_rkisp1_params_buffer(vbuf);
> + struct rkisp1_params *params = vb->vb2_queue->drv_priv;
>
> - params_buf->cfg = kvmalloc(sizeof(*params_buf->cfg), GFP_KERNEL);
> + params_buf->cfg = kvmalloc(params->metafmt->buffersize,
> + GFP_KERNEL);
> if (!params_buf->cfg)
> return -ENOMEM;
>
> @@ -1919,19 +1939,6 @@ static int rkisp1_params_init_vb2_queue(struct vb2_queue *q,
> return vb2_queue_init(q);
> }
>
> -static void rkisp1_init_params(struct rkisp1_params *params)
> -{
> - params->vdev_fmt.fmt.meta.dataformat =
> - V4L2_META_FMT_RK_ISP1_PARAMS;
> - params->vdev_fmt.fmt.meta.buffersize =
> - sizeof(struct rkisp1_params_cfg);
> -
> - if (params->rkisp1->info->isp_ver == RKISP1_V12)
> - params->ops = &rkisp1_v12_params_ops;
> - else
> - params->ops = &rkisp1_v10_params_ops;
> -}
> -
> int rkisp1_params_register(struct rkisp1_device *rkisp1)
> {
> struct rkisp1_params *params = &rkisp1->params;
> @@ -1960,7 +1967,14 @@ int rkisp1_params_register(struct rkisp1_device *rkisp1)
> vdev->device_caps = V4L2_CAP_STREAMING | V4L2_CAP_META_OUTPUT;
> vdev->vfl_dir = VFL_DIR_TX;
> rkisp1_params_init_vb2_queue(vdev->queue, params);
> - rkisp1_init_params(params);
> +
> + params->metafmt = &rkisp1_params_formats[RKISP1_PARAMS_FIXED];
> +
> + if (params->rkisp1->info->isp_ver == RKISP1_V12)
> + params->ops = &rkisp1_v12_params_ops;
> + else
> + params->ops = &rkisp1_v10_params_ops;
> +
> video_set_drvdata(vdev, params);
>
> node->pad.flags = MEDIA_PAD_FL_SOURCE;
> --
> 2.45.2
>
next prev parent reply other threads:[~2024-07-05 10:56 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-03 16:10 [PATCH v5 0/7] media: rkisp1: Implement support for extensible parameters Jacopo Mondi
2024-07-03 16:10 ` [PATCH v5 1/7] uapi: rkisp1-config: Add extensible parameters format Jacopo Mondi
2024-07-03 16:10 ` [PATCH v5 2/7] uapi: videodev2: Add V4L2_META_FMT_RK_ISP1_EXT_PARAMS Jacopo Mondi
2024-07-03 16:10 ` [PATCH v5 3/7] media: rkisp1: Add struct rkisp1_params_buffer Jacopo Mondi
2024-07-03 16:10 ` [PATCH v5 4/7] media: rkisp1: Copy the parameters buffer Jacopo Mondi
2024-07-05 10:52 ` Paul Elder
2024-07-03 16:10 ` [PATCH v5 5/7] media: rkisp1: Cache the currently active format Jacopo Mondi
2024-07-05 10:56 ` Paul Elder [this message]
2024-07-03 16:10 ` [PATCH v5 6/7] media: rkisp1: Implement extensible params support Jacopo Mondi
2024-07-03 20:56 ` Laurent Pinchart
2024-07-03 21:17 ` [PATCH v5.1 " Laurent Pinchart
2024-07-04 7:36 ` Jacopo Mondi
2024-07-04 9:40 ` Laurent Pinchart
2024-07-04 9:56 ` [PATCH v5.2 " Laurent Pinchart
2024-07-05 11:21 ` Paul Elder
2024-07-08 8:39 ` Jacopo Mondi
2024-07-06 12:18 ` [PATCH v5 " Sakari Ailus
2024-07-08 8:25 ` Jacopo Mondi
2024-07-08 9:41 ` Sakari Ailus
2024-07-03 16:10 ` [PATCH v5 7/7] media: rkisp1: Implement s_fmt/try_fmt Jacopo Mondi
2024-07-05 11:23 ` Paul Elder
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=ZofRTqbsyGKZr7OV@pyrite.rasen.tech \
--to=paul.elder@ideasonboard.com \
--cc=dafna@fastmail.com \
--cc=dan.scally@ideasonboard.com \
--cc=heiko@sntech.de \
--cc=hverkuil-cisco@xs4all.nl \
--cc=jacopo.mondi@ideasonboard.com \
--cc=kieran.bingham@ideasonboard.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=sakari.ailus@iki.fi \
--cc=stefan.klug@ideasonboard.com \
--cc=umang.jain@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