media: mtk-vcodec: replace func vidioc_try_fmt with two funcs for out/cap
authorDafna Hirschfeld <dafna.hirschfeld@collabora.com>
Wed, 17 Nov 2021 13:06:33 +0000 (14:06 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 30 Nov 2021 11:19:00 +0000 (12:19 +0100)
The function vidioc_try_fmt has a big 'if-else' for
the capture and output cases. There is hardly any code
outside of that condition. It is therefore better to split
that functions into two different functions, one for each case.

Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c

index 7232dc053c64da729b1b3ac74a854a71a0c73cba..435743942ad995166b8d2ad82fa50bebd32b1f0d 100644 (file)
@@ -264,87 +264,82 @@ static struct mtk_q_data *mtk_venc_get_q_data(struct mtk_vcodec_ctx *ctx,
        return &ctx->q_data[MTK_Q_DATA_DST];
 }
 
+static void vidioc_try_fmt_cap(struct v4l2_format *f)
+{
+       f->fmt.pix_mp.field = V4L2_FIELD_NONE;
+       f->fmt.pix_mp.num_planes = 1;
+       f->fmt.pix_mp.plane_fmt[0].bytesperline = 0;
+       f->fmt.pix_mp.flags = 0;
+}
+
 /* V4L2 specification suggests the driver corrects the format struct if any of
  * the dimensions is unsupported
  */
-static int vidioc_try_fmt(struct mtk_vcodec_ctx *ctx, struct v4l2_format *f,
-                         const struct mtk_video_fmt *fmt)
+static int vidioc_try_fmt_out(struct mtk_vcodec_ctx *ctx, struct v4l2_format *f,
+                             const struct mtk_video_fmt *fmt)
 {
        struct v4l2_pix_format_mplane *pix_fmt_mp = &f->fmt.pix_mp;
+       int tmp_w, tmp_h;
+       unsigned int max_width, max_height;
 
        pix_fmt_mp->field = V4L2_FIELD_NONE;
 
-       if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
-               pix_fmt_mp->num_planes = 1;
-               pix_fmt_mp->plane_fmt[0].bytesperline = 0;
-       } else if (f->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
-               int tmp_w, tmp_h;
-               unsigned int max_width, max_height;
-
-               if (ctx->dev->enc_capability & MTK_VENC_4K_CAPABILITY_ENABLE) {
-                       max_width = MTK_VENC_4K_MAX_W;
-                       max_height = MTK_VENC_4K_MAX_H;
-               } else {
-                       max_width = MTK_VENC_HD_MAX_W;
-                       max_height = MTK_VENC_HD_MAX_H;
-               }
+       if (ctx->dev->enc_capability & MTK_VENC_4K_CAPABILITY_ENABLE) {
+               max_width = MTK_VENC_4K_MAX_W;
+               max_height = MTK_VENC_4K_MAX_H;
+       } else {
+               max_width = MTK_VENC_HD_MAX_W;
+               max_height = MTK_VENC_HD_MAX_H;
+       }
 
-               pix_fmt_mp->height = clamp(pix_fmt_mp->height,
-                                       MTK_VENC_MIN_H,
-                                       max_height);
-               pix_fmt_mp->width = clamp(pix_fmt_mp->width,
-                                       MTK_VENC_MIN_W,
-                                       max_width);
+       pix_fmt_mp->height = clamp(pix_fmt_mp->height, MTK_VENC_MIN_H, max_height);
+       pix_fmt_mp->width = clamp(pix_fmt_mp->width, MTK_VENC_MIN_W, max_width);
 
-               /* find next closer width align 16, heign align 32, size align
-                * 64 rectangle
-                */
-               tmp_w = pix_fmt_mp->width;
-               tmp_h = pix_fmt_mp->height;
-               v4l_bound_align_image(&pix_fmt_mp->width,
-                                       MTK_VENC_MIN_W,
-                                       max_width, 4,
-                                       &pix_fmt_mp->height,
-                                       MTK_VENC_MIN_H,
-                                       max_height, 5, 6);
-
-               if (pix_fmt_mp->width < tmp_w &&
-                       (pix_fmt_mp->width + 16) <= max_width)
-                       pix_fmt_mp->width += 16;
-               if (pix_fmt_mp->height < tmp_h &&
-                       (pix_fmt_mp->height + 32) <= max_height)
-                       pix_fmt_mp->height += 32;
-
-               mtk_v4l2_debug(0,
-                       "before resize width=%d, height=%d, after resize width=%d, height=%d, sizeimage=%d %d",
-                       tmp_w, tmp_h, pix_fmt_mp->width,
-                       pix_fmt_mp->height,
-                       pix_fmt_mp->plane_fmt[0].sizeimage,
-                       pix_fmt_mp->plane_fmt[1].sizeimage);
-
-               pix_fmt_mp->num_planes = fmt->num_planes;
-               pix_fmt_mp->plane_fmt[0].sizeimage =
-                               pix_fmt_mp->width * pix_fmt_mp->height +
-                               ((ALIGN(pix_fmt_mp->width, 16) * 2) * 16);
-               pix_fmt_mp->plane_fmt[0].bytesperline = pix_fmt_mp->width;
-
-               if (pix_fmt_mp->num_planes == 2) {
-                       pix_fmt_mp->plane_fmt[1].sizeimage =
-                               (pix_fmt_mp->width * pix_fmt_mp->height) / 2 +
-                               (ALIGN(pix_fmt_mp->width, 16) * 16);
-                       pix_fmt_mp->plane_fmt[2].sizeimage = 0;
-                       pix_fmt_mp->plane_fmt[1].bytesperline =
-                                                       pix_fmt_mp->width;
-                       pix_fmt_mp->plane_fmt[2].bytesperline = 0;
-               } else if (pix_fmt_mp->num_planes == 3) {
-                       pix_fmt_mp->plane_fmt[1].sizeimage =
-                       pix_fmt_mp->plane_fmt[2].sizeimage =
-                               (pix_fmt_mp->width * pix_fmt_mp->height) / 4 +
-                               ((ALIGN(pix_fmt_mp->width, 16) / 2) * 16);
-                       pix_fmt_mp->plane_fmt[1].bytesperline =
-                               pix_fmt_mp->plane_fmt[2].bytesperline =
-                               pix_fmt_mp->width / 2;
-               }
+       /* find next closer width align 16, heign align 32, size align
+        * 64 rectangle
+        */
+       tmp_w = pix_fmt_mp->width;
+       tmp_h = pix_fmt_mp->height;
+       v4l_bound_align_image(&pix_fmt_mp->width,
+                             MTK_VENC_MIN_W,
+                             max_width, 4,
+                             &pix_fmt_mp->height,
+                             MTK_VENC_MIN_H,
+                             max_height, 5, 6);
+
+       if (pix_fmt_mp->width < tmp_w && (pix_fmt_mp->width + 16) <= max_width)
+               pix_fmt_mp->width += 16;
+       if (pix_fmt_mp->height < tmp_h && (pix_fmt_mp->height + 32) <= max_height)
+               pix_fmt_mp->height += 32;
+
+       mtk_v4l2_debug(0, "before resize w=%d, h=%d, after resize w=%d, h=%d, sizeimage=%d %d",
+                      tmp_w, tmp_h, pix_fmt_mp->width,
+                      pix_fmt_mp->height,
+                      pix_fmt_mp->plane_fmt[0].sizeimage,
+                      pix_fmt_mp->plane_fmt[1].sizeimage);
+
+       pix_fmt_mp->num_planes = fmt->num_planes;
+       pix_fmt_mp->plane_fmt[0].sizeimage =
+                       pix_fmt_mp->width * pix_fmt_mp->height +
+                       ((ALIGN(pix_fmt_mp->width, 16) * 2) * 16);
+       pix_fmt_mp->plane_fmt[0].bytesperline = pix_fmt_mp->width;
+
+       if (pix_fmt_mp->num_planes == 2) {
+               pix_fmt_mp->plane_fmt[1].sizeimage =
+                       (pix_fmt_mp->width * pix_fmt_mp->height) / 2 +
+                       (ALIGN(pix_fmt_mp->width, 16) * 16);
+               pix_fmt_mp->plane_fmt[2].sizeimage = 0;
+               pix_fmt_mp->plane_fmt[1].bytesperline =
+                                               pix_fmt_mp->width;
+               pix_fmt_mp->plane_fmt[2].bytesperline = 0;
+       } else if (pix_fmt_mp->num_planes == 3) {
+               pix_fmt_mp->plane_fmt[1].sizeimage =
+               pix_fmt_mp->plane_fmt[2].sizeimage =
+                       (pix_fmt_mp->width * pix_fmt_mp->height) / 4 +
+                       ((ALIGN(pix_fmt_mp->width, 16) / 2) * 16);
+               pix_fmt_mp->plane_fmt[1].bytesperline =
+                       pix_fmt_mp->plane_fmt[2].bytesperline =
+                       pix_fmt_mp->width / 2;
        }
 
        pix_fmt_mp->flags = 0;
@@ -433,9 +428,7 @@ static int vidioc_venc_s_fmt_cap(struct file *file, void *priv,
        }
 
        q_data->fmt = fmt;
-       ret = vidioc_try_fmt(ctx, f, q_data->fmt);
-       if (ret)
-               return ret;
+       vidioc_try_fmt_cap(f);
 
        q_data->coded_width = f->fmt.pix_mp.width;
        q_data->coded_height = f->fmt.pix_mp.height;
@@ -495,7 +488,7 @@ static int vidioc_venc_s_fmt_out(struct file *file, void *priv,
                f->fmt.pix.pixelformat = fmt->fourcc;
        }
 
-       ret = vidioc_try_fmt(ctx, f, fmt);
+       ret = vidioc_try_fmt_out(ctx, f, fmt);
        if (ret)
                return ret;
 
@@ -573,7 +566,9 @@ static int vidioc_try_fmt_vid_cap_mplane(struct file *file, void *priv,
        f->fmt.pix_mp.quantization = ctx->quantization;
        f->fmt.pix_mp.xfer_func = ctx->xfer_func;
 
-       return vidioc_try_fmt(ctx, f, fmt);
+       vidioc_try_fmt_cap(f);
+
+       return 0;
 }
 
 static int vidioc_try_fmt_vid_out_mplane(struct file *file, void *priv,
@@ -595,7 +590,7 @@ static int vidioc_try_fmt_vid_out_mplane(struct file *file, void *priv,
                f->fmt.pix_mp.xfer_func = V4L2_XFER_FUNC_DEFAULT;
        }
 
-       return vidioc_try_fmt(ctx, f, fmt);
+       return vidioc_try_fmt_out(ctx, f, fmt);
 }
 
 static int vidioc_venc_g_selection(struct file *file, void *priv,