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

Commit 3c7a9bb5 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: add set ctrl for Dynamic Buffer mode"

parents 9ed0364c 306ea7f4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -371,6 +371,9 @@ static u32 get_hfi_buf_mode(enum buffer_mode_type hal_buf_mode)
	case HAL_BUFFER_MODE_RING:
		buf_mode = HFI_BUFFER_MODE_RING;
		break;
	case HAL_BUFFER_MODE_DYNAMIC:
		buf_mode = HFI_BUFFER_MODE_DYNAMIC;
		break;
	default:
		dprintk(VIDC_ERR, "Invalid buffer mode :0x%x\n",
				hal_buf_mode);
+66 −12
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ static const char *const mpeg_video_vidc_extradata[] = {
static const char *const mpeg_vidc_video_alloc_mode_type[] = {
	"Buffer Allocation Static",
	"Buffer Allocation Ring Buffer",
	"Buffer Allocation Dynamic Buffer"
};

static const char *const perf_level[] = {
@@ -256,15 +257,32 @@ static struct msm_vidc_ctrl msm_vdec_ctrls[] = {
		.step = 0,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE,
		.name = "Buffer allocation mode",
		.id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT,
		.name = "Buffer allocation mode for input",
		.type = V4L2_CTRL_TYPE_MENU,
		.minimum = V4L2_MPEG_VIDC_VIDEO_STATIC,
		.maximum = V4L2_MPEG_VIDC_VIDEO_RING,
		.maximum = V4L2_MPEG_VIDC_VIDEO_DYNAMIC,
		.default_value = V4L2_MPEG_VIDC_VIDEO_STATIC,
		.menu_skip_mask = ~(
			(1 << V4L2_MPEG_VIDC_VIDEO_STATIC) |
			(1 << V4L2_MPEG_VIDC_VIDEO_RING)
			(1 << V4L2_MPEG_VIDC_VIDEO_RING) |
			(1 << V4L2_MPEG_VIDC_VIDEO_DYNAMIC)
			),
		.qmenu = mpeg_vidc_video_alloc_mode_type,
		.step = 0,
		.cluster = 0,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT,
		.name = "Buffer allocation mode for output",
		.type = V4L2_CTRL_TYPE_MENU,
		.minimum = V4L2_MPEG_VIDC_VIDEO_STATIC,
		.maximum = V4L2_MPEG_VIDC_VIDEO_DYNAMIC,
		.default_value = V4L2_MPEG_VIDC_VIDEO_STATIC,
		.menu_skip_mask = ~(
			(1 << V4L2_MPEG_VIDC_VIDEO_STATIC) |
			(1 << V4L2_MPEG_VIDC_VIDEO_RING) |
			(1 << V4L2_MPEG_VIDC_VIDEO_DYNAMIC)
			),
		.qmenu = mpeg_vidc_video_alloc_mode_type,
		.step = 0,
@@ -1320,22 +1338,39 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst)
	inst->capability.width.max = DEFAULT_WIDTH;
	inst->capability.buffer_mode[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC;
	inst->capability.buffer_mode[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC;
	inst->buffer_mode_set[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC;
	inst->buffer_mode_set[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC;
	inst->prop.fps = 30;
	return rc;
}

static inline enum buffer_mode_type get_buf_type(int val)
{
	switch (val) {
	case V4L2_MPEG_VIDC_VIDEO_STATIC:
		return HAL_BUFFER_MODE_STATIC;
	case V4L2_MPEG_VIDC_VIDEO_RING:
		return HAL_BUFFER_MODE_RING;
	case V4L2_MPEG_VIDC_VIDEO_DYNAMIC:
		return HAL_BUFFER_MODE_DYNAMIC;
	default:
		dprintk(VIDC_ERR, "%s: invalid buf type: %d", __func__, val);
	}
	return 0;
}

static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
{
	int rc = 0;
	struct hal_nal_stream_format_supported stream_format;
	struct hal_enable_picture enable_picture;
	struct hal_enable hal_property;/*, prop;*/
	struct hal_buffer_alloc_mode mode;
	struct hal_enable hal_property;
	enum hal_property property_id = 0;
	u32 property_val = 0;
	void *pdata = NULL;
	struct hfi_device *hdev;
	struct hal_extradata_enable extra;
	struct hal_buffer_alloc_mode alloc_mode;

	if (!inst || !inst->core || !inst->core->device) {
		dprintk(VIDC_ERR, "%s invalid parameters", __func__);
@@ -1424,14 +1459,17 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
		}

		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE:
	{
		property_id = HAL_PARAM_BUFFER_ALLOC_MODE;
		mode.buffer_mode = ctrl->val;
		mode.buffer_type = HAL_BUFFER_INPUT;
		pdata = &mode;
	case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT:
		if (ctrl->val == V4L2_MPEG_VIDC_VIDEO_DYNAMIC) {
			rc = -ENOTSUPP;
			break;
		}
		property_id = HAL_PARAM_BUFFER_ALLOC_MODE;
		alloc_mode.buffer_mode = get_buf_type(ctrl->val);
		alloc_mode.buffer_type = HAL_BUFFER_INPUT;
		inst->buffer_mode_set[OUTPUT_PORT] = alloc_mode.buffer_mode;
		pdata = &alloc_mode;
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_FRAME_ASSEMBLY:
	{
		property_id = HAL_PARAM_VDEC_FRAME_ASSEMBLY;
@@ -1439,6 +1477,22 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
		pdata = &hal_property;
		break;
	}
	case V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT:
		property_id = HAL_PARAM_BUFFER_ALLOC_MODE;
		alloc_mode.buffer_mode = get_buf_type(ctrl->val);
		if (!(alloc_mode.buffer_mode &
			inst->capability.buffer_mode[CAPTURE_PORT])) {
			dprintk(VIDC_DBG,
				"buffer mode[%d] not supported for Capture Port\n",
				ctrl->val);
			rc = -ENOTSUPP;
			break;
		}
		alloc_mode.buffer_type = HAL_BUFFER_OUTPUT;
		pdata = &alloc_mode;
		inst->buffer_mode_set[CAPTURE_PORT] = alloc_mode.buffer_mode;
		break;

	default:
		break;
	}
+2 −0
Original line number Diff line number Diff line
@@ -2095,6 +2095,8 @@ int msm_venc_inst_init(struct msm_vidc_inst *inst)
	inst->prop.width[OUTPUT_PORT] = DEFAULT_WIDTH;
	inst->prop.fps = 15;
	inst->capability.pixelprocess_capabilities = 0;
	inst->buffer_mode_set[OUTPUT_PORT] = HAL_BUFFER_MODE_STATIC;
	inst->buffer_mode_set[CAPTURE_PORT] = HAL_BUFFER_MODE_STATIC;
	return rc;
}

+1 −0
Original line number Diff line number Diff line
@@ -229,6 +229,7 @@ struct msm_vidc_inst {
	struct buf_count count;
	enum msm_vidc_modes flags;
	struct msm_vidc_core_capability capability;
	enum buffer_mode_type buffer_mode_set[MAX_PORT_NUM];
};

extern struct msm_vidc_drv *vidc_driver;
+9 −6
Original line number Diff line number Diff line
@@ -756,22 +756,25 @@ enum v4l2_mpeg_vidc_video_h264_vui_timing_info {
	V4L2_MPEG_VIDC_VIDEO_H264_VUI_TIMING_INFO_ENABLED = 1
};

#define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE		\
#define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_INPUT	\
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 30)
#define V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT       \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 31)
enum v4l2_mpeg_vidc_video_alloc_mode_type {
	V4L2_MPEG_VIDC_VIDEO_STATIC	= 0,
	V4L2_MPEG_VIDC_VIDEO_RING	= 1,
	V4L2_MPEG_VIDC_VIDEO_DYNAMIC	= 2,
};

#define V4L2_CID_MPEG_VIDC_VIDEO_FRAME_ASSEMBLY	\
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 31)
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 32)
enum v4l2_mpeg_vidc_video_assembly {
	V4L2_MPEG_VIDC_FRAME_ASSEMBLY_DISABLE	= 0,
	V4L2_MPEG_VIDC_FRAME_ASSEMBLY_ENABLE	= 1,
};

#define V4L2_CID_MPEG_VIDC_VIDEO_VP8_PROFILE_LEVEL \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 32)
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 33)
enum v4l2_mpeg_vidc_video_vp8_profile_level {
	V4L2_MPEG_VIDC_VIDEO_VP8_UNUSED,
	V4L2_MPEG_VIDC_VIDEO_VP8_VERSION_0,
@@ -781,21 +784,21 @@ enum v4l2_mpeg_vidc_video_vp8_profile_level {
};

#define V4L2_CID_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 33)
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 34)
enum v4l2_mpeg_vidc_video_h264_vui_bitstream_restrict {
	V4L2_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT_DISABLED = 0,
	V4L2_MPEG_VIDC_VIDEO_H264_VUI_BITSTREAM_RESTRICT_ENABLED = 1
};

#define V4L2_CID_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 34)
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 35)
enum v4l2_mpeg_vidc_video_preserve_text_quality {
	V4L2_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY_DISABLED = 0,
	V4L2_MPEG_VIDC_VIDEO_PRESERVE_TEXT_QUALITY_ENABLED = 1
};

#define V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 35)
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 36)
enum v4l2_mpeg_vidc_video_deinterlace {
	V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE_DISABLED = 0,
	V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE_ENABLED = 1