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

Commit f63f05e2 authored by Mihir Ganu's avatar Mihir Ganu
Browse files

msm: vidc: Add CVP metadata mode controls



Add CVP extradata as custom extradata. Clients can use
this to provide CVP metadata. If not set, kernel will use
CVP hardware to fill metadata. Also, introduce a new
v4l2 control to forcefully disable CVP extradata.

CRs-Fixed: 2384822
Change-Id: I7ecbc66cea2e3b340dcefbe794a22b91639a666d
Signed-off-by: default avatarMihir Ganu <mganu@codeaurora.org>
parent 9812e86a
Loading
Loading
Loading
Loading
+28 −5
Original line number Diff line number Diff line
@@ -527,7 +527,8 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.type = V4L2_CTRL_TYPE_BITMASK,
		.minimum = EXTRADATA_NONE,
		.maximum = EXTRADATA_ADVANCED | EXTRADATA_ENC_INPUT_ROI |
			EXTRADATA_ENC_INPUT_HDR10PLUS,
			EXTRADATA_ENC_INPUT_HDR10PLUS |
			EXTRADATA_ENC_INPUT_CVP,
		.default_value = EXTRADATA_NONE,
		.menu_skip_mask = 0,
		.qmenu = NULL,
@@ -934,6 +935,15 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		),
		.qmenu = mpeg_video_stream_format,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VENC_CVP_DISABLE,
		.name = "CVP Disable",
		.type = V4L2_CTRL_TYPE_BOOLEAN,
		.minimum = V4L2_MPEG_MSM_VIDC_DISABLE,
		.maximum = V4L2_MPEG_MSM_VIDC_ENABLE,
		.default_value = V4L2_MPEG_MSM_VIDC_DISABLE,
		.step = 1,
	},
};

#define NUM_CTRLS ARRAY_SIZE(msm_venc_ctrls)
@@ -1801,6 +1811,7 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
	case V4L2_CID_MPEG_VIDC_VIDEO_PRIORITY:
	case V4L2_CID_MPEG_VIDC_VIDEO_INTRA_REFRESH_RANDOM:
	case V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB:
	case V4L2_CID_MPEG_VIDC_VENC_CVP_DISABLE:
		dprintk(VIDC_DBG, "Control set: ID : %x Val : %d\n",
			ctrl->id, ctrl->val);
		break;
@@ -3274,6 +3285,7 @@ int msm_venc_set_extradata(struct msm_vidc_inst *inst)
{
	int rc = 0;
	struct v4l2_ctrl *ctrl;
	struct v4l2_ctrl *cvp_ctrl;

	ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_EXTRADATA);
	if (ctrl->val == EXTRADATA_NONE) {
@@ -3291,10 +3303,6 @@ int msm_venc_set_extradata(struct msm_vidc_inst *inst)
		}
	}

	/* Always enable default extradata */
	rc = msm_comm_set_extradata(inst,
			HFI_PROPERTY_PARAM_VENC_CVP_METADATA_EXTRADATA, 0x1);

	if (ctrl->val & EXTRADATA_ADVANCED)
		// Enable Advanced Extradata - LTR Info
		msm_comm_set_extradata(inst,
@@ -3314,6 +3322,21 @@ int msm_venc_set_extradata(struct msm_vidc_inst *inst)
		}
	}

	cvp_ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VENC_CVP_DISABLE);
	if (cvp_ctrl->val == V4L2_MPEG_MSM_VIDC_ENABLE) {
		if (ctrl->val & EXTRADATA_ENC_INPUT_CVP) {
			dprintk(VIDC_ERR,
				"%s: invalid params\n", __func__);
			return -EINVAL;
		}

		rc = msm_comm_set_extradata(inst,
			HFI_PROPERTY_PARAM_VENC_CVP_METADATA_EXTRADATA, 0x0);
	} else {
		rc = msm_comm_set_extradata(inst,
			HFI_PROPERTY_PARAM_VENC_CVP_METADATA_EXTRADATA, 0x1);
	}

	return rc;
}

+4 −0
Original line number Diff line number Diff line
@@ -821,6 +821,7 @@ enum v4l2_mpeg_vidc_extradata {
	EXTRADATA_ADVANCED = 2,
	EXTRADATA_ENC_INPUT_ROI = 4,
	EXTRADATA_ENC_INPUT_HDR10PLUS = 8,
	EXTRADATA_ENC_INPUT_CVP = 16,
};
enum v4l2_mpeg_cvp_extradata {
	V4L2_MPEG_CVP_EXTRADATA_NONE = 0,
@@ -973,6 +974,9 @@ enum v4l2_mpeg_vidc_video_hevc_max_hier_coding_layer {
	V4L2_MPEG_VIDC_VIDEO_HEVC_MAX_HIER_CODING_LAYER_6 = 6,
};

#define V4L2_CID_MPEG_VIDC_VENC_CVP_DISABLE \
	(V4L2_CID_MPEG_MSM_VIDC_BASE + 121)

/*  Camera class control IDs */

#define V4L2_CID_CAMERA_CLASS_BASE	(V4L2_CTRL_CLASS_CAMERA | 0x900)