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

Commit e5c921e0 authored by Deva Ramasubramanian's avatar Deva Ramasubramanian Committed by Stephen Boyd
Browse files

msm: vidc: Add controls specific to H263



Userspace requires controls to set profile and level values. Hence
expose V4L2_CID_MPEG_VIDC_VIDEO_H263_PROFILE and
V4L2_CID_MPEG_VIDC_VIDEO_H263_LEVEL.

Change-Id: Id2b5d4ade8dda1a32b11820936532300b18c37ac
Signed-off-by: default avatarDeva Ramasubramanian <dramasub@codeaurora.org>
Signed-off-by: default avatarVinay Kalia <vkalia@codeaurora.org>
parent 9751efbb
Loading
Loading
Loading
Loading
+146 −3
Original line number Diff line number Diff line
@@ -63,6 +63,30 @@ static const char *const h264_video_entropy_cabac_model[] = {
	"Model 2",
	NULL
};

static const char *const h263_level[] = {
	"1.0",
	"2.0",
	"3.0",
	"4.0",
	"4.5",
	"5.0",
	"6.0",
	"7.0",
};

static const char *const h263_profile[] = {
	"Baseline",
	"H320 Coding",
	"Backward Compatible",
	"ISWV2",
	"ISWV3",
	"High Compression",
	"Internet",
	"Interlace",
	"High Latency",
};

static const struct msm_vidc_ctrl msm_venc_ctrls[] = {
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_FRAME_RATE,
@@ -212,9 +236,47 @@ static const struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.minimum = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
		.maximum = V4L2_MPEG_VIDEO_H264_LEVEL_5_1,
		.default_value = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
		.step = 1,
		.step = 0,
		.menu_skip_mask = 0,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_H263_PROFILE,
		.name = "H263 Profile",
		.type = V4L2_CTRL_TYPE_MENU,
		.minimum = V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_BASELINE,
		.maximum = V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_HIGHLATENCY,
		.default_value = V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_BASELINE,
		.menu_skip_mask = ~(
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_BASELINE) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_H320CODING) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_BACKWARDCOMPATIBLE) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_ISWV2) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_ISWV3) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_HIGHCOMPRESSION) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_INTERNET) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_INTERLACE) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_HIGHLATENCY)
		),
		.qmenu = h263_profile,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_H263_LEVEL,
		.name = "H263 Level",
		.type = V4L2_CTRL_TYPE_MENU,
		.minimum = V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_1_0,
		.maximum = V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_7_0,
		.default_value = V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_1_0,
		.menu_skip_mask = ~(
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_1_0) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_2_0) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_3_0) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_4_0) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_5_0) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_6_0) |
		(1 << V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_7_0)
		),
		.qmenu = h263_level,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_ROTATION,
		.name = "Rotation",
@@ -410,8 +472,11 @@ static struct hal_profile_level
	venc_h264_profile_level = {HAL_H264_PROFILE_BASELINE,
		HAL_H264_LEVEL_1};
static struct hal_profile_level
	venc_mpeg4_profile_level = {HAL_H264_PROFILE_BASELINE,
		HAL_H264_LEVEL_1};
	venc_mpeg4_profile_level = {HAL_MPEG4_PROFILE_SIMPLE,
		HAL_MPEG4_LEVEL_0};
static struct hal_profile_level
	venc_h263_profile_level = {HAL_H263_PROFILE_BASELINE,
				HAL_H263_LEVEL_10};
static struct hal_h264_entropy_control
	venc_h264_entropy_control = {HAL_H264_ENTROPY_CAVLC,
		HAL_H264_CABAC_MODEL_0};
@@ -904,6 +969,84 @@ static int msm_venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
		pr_debug("\nLevel: %d\n",
			   profile_level.level);
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_H263_PROFILE:
		property_id =
			HAL_PARAM_PROFILE_LEVEL_CURRENT;

		switch (control.value) {
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_BASELINE:
			control.value = HAL_H263_PROFILE_BASELINE;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_H320CODING:
			control.value = HAL_H263_PROFILE_H320CODING;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_BACKWARDCOMPATIBLE:
			control.value = HAL_H263_PROFILE_BACKWARDCOMPATIBLE;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_ISWV2:
			control.value = HAL_H263_PROFILE_ISWV2;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_ISWV3:
			control.value = HAL_H263_PROFILE_ISWV3;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_HIGHCOMPRESSION:
			control.value = HAL_H263_PROFILE_HIGHCOMPRESSION;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_INTERNET:
			control.value = HAL_H263_PROFILE_INTERNET;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_INTERLACE:
			control.value = HAL_H263_PROFILE_INTERLACE;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_PROFILE_HIGHLATENCY:
			control.value = HAL_H263_PROFILE_HIGHLATENCY;
			break;
		default:
			break;
		}
		profile_level.profile = control.value;
		venc_h263_profile_level.profile = control.value;
		profile_level.level = venc_h263_profile_level.level;
		pdata = &profile_level;
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_H263_LEVEL:
		property_id =
			HAL_PARAM_PROFILE_LEVEL_CURRENT;

		switch (control.value) {
		case V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_1_0:
			control.value = HAL_H263_LEVEL_10;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_2_0:
			control.value = HAL_H263_LEVEL_20;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_3_0:
			control.value = HAL_H263_LEVEL_30;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_4_0:
			control.value = HAL_H263_LEVEL_40;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_4_5:
			control.value = HAL_H263_LEVEL_45;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_5_0:
			control.value = HAL_H263_LEVEL_50;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_6_0:
			control.value = HAL_H263_LEVEL_60;
			break;
		case V4L2_MPEG_VIDC_VIDEO_H263_LEVEL_7_0:
			control.value = HAL_H263_LEVEL_70;
			break;
		default:
			break;
		}

		profile_level.level = control.value;
		venc_h263_profile_level.level = control.value;
		profile_level.profile = venc_h263_profile_level.profile;
		pdata = &profile_level;
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_ROTATION:
		property_id =
			HAL_CONFIG_VPE_OPERATIONS;