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

Commit cd10559b authored by Srinu Gorle's avatar Srinu Gorle
Browse files

msm: vidc: add support to set low latency property to venus



Add support for clients to enable low latency property to venus firmware
to reduce the first frame delay in video encoding usecases.

Change-Id: Ifc45215f8a94cb9f0c67279dd77b56424a967790
Signed-off-by: default avatarSrinu Gorle <sgorle@codeaurora.org>
parent 1fdcf773
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2281,6 +2281,17 @@ static int create_3x_pkt_cmd_session_set_property(
		pkt->size += sizeof(u32) * 2;
		break;
	}
	case HAL_PARAM_VENC_LOW_LATENCY:
	{
		struct hfi_enable *hfi;

		pkt->rg_property_data[0] =
			HFI_PROPERTY_PARAM_VENC_LOW_LATENCY_MODE;
		hfi = (struct hfi_enable *) &pkt->rg_property_data[1];
		hfi->enable = ((struct hal_enable *) pdata)->enable;
		pkt->size += sizeof(u32) * 2;
		break;
	}
	default:
		rc = create_pkt_cmd_session_set_property(pkt,
				session, ptype, pdata);
+20 −1
Original line number Diff line number Diff line
@@ -1202,7 +1202,15 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.default_value = V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_DISABLE,
		.step = 1,
	},

	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_MODE,
		.name = "Low Latency Mode",
		.type = V4L2_CTRL_TYPE_BOOLEAN,
		.minimum = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_DISABLE,
		.maximum = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_ENABLE,
		.default_value = V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_DISABLE,
		.step = 1,
	},
};

#define NUM_CTRLS ARRAY_SIZE(msm_venc_ctrls)
@@ -3055,6 +3063,17 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
				dprintk(VIDC_ERR, "fail to set csc: %d\n", rc);
		}
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_MODE:
	{
		property_id = HAL_PARAM_VENC_LOW_LATENCY;
		if (ctrl->val ==
			V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_ENABLE)
			enable.enable = 1;
		else
			enable.enable = 0;
		pdata = &enable;
		break;
	}
	default:
		dprintk(VIDC_ERR, "Unsupported index: %x\n", ctrl->id);
		rc = -ENOTSUPP;
+1 −0
Original line number Diff line number Diff line
@@ -230,6 +230,7 @@ enum hal_property {
	HAL_CONFIG_VDEC_ENTROPY,
	HAL_PARAM_VENC_BITRATE_TYPE,
	HAL_PARAM_VENC_H264_PIC_ORDER_CNT,
	HAL_PARAM_VENC_LOW_LATENCY,
};

enum hal_domain {
+2 −0
Original line number Diff line number Diff line
@@ -357,6 +357,8 @@ struct hfi_buffer_info {
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x020)
#define HFI_PROPERTY_PARAM_VENC_H264_VUI_BITSTREAM_RESTRC \
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x021)
#define HFI_PROPERTY_PARAM_VENC_LOW_LATENCY_MODE	\
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x022)
#define HFI_PROPERTY_PARAM_VENC_PRESERVE_TEXT_QUALITY \
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x023)
#define HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER	\
+10 −1
Original line number Diff line number Diff line
@@ -1127,6 +1127,15 @@ enum v4l2_cid_mpeg_vidc_video_vpe_csc_type_enable {
	V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_ENABLE   = 1
};

#define V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_MODE \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 88)

enum v4l2_mpeg_vidc_video_lowlatency_mode {
	V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_DISABLE     = 0,
	V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_ENABLE      = 1,
};


/*  Camera class control IDs */

#define V4L2_CID_CAMERA_CLASS_BASE 	(V4L2_CTRL_CLASS_CAMERA | 0x900)