Commit 8ec0b7b0 authored by Stanimir Varbanov's avatar Stanimir Varbanov Committed by Mauro Carvalho Chehab

media: venus: vdec: Add support for display delay and delay enable controls

Add support for display delay and display delay enable std controls.
With this we implement decoder decode output order (decode vs display).
Once firmware implement few new features the controls will be used
for other use-cases.
Signed-off-by: default avatarStanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 9f3d1056
...@@ -172,6 +172,8 @@ struct vdec_controls { ...@@ -172,6 +172,8 @@ struct vdec_controls {
u32 post_loop_deb_mode; u32 post_loop_deb_mode;
u32 profile; u32 profile;
u32 level; u32 level;
u32 display_delay;
u32 display_delay_enable;
}; };
struct venc_controls { struct venc_controls {
......
...@@ -620,7 +620,7 @@ static int vdec_set_properties(struct venus_inst *inst) ...@@ -620,7 +620,7 @@ static int vdec_set_properties(struct venus_inst *inst)
{ {
struct vdec_controls *ctr = &inst->controls.dec; struct vdec_controls *ctr = &inst->controls.dec;
struct hfi_enable en = { .enable = 1 }; struct hfi_enable en = { .enable = 1 };
u32 ptype; u32 ptype, decode_order;
int ret; int ret;
if (ctr->post_loop_deb_mode) { if (ctr->post_loop_deb_mode) {
...@@ -630,6 +630,14 @@ static int vdec_set_properties(struct venus_inst *inst) ...@@ -630,6 +630,14 @@ static int vdec_set_properties(struct venus_inst *inst)
return ret; return ret;
} }
if (ctr->display_delay_enable && ctr->display_delay == 0) {
ptype = HFI_PROPERTY_PARAM_VDEC_OUTPUT_ORDER;
decode_order = HFI_OUTPUT_ORDER_DECODE;
ret = hfi_session_set_property(inst, ptype, &decode_order);
if (ret)
return ret;
}
return 0; return 0;
} }
......
...@@ -30,6 +30,12 @@ static int vdec_op_s_ctrl(struct v4l2_ctrl *ctrl) ...@@ -30,6 +30,12 @@ static int vdec_op_s_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL: case V4L2_CID_MPEG_VIDEO_VP9_LEVEL:
ctr->level = ctrl->val; ctr->level = ctrl->val;
break; break;
case V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY:
ctr->display_delay = ctrl->val;
break;
case V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE:
ctr->display_delay_enable = ctrl->val;
break;
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -89,7 +95,7 @@ int vdec_ctrl_init(struct venus_inst *inst) ...@@ -89,7 +95,7 @@ int vdec_ctrl_init(struct venus_inst *inst)
struct v4l2_ctrl *ctrl; struct v4l2_ctrl *ctrl;
int ret; int ret;
ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 9); ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 11);
if (ret) if (ret)
return ret; return ret;
...@@ -158,6 +164,14 @@ int vdec_ctrl_init(struct venus_inst *inst) ...@@ -158,6 +164,14 @@ int vdec_ctrl_init(struct venus_inst *inst)
if (ctrl) if (ctrl)
ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE; ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
v4l2_ctrl_new_std(&inst->ctrl_handler, &vdec_ctrl_ops,
V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY,
0, 16383, 1, 0);
v4l2_ctrl_new_std(&inst->ctrl_handler, &vdec_ctrl_ops,
V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE,
0, 1, 1, 0);
ret = inst->ctrl_handler.error; ret = inst->ctrl_handler.error;
if (ret) { if (ret) {
v4l2_ctrl_handler_free(&inst->ctrl_handler); v4l2_ctrl_handler_free(&inst->ctrl_handler);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment