From 48fc0fe3e954b1f7376c3a1550c35e318878f1c2 Mon Sep 17 00:00:00 2001 From: Govindaraj Rajagopal Date: Mon, 3 Feb 2020 16:13:39 +0530 Subject: [PATCH] msm: vidc: update menu_skip_mask for menu type controls Need to pass menu_skip_mask instead of step_size to v4l2_ctrl_modify_range for menu type controls. Otherwise step_size will override skip mask. Mostly step size value is 1. So any menu_item with ctrl.val == 1, will not be allowed at runtime. Change-Id: If33f340a6e85335f80e3cf0a0b13266263e318ed Signed-off-by: Govindaraj Rajagopal --- msm/vidc/msm_vidc_common.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/msm/vidc/msm_vidc_common.c b/msm/vidc/msm_vidc_common.c index 13b3f30b3605..51437beaf1d9 100644 --- a/msm/vidc/msm_vidc_common.c +++ b/msm/vidc/msm_vidc_common.c @@ -1337,6 +1337,7 @@ static int msm_vidc_comm_update_ctrl(struct msm_vidc_inst *inst, { struct v4l2_ctrl *ctrl = NULL; int rc = 0; + bool is_menu = false; ctrl = v4l2_ctrl_find(&inst->ctrl_handler, id); if (!ctrl) { @@ -1345,33 +1346,32 @@ static int msm_vidc_comm_update_ctrl(struct msm_vidc_inst *inst, return -EINVAL; } - /* For menu type, keep original menu_skip_mask(step) */ if (ctrl->type == V4L2_CTRL_TYPE_MENU) - cap->step_size = (u32)ctrl->step; + is_menu = true; + /** + * For menu controls the step value is interpreted + * as a menu_skip_mask. + */ rc = v4l2_ctrl_modify_range(ctrl, cap->min, cap->max, - cap->step_size, cap->default_value); + is_menu ? ctrl->menu_skip_mask : cap->step_size, + cap->default_value); if (rc) { s_vpr_e(inst->sid, - "%s: failed: control name %s, min %d, max %d, step %d, default_value %d\n", + "%s: failed: control name %s, min %d, max %d, %s %x, default_value %d\n", __func__, ctrl->name, cap->min, cap->max, - cap->step_size, cap->default_value); - goto error; - } - /* - * v4l2_ctrl_modify_range() is not updating default_value, - * so use v4l2_ctrl_s_ctrl() to update it. - */ - rc = v4l2_ctrl_s_ctrl(ctrl, cap->default_value); - if (rc) { - s_vpr_e(inst->sid, "%s: failed s_ctrl: %s with value %d\n", - __func__, ctrl->name, cap->default_value); + is_menu ? "menu_skip_mask" : "step", + is_menu ? ctrl->menu_skip_mask : cap->step_size, + cap->default_value); goto error; } + s_vpr_h(inst->sid, - "Updated control: %s: min %lld, max %lld, step %lld, default value = %lld\n", + "Updated control: %s: min %lld, max %lld, %s %x, default value = %lld\n", ctrl->name, ctrl->minimum, ctrl->maximum, - ctrl->step, ctrl->default_value); + is_menu ? "menu_skip_mask" : "step", + is_menu ? ctrl->menu_skip_mask : ctrl->step, + ctrl->default_value); error: return rc;