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 <grajagop@codeaurora.org>
This commit is contained in:
Govindaraj Rajagopal 2020-02-03 16:13:39 +05:30
commit 48fc0fe3e9

View file

@ -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;