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

Commit 83973537 authored by Shiju Mathew's avatar Shiju Mathew Committed by Gerrit - the friendly Code Review server
Browse files

vidc: Enable skip output buffers for video encoder



Added feature to configure video h/w to send empty output buffer
for skipped frame due to rate control.

Change-Id: Id47344c3bae216fec6384ff205bcb658ec27cb06
Signed-off-by: default avatarShiju Mathew <shijum@codeaurora.org>
parent 6f777b23
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -2180,6 +2180,15 @@ int create_pkt_cmd_session_set_property(
		pkt->size += sizeof(u32) + sizeof(struct hfi_iframe_size);
		break;
	}
	case HAL_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAME:
	{
		create_pkt_enable(pkt->rg_property_data,
			HFI_PROPERTY_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAMES,
			((struct hal_enable *)pdata)->enable);
		pkt->size += sizeof(u32) + sizeof(struct hfi_enable);
		break;
	}

	/* FOLLOWING PROPERTIES ARE NOT IMPLEMENTED IN CORE YET */
	case HAL_CONFIG_BUFFER_REQUIREMENTS:
	case HAL_CONFIG_PRIORITY:
+29 −1
Original line number Diff line number Diff line
@@ -1423,7 +1423,16 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
			(1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED)),
		.qmenu = iframe_sizes,
	},

	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME,
		.name = "Send encoder output buffer for skipped frames",
		.type = V4L2_CTRL_TYPE_BOOLEAN,
		.minimum = V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_DISABLE,
		.maximum = V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_ENABLE,
		.default_value =
			V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_DISABLE,
		.step = 1,
	}
};

#define NUM_CTRLS ARRAY_SIZE(msm_venc_ctrls)
@@ -3712,6 +3721,25 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
				ctrl->val);
		pdata = &iframesize_type;
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME:
		property_id = HAL_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAME;
		switch (ctrl->val) {
		case V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_ENABLE:
			enable.enable = 1;
			break;
		case V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_DISABLE:
			enable.enable = 0;
			break;
		default:
			dprintk(VIDC_ERR,
				"Invalid send skipped frames control value %d\n",
				ctrl->val);
			rc = -ENOTSUPP;
			break;
		}
		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
@@ -243,6 +243,7 @@ enum hal_property {
	HAL_PARAM_VENC_H264_TRANSFORM_8x8,
	HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
	HAL_PARAM_VENC_IFRAMESIZE_TYPE,
	HAL_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAME
};

enum hal_domain {
+2 −0
Original line number Diff line number Diff line
@@ -388,6 +388,8 @@ struct hfi_buffer_info {
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x033)
#define  HFI_PROPERTY_PARAM_VENC_IFRAMESIZE			\
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x034)
#define  HFI_PROPERTY_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAMES    \
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x035)

#define HFI_PROPERTY_CONFIG_VENC_COMMON_START				\
	(HFI_DOMAIN_BASE_VENC + HFI_ARCH_COMMON_OFFSET + 0x6000)
+7 −0
Original line number Diff line number Diff line
@@ -1225,6 +1225,13 @@ enum v4l2_mpeg_vidc_video_au_delimiter {
	V4L2_MPEG_VIDC_VIDEO_AU_DELIMITER_ENABLED = 1
};

#define V4L2_CID_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 103)
enum v4l2_mpeg_vidc_video_venc_send_skipped_frame {
	V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_DISABLE = 0,
	V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_ENABLE = 1
};


/*  Camera class control IDs */