Commit 9530bbe7 authored by Boris Brezillon's avatar Boris Brezillon Committed by Mauro Carvalho Chehab
Browse files

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: default avatarBoris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: default avatarEzequiel Garcia <ezequiel@collabora.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent c3c3509b
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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;
};
+8 −20
Original line number Diff line number Diff line
@@ -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);
		}

		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;