media: rockchip: rga: use pixelformat to find format

Use the pixelformat instead of the v4l2_format to find the rga_fmt. This
avoids knowing the structure and type of v4l2_format in rga_fmt_find and
simplifies the function.

Also cleanup the users of the function. In try_fmt always return the
found pixel format to make sure that the pixel format is always set.
Thus, we can be sure that we will find the rga_fmt in s_fmt and can drop
the check if a given format has been found.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
Michael Tretter 2023-10-13 13:00:29 +02:00 committed by Hans Verkuil
parent 60faf2b82b
commit 012602c560
1 changed files with 7 additions and 11 deletions

View File

@ -320,12 +320,12 @@ static struct rga_fmt formats[] = {
#define NUM_FORMATS ARRAY_SIZE(formats)
static struct rga_fmt *rga_fmt_find(struct v4l2_format *f)
static struct rga_fmt *rga_fmt_find(u32 pixelformat)
{
unsigned int i;
for (i = 0; i < NUM_FORMATS; i++) {
if (formats[i].fourcc == f->fmt.pix.pixelformat)
if (formats[i].fourcc == pixelformat)
return &formats[i];
}
return NULL;
@ -474,11 +474,11 @@ static int vidioc_try_fmt(struct file *file, void *prv, struct v4l2_format *f)
{
struct rga_fmt *fmt;
fmt = rga_fmt_find(f);
if (!fmt) {
fmt = rga_fmt_find(f->fmt.pix.pixelformat);
if (!fmt)
fmt = &formats[0];
f->fmt.pix.pixelformat = fmt->fourcc;
}
f->fmt.pix.pixelformat = fmt->fourcc;
f->fmt.pix.field = V4L2_FIELD_NONE;
@ -504,7 +504,6 @@ static int vidioc_s_fmt(struct file *file, void *prv, struct v4l2_format *f)
struct rockchip_rga *rga = ctx->rga;
struct vb2_queue *vq;
struct rga_frame *frm;
struct rga_fmt *fmt;
int ret = 0;
/* Adjust all values accordingly to the hardware capabilities
@ -521,13 +520,10 @@ static int vidioc_s_fmt(struct file *file, void *prv, struct v4l2_format *f)
frm = rga_get_frame(ctx, f->type);
if (IS_ERR(frm))
return PTR_ERR(frm);
fmt = rga_fmt_find(f);
if (!fmt)
return -EINVAL;
frm->width = f->fmt.pix.width;
frm->height = f->fmt.pix.height;
frm->size = f->fmt.pix.sizeimage;
frm->fmt = fmt;
frm->fmt = rga_fmt_find(f->fmt.pix.pixelformat);
frm->stride = f->fmt.pix.bytesperline;
frm->colorspace = f->fmt.pix.colorspace;