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

Commit 0844d679 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: vidc: venc: Changes to support QP mask setting" into msm-4.9

parents 295be954 3a147163
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1273,6 +1273,7 @@ int create_pkt_cmd_session_set_property(
		hfi->qp_packed = hal_quant->qpi | hal_quant->qpp << 8 |
			hal_quant->qpb << 16;
		hfi->layer_id = hal_quant->layer_id;
		hfi->enable = hal_quant->enable;
		pkt->size += sizeof(u32) + sizeof(struct hfi_quantization);
		break;
	}
+48 −16
Original line number Diff line number Diff line
@@ -285,6 +285,17 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.menu_skip_mask = 0,
		.qmenu = NULL,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_QP_MASK,
		.name = "QP mask for diff frame types",
		.type = V4L2_CTRL_TYPE_INTEGER,
		.minimum = 1,
		.maximum = 7,
		.default_value = 7,
		.step = 1,
		.menu_skip_mask = 0,
		.qmenu = NULL,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_NUM_B_FRAMES,
		.name = "Intra Period for B frames",
@@ -1644,43 +1655,65 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
		pdata = &baselayerid;
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP: {
		struct v4l2_ctrl *qpp, *qpb;
		struct v4l2_ctrl *qpp, *qpb, *mask;

		property_id = HAL_CONFIG_VENC_FRAME_QP;
		qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP);
		qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP);
		mask = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_QP_MASK);

		quant.qpi = ctrl->val;
		quant.qpp = qpp->val;
		quant.qpb = qpb->val;
		quant.enable = mask->val;
		quant.layer_id = MSM_VIDC_ALL_LAYER_ID;
		pdata = &quant;
		break;
	}
	case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP: {
		struct v4l2_ctrl *qpi, *qpb;
		struct v4l2_ctrl *qpi, *qpb, *mask;

		property_id = HAL_CONFIG_VENC_FRAME_QP;
		qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP);
		qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP);
		mask = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_QP_MASK);

		quant.qpp = ctrl->val;
		quant.qpi = qpi->val;
		quant.qpb = qpb->val;
		quant.enable = mask->val;
		quant.layer_id = MSM_VIDC_ALL_LAYER_ID;
		pdata = &quant;
		break;
	}
	case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP: {
		struct v4l2_ctrl *qpp, *qpi;
		struct v4l2_ctrl *qpp, *qpi, *mask;

		property_id = HAL_CONFIG_VENC_FRAME_QP;
		qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP);
		qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP);
		mask = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_QP_MASK);

		quant.qpb = ctrl->val;
		quant.qpp = qpp->val;
		quant.qpi = qpi->val;
		quant.enable = mask->val;
		quant.layer_id = MSM_VIDC_ALL_LAYER_ID;
		pdata = &quant;
		break;
	}
	case V4L2_CID_MPEG_VIDC_VIDEO_QP_MASK: {
		struct v4l2_ctrl *qpi, *qpp, *qpb;

		property_id = HAL_CONFIG_VENC_FRAME_QP;
		qpi = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP);
		qpp = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP);
		qpb = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP);

		quant.qpi = qpi->val;
		quant.qpp = qpp->val;
		quant.qpb = qpb->val;
		quant.enable = ctrl->val;
		quant.layer_id = MSM_VIDC_ALL_LAYER_ID;
		pdata = &quant;
		break;
@@ -1852,7 +1885,7 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst,
	struct v4l2_ext_control *control;
	struct hfi_device *hdev;
	struct hal_ltr_mode ltr_mode;
	u32 property_id = 0, layer_id = MSM_VIDC_ALL_LAYER_ID;
	u32 property_id = 0;
	void *pdata = NULL;
	struct msm_vidc_capability *cap = NULL;
	struct hal_aspect_ratio sar;
@@ -1930,76 +1963,75 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst,
			pdata = &blur_res;
			break;
		case V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID:
			layer_id = control[i].value;
			qp.layer_id = control[i].value;
			/* Enable QP for all frame types by default */
			qp.enable = 7;
			qp_range.layer_id = control[i].value;
			i++;
			while (i < ctrl->count) {
			switch (control[i].id) {
			case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP:
				qp.qpi = control[i].value;
				qp.layer_id = layer_id;
				property_id =
					HAL_CONFIG_VENC_FRAME_QP;
				pdata = &qp;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP:
				qp.qpp = control[i].value;
				qp.layer_id = layer_id;
				property_id =
					HAL_CONFIG_VENC_FRAME_QP;
				pdata = &qp;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP:
				qp.qpb = control[i].value;
				qp.layer_id = layer_id;
				property_id =
					HAL_CONFIG_VENC_FRAME_QP;
				pdata = &qp;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_QP_MASK:
				qp.enable = control[i].value;
				property_id =
					HAL_CONFIG_VENC_FRAME_QP;
				pdata = &qp;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN:
				qp_range.qpi_min = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN:
				qp_range.qpp_min = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN:
				qp_range.qpb_min = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX:
				qp_range.qpi_max = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX:
				qp_range.qpp_max = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX:
				qp_range.qpb_max = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VENC_PARAM_LAYER_BITRATE:
				bitrate.bit_rate = control[i].value;
				bitrate.layer_id = layer_id;
				property_id =
					HAL_CONFIG_VENC_TARGET_BITRATE;
				pdata = &bitrate;
+1 −0
Original line number Diff line number Diff line
@@ -595,6 +595,7 @@ struct hal_quantization {
	u32 qpp;
	u32 qpb;
	u32 layer_id;
	u32 enable;
};

struct hal_quantization_range {
+2 −1
Original line number Diff line number Diff line
@@ -536,7 +536,8 @@ struct hfi_quality_vs_speed {
struct hfi_quantization {
	u32 qp_packed;
	u32 layer_id;
	u32 reserved[4];
	u32 enable;
	u32 reserved[3];
};

struct hfi_quantization_range {
+2 −0
Original line number Diff line number Diff line
@@ -1061,6 +1061,8 @@ enum v4l2_cid_mpeg_vidc_video_full_range {
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 106)
#define V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 107)
#define V4L2_CID_MPEG_VIDC_VIDEO_QP_MASK \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 108)

enum v4l2_mpeg_vidc_video_venc_iframesize_type {
	V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_DEFAULT,