]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: verisilicon: Do not use ctx fields as format storage when resetting
authorBenjamin Gaignard <benjamin.gaignard@collabora.com>
Mon, 20 Feb 2023 10:48:45 +0000 (10:48 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 10 Apr 2023 13:16:31 +0000 (14:16 +0100)
Source and destination pixel formats fields of context structure should
not be used as storage when resetting the format.
Use local variables instead and let hantro_set_fmt_out() and
hantro_set_fmt_cap() set them correctly later.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Reviewed-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/verisilicon/hantro_v4l2.c

index d8aa42bd4cd4f95b5079d450e1ef0aa58a34cf7b..d94c99f875c8946f45774b93d20529d99ac3094a 100644 (file)
@@ -378,47 +378,43 @@ static void
 hantro_reset_encoded_fmt(struct hantro_ctx *ctx)
 {
        const struct hantro_fmt *vpu_fmt;
-       struct v4l2_pix_format_mplane *fmt;
+       struct v4l2_pix_format_mplane fmt;
 
        vpu_fmt = hantro_get_default_fmt(ctx, true);
+       if (!vpu_fmt)
+               return;
 
+       hantro_reset_fmt(&fmt, vpu_fmt);
+       fmt.width = vpu_fmt->frmsize.min_width;
+       fmt.height = vpu_fmt->frmsize.min_height;
        if (ctx->is_encoder)
-               fmt = &ctx->dst_fmt;
-       else
-               fmt = &ctx->src_fmt;
-
-       hantro_reset_fmt(fmt, vpu_fmt);
-       fmt->width = vpu_fmt->frmsize.min_width;
-       fmt->height = vpu_fmt->frmsize.min_height;
-       if (ctx->is_encoder)
-               hantro_set_fmt_cap(ctx, fmt);
+               hantro_set_fmt_cap(ctx, &fmt);
        else
-               hantro_set_fmt_out(ctx, fmt);
+               hantro_set_fmt_out(ctx, &fmt);
 }
 
 static void
 hantro_reset_raw_fmt(struct hantro_ctx *ctx)
 {
        const struct hantro_fmt *raw_vpu_fmt;
-       struct v4l2_pix_format_mplane *raw_fmt, *encoded_fmt;
+       struct v4l2_pix_format_mplane raw_fmt, *encoded_fmt;
 
        raw_vpu_fmt = hantro_get_default_fmt(ctx, false);
+       if (!raw_vpu_fmt)
+               return;
 
-       if (ctx->is_encoder) {
-               raw_fmt = &ctx->src_fmt;
+       if (ctx->is_encoder)
                encoded_fmt = &ctx->dst_fmt;
-       } else {
-               raw_fmt = &ctx->dst_fmt;
+       else
                encoded_fmt = &ctx->src_fmt;
-       }
 
-       hantro_reset_fmt(raw_fmt, raw_vpu_fmt);
-       raw_fmt->width = encoded_fmt->width;
-       raw_fmt->height = encoded_fmt->height;
+       hantro_reset_fmt(&raw_fmt, raw_vpu_fmt);
+       raw_fmt.width = encoded_fmt->width;
+       raw_fmt.height = encoded_fmt->height;
        if (ctx->is_encoder)
-               hantro_set_fmt_out(ctx, raw_fmt);
+               hantro_set_fmt_out(ctx, &raw_fmt);
        else
-               hantro_set_fmt_cap(ctx, raw_fmt);
+               hantro_set_fmt_cap(ctx, &raw_fmt);
 }
 
 void hantro_reset_fmts(struct hantro_ctx *ctx)