Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 12d028e0 authored by Deepak Kushwah's avatar Deepak Kushwah Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarDeepak Kushwah <dkushwah@codeaurora.org>
parent 816c3cbc
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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;
+62 −0
Original line number Diff line number Diff line
@@ -532,6 +532,28 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.default_value = 128,
		.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",
@@ -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;

+1 −0
Original line number Diff line number Diff line
@@ -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 {
+5 −0
Original line number Diff line number Diff line
@@ -1161,6 +1161,11 @@ enum v4l2_mpeg_vidc_video_lowlatency_mode {
#define V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT \
	(V4L2_CID_MPEG_MSM_VIDC_BASE + 90)

#define V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 91)
#define V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 92)

/*  Camera class control IDs */

#define V4L2_CID_CAMERA_CLASS_BASE 	(V4L2_CTRL_CLASS_CAMERA | 0x900)