summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeepak Kushwah <dkushwah@codeaurora.org>2017-03-30 18:56:03 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2017-04-11 22:38:18 -0700
commitaee6a2cd41676b8dddf35aa914f7edf722a679d4 (patch)
tree62c379e1865a1b6764981fe885ac949e2bb130bd
parent4901c7fce456a3ad5d80836000539674a885913e (diff)
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>
-rw-r--r--drivers/media/platform/msm/vidc/msm_venc.c75
1 files changed, 62 insertions, 13 deletions
diff --git a/drivers/media/platform/msm/vidc/msm_venc.c b/drivers/media/platform/msm/vidc/msm_venc.c
index ca9d7fba4ee3..30726354164b 100644
--- a/drivers/media/platform/msm/vidc/msm_venc.c
+++ b/drivers/media/platform/msm/vidc/msm_venc.c
@@ -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;