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

Commit ef2f0bc6 authored by Ashray Kulkarni's avatar Ashray Kulkarni
Browse files

msm: vidc: add support for bitrate_type control



When setting layer wise bitrates, firmware accumulates all bitrates
and re-distributes them to each layer. This change ensures firmware
honors layer wise/cumulative bitrate settings.

Change-Id: Iefe6f1b89eb45c6f585a5d19e5204eccb0fdb63f
Signed-off-by: default avatarAshray Kulkarni <ashrayk@codeaurora.org>
parent 81a98d6e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1960,6 +1960,14 @@ int create_pkt_cmd_session_set_property(
				sizeof(struct hfi_aspect_ratio);
		break;
	}
	case HAL_PARAM_VENC_BITRATE_TYPE:
	{
		create_pkt_enable(pkt->rg_property_data,
			HFI_PROPERTY_PARAM_VENC_BITRATE_TYPE,
			((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:
+26 −0
Original line number Diff line number Diff line
@@ -1172,6 +1172,15 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
		.default_value = 0,
		.step = OPERATING_FRAME_RATE_STEP,
	},
	{
		.id = V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_TYPE,
		.name = "BITRATE TYPE",
		.type = V4L2_CTRL_TYPE_BOOLEAN,
		.minimum = V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_DISABLE,
		.maximum = V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_ENABLE,
		.default_value = V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_ENABLE,
		.step = 1,
	},
};

#define NUM_CTRLS ARRAY_SIZE(msm_venc_ctrls)
@@ -1512,6 +1521,7 @@ static int set_bitrate_for_each_layer(struct msm_vidc_inst *inst,
	int i = 0, rc = 0;
	struct hfi_device *hdev = NULL;
	struct hal_bitrate bitrate;
	struct hal_enable enable;
	int bitrate_table[3][4] = {
		{50, 50, 0, 0},
		{34, 33, 33, 0},
@@ -1530,6 +1540,15 @@ static int set_bitrate_for_each_layer(struct msm_vidc_inst *inst,
	}
	hdev = inst->core->device;

	property_id = HAL_PARAM_VENC_BITRATE_TYPE;
	enable.enable = V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_ENABLE;
	rc = call_hfi_op(hdev, session_set_property,
			(void *)inst->session, property_id, &enable);
	if (rc) {
		dprintk(VIDC_ERR, "Failed to set layerwise bitrate\n");
		return false;
	}

	for (i = 0; !rc && i <= num_enh_layers; i++) {
		property_id = HAL_CONFIG_VENC_TARGET_BITRATE;
		bitrate.bit_rate = (u32)((total_bitrate *
@@ -2922,6 +2941,13 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_OPERATING_RATE:
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_TYPE:
	{
		property_id = HAL_PARAM_VENC_BITRATE_TYPE;
		enable.enable = ctrl->val;
		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
@@ -223,6 +223,7 @@ enum hal_property {
	HAL_PARAM_VENC_VQZIP_SEI,
	HAL_PROPERTY_PARAM_VENC_ASPECT_RATIO,
	HAL_CONFIG_VDEC_ENTROPY,
	HAL_PARAM_VENC_BITRATE_TYPE,
};

enum hal_domain {
+2 −0
Original line number Diff line number Diff line
@@ -369,6 +369,8 @@ struct hfi_buffer_info {
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x02C)
#define  HFI_PROPERTY_PARAM_VENC_HIER_P_HYBRID_MODE	\
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x02F)
#define  HFI_PROPERTY_PARAM_VENC_BITRATE_TYPE		\
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x031)
#define  HFI_PROPERTY_PARAM_VENC_VQZIP_SEI_TYPE		\
	(HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x033)

+9 −0
Original line number Diff line number Diff line
@@ -1107,6 +1107,15 @@ enum v4l2_mpeg_vidc_video_priority {
#define V4L2_CID_MPEG_VIDC_VIDEO_OPERATING_RATE \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 84)

#define V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_TYPE \
		(V4L2_CID_MPEG_MSM_VIDC_BASE + 85)

enum v4l2_mpeg_vidc_video_venc_bitrate_type_enable {
	V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_DISABLE	= 0,
	V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_ENABLE	= 1
};


/*  Camera class control IDs */

#define V4L2_CID_CAMERA_CLASS_BASE 	(V4L2_CTRL_CLASS_CAMERA | 0x900)