pix_mp->num_planes = 1;
        pix_mp->field = V4L2_FIELD_NONE;
-       pix_mp->width = clamp(pix_mp->width,
-                             fmt->frmsize.min_width,
-                             fmt->frmsize.max_width);
-       pix_mp->height = clamp(pix_mp->height,
-                              fmt->frmsize.min_height,
-                              fmt->frmsize.max_height);
-       /* Round up to macroblocks. */
-       pix_mp->width = round_up(pix_mp->width, fmt->frmsize.step_width);
-       pix_mp->height = round_up(pix_mp->height, fmt->frmsize.step_height);
+
+       v4l2_apply_frmsize_constraints(&pix_mp->width, &pix_mp->height,
+                                      &fmt->frmsize);
 
        /*
         * For compressed formats the application can specify
        struct rockchip_vpu_ctx *ctx = fh_to_ctx(priv);
        struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp;
        const struct rockchip_vpu_fmt *fmt;
-       unsigned int width, height;
        int i;
 
        vpu_debug(4, "%c%c%c%c\n",
        }
 
        pix_mp->field = V4L2_FIELD_NONE;
-       width = clamp(pix_mp->width,
-                     ctx->vpu_dst_fmt->frmsize.min_width,
-                     ctx->vpu_dst_fmt->frmsize.max_width);
-       height = clamp(pix_mp->height,
-                      ctx->vpu_dst_fmt->frmsize.min_height,
-                      ctx->vpu_dst_fmt->frmsize.max_height);
-       /* Round up to macroblocks. */
-       width = round_up(width, ctx->vpu_dst_fmt->frmsize.step_width);
-       height = round_up(height, ctx->vpu_dst_fmt->frmsize.step_height);
+
+       v4l2_apply_frmsize_constraints(&pix_mp->width, &pix_mp->height,
+                                      &ctx->vpu_dst_fmt->frmsize);
 
        /* Fill remaining fields */
-       v4l2_fill_pixfmt_mp(pix_mp, fmt->fourcc, width, height);
+       v4l2_fill_pixfmt_mp(pix_mp, fmt->fourcc, pix_mp->width,
+                           pix_mp->height);
 
        for (i = 0; i < pix_mp->num_planes; i++) {
                memset(pix_mp->plane_fmt[i].reserved, 0,
        memset(fmt, 0, sizeof(*fmt));
 
        fmt->num_planes = 1;
-       fmt->width = clamp(fmt->width, ctx->vpu_dst_fmt->frmsize.min_width,
-                          ctx->vpu_dst_fmt->frmsize.max_width);
-       fmt->height = clamp(fmt->height, ctx->vpu_dst_fmt->frmsize.min_height,
-                           ctx->vpu_dst_fmt->frmsize.max_height);
+       v4l2_apply_frmsize_constraints(&fmt->width, &fmt->height,
+                                      &ctx->vpu_dst_fmt->frmsize);
        fmt->pixelformat = ctx->vpu_dst_fmt->fourcc;
        fmt->field = V4L2_FIELD_NONE;
        fmt->colorspace = V4L2_COLORSPACE_JPEG,
                                    struct rockchip_vpu_ctx *ctx)
 {
        struct v4l2_pix_format_mplane *fmt = &ctx->src_fmt;
-       unsigned int width, height;
 
        ctx->vpu_src_fmt = rockchip_vpu_get_default_fmt(ctx, false);
 
        memset(fmt, 0, sizeof(*fmt));
 
-       width = clamp(fmt->width, ctx->vpu_dst_fmt->frmsize.min_width,
-                     ctx->vpu_dst_fmt->frmsize.max_width);
-       height = clamp(fmt->height, ctx->vpu_dst_fmt->frmsize.min_height,
-                      ctx->vpu_dst_fmt->frmsize.max_height);
+       v4l2_apply_frmsize_constraints(&fmt->width, &fmt->height,
+                                      &ctx->vpu_src_fmt->frmsize);
        fmt->field = V4L2_FIELD_NONE;
        fmt->colorspace = V4L2_COLORSPACE_JPEG,
        fmt->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
        fmt->quantization = V4L2_QUANTIZATION_DEFAULT;
        fmt->xfer_func = V4L2_XFER_FUNC_DEFAULT;
 
-       v4l2_fill_pixfmt_mp(fmt, ctx->vpu_src_fmt->fourcc, width, height);
+       v4l2_fill_pixfmt_mp(fmt, ctx->vpu_src_fmt->fourcc, fmt->width,
+                           fmt->height);
 }
 
 static int