On Wed, Nov 17, 2021 at 10:07 PM Dafna Hirschfeld <dafna.hirschfeld@xxxxxxxxxxxxx> wrote: > > 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@xxxxxxxxxxxxx> Makes much more sense that way, thanks! Reviewed-by: Alexandre Courbot <acourbot@xxxxxxxxxxxx> > --- > .../platform/mtk-vcodec/mtk_vcodec_enc.c | 149 +++++++++--------- > 1 file changed, 72 insertions(+), 77 deletions(-) > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > index fb3cf804c96a..be28f2401839 100644 > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > @@ -263,87 +263,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; > @@ -432,9 +427,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; > @@ -494,7 +487,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; > > @@ -572,7 +565,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, > @@ -594,7 +589,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, > -- > 2.17.1 >