From: Jonas Karlman <jonas@kwiboo.se>
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
Cc: Alex Bee <knaerzche@gmail.com>,
Nicolas Dufresne <nicolas.dufresne@collabora.com>,
Benjamin Gaignard <benjamin.gaignard@collabora.com>,
Sebastian Fricke <sebastian.fricke@collabora.com>,
Christopher Obbard <chris.obbard@collabora.com>,
linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
Jonas Karlman <jonas@kwiboo.se>
Subject: [PATCH v3 08/10] media: rkvdec: Prepare for adding format validation ops
Date: Sun, 29 Oct 2023 18:34:15 +0000 [thread overview]
Message-ID: <20231029183427.1781554-9-jonas@kwiboo.se> (raw)
In-Reply-To: <20231029183427.1781554-1-jonas@kwiboo.se>
Add a rkvdec_valid_fmt() helper that check if a pixelformat is a valid
CAPTURE format, and a rkvdec_decoded_fmts() helper for enumerating valid
formats.
Use these new helpers in preparation for adding format validation ops in
an upcoming patch.
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
---
v3:
- New patch
drivers/staging/media/rkvdec/rkvdec.c | 47 +++++++++++++++++++--------
1 file changed, 33 insertions(+), 14 deletions(-)
diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
index 10752a517971..bd3568928060 100644
--- a/drivers/staging/media/rkvdec/rkvdec.c
+++ b/drivers/staging/media/rkvdec/rkvdec.c
@@ -27,6 +27,19 @@
#include "rkvdec.h"
#include "rkvdec-regs.h"
+static u32 rkvdec_decoded_fmts(struct rkvdec_ctx *ctx, int index)
+{
+ const struct rkvdec_coded_fmt_desc *desc = ctx->coded_fmt_desc;
+
+ if (WARN_ON(!desc))
+ return 0;
+
+ if (index >= desc->num_decoded_fmts)
+ return 0;
+
+ return desc->decoded_fmts[index];
+}
+
static void rkvdec_fill_decoded_pixfmt(struct rkvdec_ctx *ctx,
struct v4l2_pix_format_mplane *pix_mp)
{
@@ -54,7 +67,7 @@ static void rkvdec_reset_decoded_fmt(struct rkvdec_ctx *ctx)
{
struct v4l2_format *f = &ctx->decoded_fmt;
- rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->decoded_fmts[0]);
+ rkvdec_reset_fmt(ctx, f, rkvdec_decoded_fmts(ctx, 0));
f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
f->fmt.pix_mp.width = ctx->coded_fmt.fmt.pix_mp.width;
f->fmt.pix_mp.height = ctx->coded_fmt.fmt.pix_mp.height;
@@ -239,13 +252,25 @@ static int rkvdec_querycap(struct file *file, void *priv,
return 0;
}
+static bool rkvdec_valid_fmt(struct rkvdec_ctx *ctx, u32 fourcc)
+{
+ const struct rkvdec_coded_fmt_desc *desc = ctx->coded_fmt_desc;
+ unsigned int i;
+
+ for (i = 0; i < desc->num_decoded_fmts; i++) {
+ if (desc->decoded_fmts[i] == fourcc)
+ return true;
+ }
+
+ return false;
+}
+
static int rkvdec_try_capture_fmt(struct file *file, void *priv,
struct v4l2_format *f)
{
struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp;
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
const struct rkvdec_coded_fmt_desc *coded_desc;
- unsigned int i;
/*
* The codec context should point to a coded format desc, if the format
@@ -256,13 +281,8 @@ static int rkvdec_try_capture_fmt(struct file *file, void *priv,
if (WARN_ON(!coded_desc))
return -EINVAL;
- for (i = 0; i < coded_desc->num_decoded_fmts; i++) {
- if (coded_desc->decoded_fmts[i] == pix_mp->pixelformat)
- break;
- }
-
- if (i == coded_desc->num_decoded_fmts)
- pix_mp->pixelformat = coded_desc->decoded_fmts[0];
+ if (!rkvdec_valid_fmt(ctx, pix_mp->pixelformat))
+ pix_mp->pixelformat = rkvdec_decoded_fmts(ctx, 0);
/* Always apply the frmsize constraint of the coded end. */
pix_mp->width = max(pix_mp->width, ctx->coded_fmt.fmt.pix_mp.width);
@@ -425,14 +445,13 @@ static int rkvdec_enum_capture_fmt(struct file *file, void *priv,
struct v4l2_fmtdesc *f)
{
struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv);
+ u32 fourcc;
- if (WARN_ON(!ctx->coded_fmt_desc))
- return -EINVAL;
-
- if (f->index >= ctx->coded_fmt_desc->num_decoded_fmts)
+ fourcc = rkvdec_decoded_fmts(ctx, f->index);
+ if (!fourcc)
return -EINVAL;
- f->pixelformat = ctx->coded_fmt_desc->decoded_fmts[f->index];
+ f->pixelformat = fourcc;
return 0;
}
--
2.42.0
next prev parent reply other threads:[~2023-10-29 18:35 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-29 18:34 [PATCH v3 00/10] media: rkvdec: Add H.264 High 10 and 4:2:2 profile support Jonas Karlman
2023-10-29 18:34 ` [PATCH v3 01/10] media: v4l2-common: Add helpers to calculate bytesperline and sizeimage Jonas Karlman
2023-10-29 18:34 ` [PATCH v3 02/10] media: v4l2: Add NV15 and NV20 pixel formats Jonas Karlman
2023-10-29 18:34 ` [PATCH v3 03/10] media: rkvdec: h264: Use bytesperline and buffer height as virstride Jonas Karlman
2023-10-29 18:34 ` [PATCH v3 04/10] media: rkvdec: h264: Don't hardcode SPS/PPS parameters Jonas Karlman
2023-10-29 18:34 ` [PATCH v3 05/10] media: rkvdec: h264: Remove SPS validation at streaming start Jonas Karlman
2023-10-29 18:34 ` [PATCH v3 06/10] media: rkvdec: Extract rkvdec_fill_decoded_pixfmt helper method Jonas Karlman
2023-10-29 18:34 ` [PATCH v3 07/10] media: rkvdec: Move rkvdec_reset_decoded_fmt() function Jonas Karlman
2023-10-29 18:34 ` Jonas Karlman [this message]
2023-10-29 18:34 ` [PATCH v3 09/10] media: rkvdec: Add get_fmt_opaque and valid_fmt ops Jonas Karlman
2023-10-29 18:34 ` [PATCH v3 10/10] media: rkvdec: h264: Support High 10 and 4:2:2 profiles Jonas Karlman
2023-12-22 14:15 ` [PATCH v3 00/10] media: rkvdec: Add H.264 High 10 and 4:2:2 profile support Christopher Obbard
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=20231029183427.1781554-9-jonas@kwiboo.se \
--to=jonas@kwiboo.se \
--cc=benjamin.gaignard@collabora.com \
--cc=chris.obbard@collabora.com \
--cc=ezequiel@vanguardiasur.com.ar \
--cc=gregkh@linuxfoundation.org \
--cc=knaerzche@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-staging@lists.linux.dev \
--cc=mchehab@kernel.org \
--cc=nicolas.dufresne@collabora.com \
--cc=sebastian.fricke@collabora.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