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

Commit 7eb20e57 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 support for setting packed QP range"

parents 25a5fb85 12d028e0
Loading
Loading
Loading
Loading
+25 −0
Original line number Original line Diff line number Diff line
@@ -1448,6 +1448,12 @@ int create_pkt_cmd_session_set_property(
		case HAL_RATE_CONTROL_VBR_VFR:
		case HAL_RATE_CONTROL_VBR_VFR:
			pkt->rg_property_data[1] = HFI_RATE_CONTROL_VBR_VFR;
			pkt->rg_property_data[1] = HFI_RATE_CONTROL_VBR_VFR;
			break;
			break;
		case HAL_RATE_CONTROL_MBR_CFR:
			pkt->rg_property_data[1] = HFI_RATE_CONTROL_MBR_CFR;
			break;
		case HAL_RATE_CONTROL_MBR_VFR:
			pkt->rg_property_data[1] = HFI_RATE_CONTROL_MBR_VFR;
			break;
		default:
		default:
			dprintk(VIDC_ERR,
			dprintk(VIDC_ERR,
					"Invalid Rate control setting: %p\n",
					"Invalid Rate control setting: %p\n",
@@ -1559,6 +1565,25 @@ int create_pkt_cmd_session_set_property(
			sizeof(struct hfi_quantization_range);
			sizeof(struct hfi_quantization_range);
		break;
		break;
	}
	}
	case HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED:
	{
		struct hfi_quantization_range *hfi;
		struct hfi_quantization_range *hal_range =
			(struct hfi_quantization_range *) pdata;

		pkt->rg_property_data[0] =
			HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE;
		hfi = (struct hfi_quantization_range *)
				&pkt->rg_property_data[1];

		hfi->min_qp = hal_range->min_qp;
		hfi->max_qp = hal_range->max_qp;
		hfi->layer_id = hal_range->layer_id;

		pkt->size += sizeof(u32) +
			sizeof(struct hfi_quantization_range);
		break;
	}
	case HAL_PARAM_VENC_SEARCH_RANGE:
	case HAL_PARAM_VENC_SEARCH_RANGE:
	{
	{
		struct hfi_vc1e_perf_cfg_type *hfi;
		struct hfi_vc1e_perf_cfg_type *hfi;
+72 −2
Original line number Original line Diff line number Diff line
@@ -73,6 +73,8 @@ static const char *const mpeg_video_rate_control[] = {
	"VBR CFR",
	"VBR CFR",
	"CBR VFR",
	"CBR VFR",
	"CBR CFR",
	"CBR CFR",
	"MBR CFR",
	"MBR VFR",
	NULL
	NULL
};
};


@@ -233,7 +235,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.name = "Video Framerate and Bitrate Control",
		.name = "Video Framerate and Bitrate Control",
		.type = V4L2_CTRL_TYPE_MENU,
		.type = V4L2_CTRL_TYPE_MENU,
		.minimum = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_OFF,
		.minimum = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_OFF,
		.maximum = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR,
		.maximum = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR,
		.default_value = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_OFF,
		.default_value = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_OFF,
		.step = 0,
		.step = 0,
		.menu_skip_mask = ~(
		.menu_skip_mask = ~(
@@ -241,7 +243,9 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_VFR) |
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_VFR) |
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR) |
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR) |
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR) |
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR) |
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR)
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR) |
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR) |
		(1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR)
		),
		),
		.qmenu = mpeg_video_rate_control,
		.qmenu = mpeg_video_rate_control,
	},
	},
@@ -528,6 +532,28 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.default_value = 128,
		.default_value = 128,
		.step = 1,
		.step = 1,
	},
	},
	{
		.id = V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED,
		.name = "H264 Minimum QP PACKED",
		.type = V4L2_CTRL_TYPE_INTEGER,
		.minimum = 0x00010101,
		.maximum = 0x00333333,
		.default_value = 0x00010101,
		.step = 1,
		.menu_skip_mask = 0,
		.qmenu = NULL,
	},
	{
		.id = V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED,
		.name = "H264 Maximum QP PACKED",
		.type = V4L2_CTRL_TYPE_INTEGER,
		.minimum = 0x00010101,
		.maximum = 0x00333333,
		.default_value = 0x00333333,
		.step = 1,
		.menu_skip_mask = 0,
		.qmenu = NULL,
	},
	{
	{
		.id = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
		.id = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
		.name = "Slice Mode",
		.name = "Slice Mode",
@@ -2200,10 +2226,14 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
			case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR:
			case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR:
				update_ctrl.val =
				update_ctrl.val =
					V4L2_MPEG_VIDEO_BITRATE_MODE_VBR;
					V4L2_MPEG_VIDEO_BITRATE_MODE_VBR;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR:
			case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR:
			case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR:
			case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR:
			case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR:
			case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR:
				update_ctrl.val =
				update_ctrl.val =
					V4L2_MPEG_VIDEO_BITRATE_MODE_CBR;
					V4L2_MPEG_VIDEO_BITRATE_MODE_CBR;
				break;
			}
			}


			final_mode = ctrl->val;
			final_mode = ctrl->val;
@@ -2508,6 +2538,46 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
		pdata = &qp_range;
		pdata = &qp_range;
		break;
		break;
	}
	}
	case V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED: {
		struct v4l2_ctrl *qp_max;

		qp_max = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED);
		if (ctrl->val >= qp_max->val) {
			dprintk(VIDC_ERR,
					"Bad range: Min QP PACKED (0x%x) > Max QP PACKED (0x%x)\n",
					ctrl->val, qp_max->val);
			rc = -ERANGE;
			break;
		}

		property_id = HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED;
		qp_range.layer_id = 0;
		qp_range.max_qp = qp_max->val;
		qp_range.min_qp = ctrl->val;

		pdata = &qp_range;
		break;
	}
	case V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED: {
		struct v4l2_ctrl *qp_min;

		qp_min = TRY_GET_CTRL(V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED);
		if (ctrl->val <= qp_min->val) {
			dprintk(VIDC_ERR,
					"Bad range: Max QP PACKED (%d) < Min QP PACKED (%d)\n",
					ctrl->val, qp_min->val);
			rc = -ERANGE;
			break;
		}

		property_id = HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED;
		qp_range.layer_id = 0;
		qp_range.max_qp = ctrl->val;
		qp_range.min_qp = qp_min->val;

		pdata = &qp_range;
		break;
	}
	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE: {
	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE: {
		int temp = 0;
		int temp = 0;


+3 −0
Original line number Original line Diff line number Diff line
@@ -363,6 +363,9 @@ struct hfi_hybrid_hierp {
#define HFI_RATE_CONTROL_VBR_CFR	(HFI_OX_BASE + 0x3)
#define HFI_RATE_CONTROL_VBR_CFR	(HFI_OX_BASE + 0x3)
#define HFI_RATE_CONTROL_CBR_VFR	(HFI_OX_BASE + 0x4)
#define HFI_RATE_CONTROL_CBR_VFR	(HFI_OX_BASE + 0x4)
#define HFI_RATE_CONTROL_CBR_CFR	(HFI_OX_BASE + 0x5)
#define HFI_RATE_CONTROL_CBR_CFR	(HFI_OX_BASE + 0x5)
#define HFI_RATE_CONTROL_MBR_CFR	(HFI_OX_BASE + 0x6)
#define HFI_RATE_CONTROL_MBR_VFR	(HFI_OX_BASE + 0x7)



struct hfi_uncompressed_plane_actual_constraints_info {
struct hfi_uncompressed_plane_actual_constraints_info {
	u32 buffer_type;
	u32 buffer_type;
+3 −0
Original line number Original line Diff line number Diff line
@@ -236,6 +236,7 @@ enum hal_property {
	HAL_PARAM_VENC_LOW_LATENCY,
	HAL_PARAM_VENC_LOW_LATENCY,
	HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED,
	HAL_PARAM_VENC_CONSTRAINED_INTRA_PRED,
	HAL_CONFIG_VENC_BLUR_RESOLUTION,
	HAL_CONFIG_VENC_BLUR_RESOLUTION,
	HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED,
};
};


enum hal_domain {
enum hal_domain {
@@ -710,6 +711,8 @@ enum hal_rate_control {
	HAL_RATE_CONTROL_VBR_CFR,
	HAL_RATE_CONTROL_VBR_CFR,
	HAL_RATE_CONTROL_CBR_VFR,
	HAL_RATE_CONTROL_CBR_VFR,
	HAL_RATE_CONTROL_CBR_CFR,
	HAL_RATE_CONTROL_CBR_CFR,
	HAL_RATE_CONTROL_MBR_CFR,
	HAL_RATE_CONTROL_MBR_VFR,
	HAL_UNUSED_RC = 0x10000000,
	HAL_UNUSED_RC = 0x10000000,
};
};


+11 −0
Original line number Original line Diff line number Diff line
@@ -702,7 +702,13 @@ enum v4l2_mpeg_vidc_video_rate_control {
	V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR = 2,
	V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR = 2,
	V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR = 3,
	V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR = 3,
	V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR = 4,
	V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR = 4,
	V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR = 5,
	V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR = 6,
};
};
#define V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR	\
			V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR
#define V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR	\
			V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR


#define V4L2_CID_MPEG_VIDC_VIDEO_ROTATION (V4L2_CID_MPEG_MSM_VIDC_BASE+14)
#define V4L2_CID_MPEG_VIDC_VIDEO_ROTATION (V4L2_CID_MPEG_MSM_VIDC_BASE+14)
enum v4l2_mpeg_vidc_video_rotation {
enum v4l2_mpeg_vidc_video_rotation {
@@ -1155,6 +1161,11 @@ enum v4l2_mpeg_vidc_video_lowlatency_mode {
#define V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT \
#define V4L2_CID_MPEG_VIDC_VIDEO_BLUR_HEIGHT \
	(V4L2_CID_MPEG_MSM_VIDC_BASE + 90)
	(V4L2_CID_MPEG_MSM_VIDC_BASE + 90)


#define V4L2_CID_MPEG_VIDEO_MIN_QP_PACKED \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 91)
#define V4L2_CID_MPEG_VIDEO_MAX_QP_PACKED \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 92)

/*  Camera class control IDs */
/*  Camera class control IDs */


#define V4L2_CID_CAMERA_CLASS_BASE 	(V4L2_CTRL_CLASS_CAMERA | 0x900)
#define V4L2_CID_CAMERA_CLASS_BASE 	(V4L2_CTRL_CLASS_CAMERA | 0x900)