diff options
author | Deepak Kushwah <dkushwah@codeaurora.org> | 2016-06-28 11:45:39 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-07-19 03:32:47 -0700 |
commit | 12d028e02f36bd061ffc6396789cfb044530e631 (patch) | |
tree | 47b76771a3811439b870f65e6406791bbaa6d40e /drivers/media | |
parent | 816c3cbc37d5caea9de2c2e7b09c2f046369c67e (diff) |
msm: vidc: Add support for setting packed QP range
Add support for setting packed QP range for clients
to set different QP Range for I, P, B frames.
CRs-Fixed: 1043369
Change-Id: I3765506f1d703f47e481719296ab890b1f3dc106
Signed-off-by: Deepak Kushwah <dkushwah@codeaurora.org>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/platform/msm/vidc/hfi_packetization.c | 19 | ||||
-rw-r--r-- | drivers/media/platform/msm/vidc/msm_venc.c | 62 | ||||
-rw-r--r-- | drivers/media/platform/msm/vidc/vidc_hfi_api.h | 1 |
3 files changed, 82 insertions, 0 deletions
diff --git a/drivers/media/platform/msm/vidc/hfi_packetization.c b/drivers/media/platform/msm/vidc/hfi_packetization.c index 5d2895866b49..d58684109395 100644 --- a/drivers/media/platform/msm/vidc/hfi_packetization.c +++ b/drivers/media/platform/msm/vidc/hfi_packetization.c @@ -1565,6 +1565,25 @@ int create_pkt_cmd_session_set_property( sizeof(struct hfi_quantization_range); break; } + case HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED: + { + struct hfi_quantization_range *hfi; + struct hfi_quantization_range *hal_range = + (struct hfi_quantization_range *) pdata; + + pkt->rg_property_data[0] = + HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE; + hfi = (struct hfi_quantization_range *) + &pkt->rg_property_data[1]; + + hfi->min_qp = hal_range->min_qp; + hfi->max_qp = hal_range->max_qp; + hfi->layer_id = hal_range->layer_id; + + pkt->size += sizeof(u32) + + sizeof(struct hfi_quantization_range); + break; + } case HAL_PARAM_VENC_SEARCH_RANGE: { struct hfi_vc1e_perf_cfg_type *hfi; diff --git a/drivers/media/platform/msm/vidc/msm_venc.c b/drivers/media/platform/msm/vidc/msm_venc.c index 68efa8c593c3..0e668b93598f 100644 --- a/drivers/media/platform/msm/vidc/msm_venc.c +++ b/drivers/media/platform/msm/vidc/msm_venc.c @@ -533,6 +533,28 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .step = 1, }, { + .id = V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED, + .name = "H264 Minimum QP PACKED", + .type = V4L2_CTRL_TYPE_INTEGER, + .minimum = 0x00010101, + .maximum = 0x00333333, + .default_value = 0x00010101, + .step = 1, + .menu_skip_mask = 0, + .qmenu = NULL, + }, + { + .id = V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED, + .name = "H264 Maximum QP PACKED", + .type = V4L2_CTRL_TYPE_INTEGER, + .minimum = 0x00010101, + .maximum = 0x00333333, + .default_value = 0x00333333, + .step = 1, + .menu_skip_mask = 0, + .qmenu = NULL, + }, + { .id = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE, .name = "Slice Mode", .type = V4L2_CTRL_TYPE_MENU, @@ -2516,6 +2538,46 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) pdata = &qp_range; break; } + case V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED: { + struct v4l2_ctrl *qp_max; + + qp_max = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED); + if (ctrl->val >= qp_max->val) { + dprintk(VIDC_ERR, + "Bad range: Min QP PACKED (0x%x) > Max QP PACKED (0x%x)\n", + ctrl->val, qp_max->val); + rc = -ERANGE; + break; + } + + property_id = HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED; + qp_range.layer_id = 0; + qp_range.max_qp = qp_max->val; + qp_range.min_qp = ctrl->val; + + pdata = &qp_range; + break; + } + case V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED: { + struct v4l2_ctrl *qp_min; + + qp_min = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED); + if (ctrl->val <= qp_min->val) { + dprintk(VIDC_ERR, + "Bad range: Max QP PACKED (%d) < Min QP PACKED (%d)\n", + ctrl->val, qp_min->val); + rc = -ERANGE; + break; + } + + property_id = HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED; + qp_range.layer_id = 0; + qp_range.max_qp = ctrl->val; + qp_range.min_qp = qp_min->val; + + pdata = &qp_range; + break; + } case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE: { int temp = 0; diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_api.h b/drivers/media/platform/msm/vidc/vidc_hfi_api.h index 6998813ab53e..624fd53debe8 100644 --- a/drivers/media/platform/msm/vidc/vidc_hfi_api.h +++ b/drivers/media/platform/msm/vidc/vidc_hfi_api.h @@ -236,6 +236,7 @@ enum hal_property { HAL_PARAM_VENC_LOW_LATENCY, HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED, HAL_CONFIG_VENC_BLUR_RESOLUTION, + HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED, }; enum hal_domain { |