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

Commit 4f6adad4 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: 1035157
Change-Id: I3765506f1d703f47e481719296ab890b1f3dc106
Signed-off-by: default avatarDeepak Kushwah <dkushwah@codeaurora.org>
parent b79cfe22
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;
+70 −7
Original line number Diff line number Diff line
@@ -492,7 +492,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.id = V4L2_CID_MPEG_VIDEO_H264_MIN_QP,
		.name = "H264 Minimum QP",
		.type = V4L2_CTRL_TYPE_INTEGER,
		.minimum = 0,
		.minimum = 1,
		.maximum = 51,
		.default_value = 1,
		.step = 1,
@@ -503,7 +503,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.id = V4L2_CID_MPEG_VIDEO_H264_MAX_QP,
		.name = "H264 Maximum QP",
		.type = V4L2_CTRL_TYPE_INTEGER,
		.minimum = 0,
		.minimum = 1,
		.maximum = 51,
		.default_value = 51,
		.step = 1,
@@ -514,8 +514,8 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.id = V4L2_CID_MPEG_VIDC_VIDEO_VP8_MIN_QP,
		.name = "VP8 Minimum QP",
		.type = V4L2_CTRL_TYPE_INTEGER,
		.minimum = 0,
		.maximum = 127,
		.minimum = 1,
		.maximum = 128,
		.default_value = 1,
		.step = 1,
	},
@@ -523,9 +523,10 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.id = V4L2_CID_MPEG_VIDC_VIDEO_VP8_MAX_QP,
		.name = "VP8 Maximum QP",
		.type = V4L2_CTRL_TYPE_INTEGER,
		.minimum = 0,
		.maximum = 127,
		.default_value = 127,
		.minimum = 0x010101,
		.maximum = 0x808080,
		.default_value = 0x808080,

		.step = 1,
	},
	{
@@ -546,6 +547,28 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.default_value = 31,
		.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",
@@ -2626,6 +2649,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
@@ -239,6 +239,7 @@ enum hal_property {
	HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED,
	HAL_CONFIG_VENC_BLUR_RESOLUTION,
	HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
	HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED,
};

enum hal_domain {
+5 −0
Original line number Diff line number Diff line
@@ -1179,6 +1179,11 @@ enum v4l2_cid_mpeg_vidc_video_full_range {
#define V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 96)

#define V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 97)
#define V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 98)

/*  Camera class control IDs */

#define V4L2_CID_CAMERA_CLASS_BASE 	(V4L2_CTRL_CLASS_CAMERA | 0x900)