summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorDeepak Kushwah <dkushwah@codeaurora.org>2016-06-28 11:45:39 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-07-19 03:32:47 -0700
commit12d028e02f36bd061ffc6396789cfb044530e631 (patch)
tree47b76771a3811439b870f65e6406791bbaa6d40e /drivers/media
parent816c3cbc37d5caea9de2c2e7b09c2f046369c67e (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.c19
-rw-r--r--drivers/media/platform/msm/vidc/msm_venc.c62
-rw-r--r--drivers/media/platform/msm/vidc/vidc_hfi_api.h1
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 {