media: hantro: Simplify the controls creation logic

v4l2_ctrl_new_custom() should work for any kind of control, including
standard ones. With that change, we automatically get support for
menu controls.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
Boris Brezillon 2019-07-25 10:17:51 -04:00 committed by Mauro Carvalho Chehab
parent c3c3509b86
commit 9530bbe726
2 changed files with 8 additions and 22 deletions

View File

@ -113,12 +113,10 @@ enum hantro_codec_mode {
/*
* struct hantro_ctrl - helper type to declare supported controls
* @id: V4L2 control ID (V4L2_CID_xxx)
* @codec: codec id this control belong to (HANTRO_JPEG_ENCODER, etc.)
* @cfg: control configuration
*/
struct hantro_ctrl {
unsigned int id;
unsigned int codec;
struct v4l2_ctrl_config cfg;
};

View File

@ -264,31 +264,29 @@ static const struct v4l2_ctrl_ops hantro_ctrl_ops = {
static struct hantro_ctrl controls[] = {
{
.id = V4L2_CID_JPEG_COMPRESSION_QUALITY,
.codec = HANTRO_JPEG_ENCODER,
.cfg = {
.id = V4L2_CID_JPEG_COMPRESSION_QUALITY,
.min = 5,
.max = 100,
.step = 1,
.def = 50,
.ops = &hantro_ctrl_ops,
},
}, {
.id = V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS,
.codec = HANTRO_MPEG2_DECODER,
.cfg = {
.elem_size = sizeof(struct v4l2_ctrl_mpeg2_slice_params),
.id = V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS,
},
}, {
.id = V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION,
.codec = HANTRO_MPEG2_DECODER,
.cfg = {
.elem_size = sizeof(struct v4l2_ctrl_mpeg2_quantization),
.id = V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION,
},
}, {
.id = V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER,
.codec = HANTRO_VP8_DECODER,
.cfg = {
.elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header),
.id = V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER,
},
},
};
@ -304,22 +302,12 @@ static int hantro_ctrls_setup(struct hantro_dev *vpu,
for (i = 0; i < num_ctrls; i++) {
if (!(allowed_codecs & controls[i].codec))
continue;
if (!controls[i].cfg.elem_size) {
v4l2_ctrl_new_std(&ctx->ctrl_handler,
&hantro_ctrl_ops,
controls[i].id, controls[i].cfg.min,
controls[i].cfg.max,
controls[i].cfg.step,
controls[i].cfg.def);
} else {
controls[i].cfg.id = controls[i].id;
v4l2_ctrl_new_custom(&ctx->ctrl_handler,
&controls[i].cfg, NULL);
}
v4l2_ctrl_new_custom(&ctx->ctrl_handler,
&controls[i].cfg, NULL);
if (ctx->ctrl_handler.error) {
vpu_err("Adding control (%d) failed %d\n",
controls[i].id,
controls[i].cfg.id,
ctx->ctrl_handler.error);
v4l2_ctrl_handler_free(&ctx->ctrl_handler);
return ctx->ctrl_handler.error;