msm: vidc: Update QP control values

Update QP Control value and sanitise QP values for
Initial QP properly.

Change-Id: I870a4f33a0dfbfd3a95970bb9cf319855fba746f
CRs-Fixed: 2027340
Signed-off-by: Deepak Kushwah <dkushwah@codeaurora.org>
This commit is contained in:
Deepak Kushwah 2017-03-30 18:56:03 +05:30 committed by Gerrit - the friendly Code Review server
parent 4901c7fce4
commit aee6a2cd41

View file

@ -3511,6 +3511,48 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
frameqp = ctrl->val;
pdata = &frameqp;
break;
case V4L2_CID_MPEG_VIDC_VIDEO_INITIAL_I_FRAME_QP:
{
rc = msm_venc_validate_qp_value(inst, ctrl);
if (rc) {
dprintk(VIDC_ERR, "Invalid Initial I QP\n");
break;
}
/*
* Defer sending property from here, set_ext_ctrl
* will send it based on the rc value.
*/
property_id = 0;
break;
}
case V4L2_CID_MPEG_VIDC_VIDEO_INITIAL_B_FRAME_QP:
{
rc = msm_venc_validate_qp_value(inst, ctrl);
if (rc) {
dprintk(VIDC_ERR, "Invalid Initial B QP\n");
break;
}
/*
* Defer sending property from here, set_ext_ctrl
* will send it based on the rc value.
*/
property_id = 0;
break;
}
case V4L2_CID_MPEG_VIDC_VIDEO_INITIAL_P_FRAME_QP:
{
rc = msm_venc_validate_qp_value(inst, ctrl);
if (rc) {
dprintk(VIDC_ERR, "Invalid Initial P QP\n");
break;
}
/*
* Defer sending property from here, set_ext_ctrl
* will send it based on the rc value.
*/
property_id = 0;
break;
}
case V4L2_CID_MPEG_VIDC_VIDEO_VQZIP_SEI:
property_id = HAL_PARAM_VENC_VQZIP_SEI;
enable.enable = ctrl->val;
@ -3745,7 +3787,7 @@ static int try_set_ext_ctrl(struct msm_vidc_inst *inst,
struct hal_aspect_ratio sar;
struct hal_bitrate bitrate;
struct hal_frame_size blur_res;
struct v4l2_ctrl *temp_ctrl;
struct v4l2_control temp_ctrl;
if (!inst || !inst->core || !inst->core->device || !ctrl) {
dprintk(VIDC_ERR, "%s invalid parameters\n", __func__);
@ -3812,12 +3854,15 @@ static int try_set_ext_ctrl(struct msm_vidc_inst *inst,
/* Sanity check for the QP boundaries as we are using
* same control to set Initial QP for all the codecs
*/
temp_ctrl->id =
temp_ctrl.id =
V4L2_CID_MPEG_VIDC_VIDEO_INITIAL_I_FRAME_QP;
temp_ctrl->val = control[i].value;
rc = msm_venc_validate_qp_value(inst, temp_ctrl);
temp_ctrl.value = control[i].value;
rc = msm_comm_s_ctrl(inst, &temp_ctrl);
if (rc) {
dprintk(VIDC_ERR, "Invalid Initial I QP\n");
dprintk(VIDC_ERR,
"%s Failed setting Initial I Frame QP : %d\n",
__func__, rc);
break;
}
quant.qpi = control[i].value;
@ -3825,12 +3870,14 @@ static int try_set_ext_ctrl(struct msm_vidc_inst *inst,
pdata = &quant;
break;
case V4L2_CID_MPEG_VIDC_VIDEO_INITIAL_P_FRAME_QP:
temp_ctrl->id =
temp_ctrl.id =
V4L2_CID_MPEG_VIDC_VIDEO_INITIAL_P_FRAME_QP;
temp_ctrl->val = control[i].value;
rc = msm_venc_validate_qp_value(inst, temp_ctrl);
temp_ctrl.value = control[i].value;
rc = msm_comm_s_ctrl(inst, &temp_ctrl);
if (rc) {
dprintk(VIDC_ERR, "Invalid Initial P QP\n");
dprintk(VIDC_ERR,
"%s Failed setting Initial P Frame QP : %d\n",
__func__, rc);
break;
}
quant.qpp = control[i].value;
@ -3838,12 +3885,14 @@ static int try_set_ext_ctrl(struct msm_vidc_inst *inst,
pdata = &quant;
break;
case V4L2_CID_MPEG_VIDC_VIDEO_INITIAL_B_FRAME_QP:
temp_ctrl->id =
temp_ctrl.id =
V4L2_CID_MPEG_VIDC_VIDEO_INITIAL_B_FRAME_QP;
temp_ctrl->val = control[i].value;
rc = msm_venc_validate_qp_value(inst, temp_ctrl);
temp_ctrl.value = control[i].value;
rc = msm_comm_s_ctrl(inst, &temp_ctrl);
if (rc) {
dprintk(VIDC_ERR, "Invalid Initial B QP\n");
dprintk(VIDC_ERR,
"%s Failed setting Initial B Frame QP : %d\n",
__func__, rc);
break;
}
quant.qpb = control[i].value;