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

Commit e062be42 authored by Govindaraj Rajagopal's avatar Govindaraj Rajagopal
Browse files

msm: vidc: enable bitrate savings for 8-bit & 10-bit



Currently bitrate savings enable is a boolean value. So
changing that to integer.

0 -> disable bitrate savings
1 -> only for 8-bit
2 -> only for 10-bit
3 -> both 8-bit & 10-bit.

Change-Id: I495eff0cc6144530e8ac8641ce3eca12a97547cc
Signed-off-by: default avatarGovindaraj Rajagopal <grajagop@codeaurora.org>
parent 7757d6c1
Loading
Loading
Loading
Loading
+28 −8
Original line number Diff line number Diff line
@@ -938,10 +938,10 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
	{
		.id = V4L2_CID_MPEG_VIDC_VENC_BITRATE_SAVINGS,
		.name = "Enable/Disable bitrate savings",
		.type = V4L2_CTRL_TYPE_BOOLEAN,
		.minimum = V4L2_MPEG_MSM_VIDC_DISABLE,
		.maximum = V4L2_MPEG_MSM_VIDC_ENABLE,
		.default_value = V4L2_MPEG_MSM_VIDC_ENABLE,
		.type = V4L2_CTRL_TYPE_INTEGER,
		.minimum = 0,
		.maximum = 3,
		.default_value = 3,
		.step = 1,
	},
	{
@@ -3315,8 +3315,10 @@ int msm_venc_set_bitrate_savings_mode(struct msm_vidc_inst *inst)
{
	int rc = 0;
	struct hfi_device *hdev;
	struct v4l2_ctrl *ctrl = NULL;
	struct v4l2_ctrl *cac;
	struct v4l2_ctrl *profile;
	struct hfi_enable enable;
	u32 codec;

	if (!inst || !inst->core) {
		d_vpr_e("%s: invalid params %pK\n", __func__, inst);
@@ -3324,12 +3326,30 @@ int msm_venc_set_bitrate_savings_mode(struct msm_vidc_inst *inst)
	}
	hdev = inst->core->device;

	ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VENC_BITRATE_SAVINGS);
	enable.enable = !!ctrl->val;
	if (!ctrl->val && inst->rc_type != V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) {
	cac = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VENC_BITRATE_SAVINGS);
	codec = get_v4l2_codec(inst);
	profile = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_HEVC_PROFILE);

	/**
	 * Enable CAC control:
	 * 0x0 -> disabled,
	 * 0x1 -> enabled for 8 bit
	 * 0x2 -> enabled for 10 bit
	 * 0x3 -> enabled for 8 and 10 bits both
	 */
	enable.enable = !!cac->val;
	if (cac->val == 0x1 && codec == V4L2_PIX_FMT_HEVC &&
		profile->val == V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10)
		enable.enable = 0;
	else if (cac->val == 0x2 && !(codec == V4L2_PIX_FMT_HEVC &&
		profile->val == V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10))
		enable.enable = 0;

	if (!cac->val && inst->rc_type != V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) {
		s_vpr_h(inst->sid,
			"Can't disable bitrate savings for non-VBR_CFR\n");
		enable.enable = 1;
		update_ctrl(cac, 3, inst->sid);
	}

	s_vpr_h(inst->sid, "%s: %d\n", __func__, enable.enable);