]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: rkvdec: Do not require all controls to be present in every request
authorDaniel Almeida <daniel.almeida@collabora.com>
Tue, 23 Mar 2021 18:57:09 +0000 (19:57 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 May 2021 08:49:55 +0000 (10:49 +0200)
[ Upstream commit 54676d5f5630b79f7b00c7c43882a58c1815aaf9 ]

According to the v4l2 api, it is allowed to skip
setting a control if its contents haven't changed for performance
reasons: userspace should only update the controls that changed from
last frame rather then updating them all. Still some ancient code
that checks for mandatory controls has been left in this driver.

Remove it.

Fixes: cd33c830448b ("media: rkvdec: Add the rkvdec driver")
Signed-off-by: Daniel Almeida <daniel.almeida@collabora.com>
Reviewed-by: Ezequiel Garcia <ezequiel@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/staging/media/rkvdec/rkvdec.c
drivers/staging/media/rkvdec/rkvdec.h

index aa4f8c2876186b5efb2b92260e4b08b693339035..b1507f29fcc56ff3640578bc067a5bc2662c81b7 100644 (file)
@@ -55,16 +55,13 @@ static const struct v4l2_ctrl_ops rkvdec_ctrl_ops = {
 
 static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
        {
-               .mandatory = true,
                .cfg.id = V4L2_CID_STATELESS_H264_DECODE_PARAMS,
        },
        {
-               .mandatory = true,
                .cfg.id = V4L2_CID_STATELESS_H264_SPS,
                .cfg.ops = &rkvdec_ctrl_ops,
        },
        {
-               .mandatory = true,
                .cfg.id = V4L2_CID_STATELESS_H264_PPS,
        },
        {
@@ -585,25 +582,7 @@ static const struct vb2_ops rkvdec_queue_ops = {
 
 static int rkvdec_request_validate(struct media_request *req)
 {
-       struct media_request_object *obj;
-       const struct rkvdec_ctrls *ctrls;
-       struct v4l2_ctrl_handler *hdl;
-       struct rkvdec_ctx *ctx = NULL;
-       unsigned int count, i;
-       int ret;
-
-       list_for_each_entry(obj, &req->objects, list) {
-               if (vb2_request_object_is_buffer(obj)) {
-                       struct vb2_buffer *vb;
-
-                       vb = container_of(obj, struct vb2_buffer, req_obj);
-                       ctx = vb2_get_drv_priv(vb->vb2_queue);
-                       break;
-               }
-       }
-
-       if (!ctx)
-               return -EINVAL;
+       unsigned int count;
 
        count = vb2_request_buffer_cnt(req);
        if (!count)
@@ -611,31 +590,6 @@ static int rkvdec_request_validate(struct media_request *req)
        else if (count > 1)
                return -EINVAL;
 
-       hdl = v4l2_ctrl_request_hdl_find(req, &ctx->ctrl_hdl);
-       if (!hdl)
-               return -ENOENT;
-
-       ret = 0;
-       ctrls = ctx->coded_fmt_desc->ctrls;
-       for (i = 0; ctrls && i < ctrls->num_ctrls; i++) {
-               u32 id = ctrls->ctrls[i].cfg.id;
-               struct v4l2_ctrl *ctrl;
-
-               if (!ctrls->ctrls[i].mandatory)
-                       continue;
-
-               ctrl = v4l2_ctrl_request_hdl_ctrl_find(hdl, id);
-               if (!ctrl) {
-                       ret = -ENOENT;
-                       break;
-               }
-       }
-
-       v4l2_ctrl_request_hdl_put(hdl);
-
-       if (ret)
-               return ret;
-
        return vb2_request_validate(req);
 }
 
index 77a137cca88ea0378e38fa335ded52a55cb713e7..52ac3874c5e54f51467f3024088e18730992c161 100644 (file)
@@ -25,7 +25,6 @@
 struct rkvdec_ctx;
 
 struct rkvdec_ctrl_desc {
-       u32 mandatory : 1;
        struct v4l2_ctrl_config cfg;
 };