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

Commit e8b8d6a7 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: venc: Layer bitrate setting bug fix" into msm-4.9

parents 3404bf57 2c072537
Loading
Loading
Loading
Loading
+78 −113
Original line number Diff line number Diff line
@@ -1353,7 +1353,7 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
	{
		property_id = HAL_CONFIG_VENC_TARGET_BITRATE;
		bitrate.bit_rate = ctrl->val;
		bitrate.layer_id = 0;
		bitrate.layer_id = MSM_VIDC_ALL_LAYER_ID;
		pdata = &bitrate;
		inst->bitrate = ctrl->val;
		break;
@@ -1976,7 +1976,7 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst,
	struct v4l2_ext_controls *ctrl)
{
	int rc = 0, i, j = 0;
	int rc = 0, i;
	struct v4l2_ext_control *control;
	struct hfi_device *hdev;
	struct hal_ltr_mode ltr_mode;
@@ -2044,32 +2044,6 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst,
			property_id = HAL_PROPERTY_PARAM_VENC_ASPECT_RATIO;
			pdata = &sar;
			break;
		case V4L2_CID_MPEG_VIDC_VENC_PARAM_LAYER_BITRATE:
		{
			if (control[i].value) {
				bitrate.layer_id = i;
				bitrate.bit_rate = control[i].value;
				property_id = HAL_CONFIG_VENC_TARGET_BITRATE;
				pdata = &bitrate;
				dprintk(VIDC_DBG, "bitrate for layer(%d)=%d\n",
					i, bitrate.bit_rate);
				rc = call_hfi_op(hdev, session_set_property,
					(void *)inst->session, property_id,
					 pdata);
				if (rc) {
					dprintk(VIDC_DBG, "prop %x failed\n",
						property_id);
					return rc;
				}
				if (i == MAX_HYBRID_HIER_P_LAYERS - 1) {
					dprintk(VIDC_DBG, "HAL property=%x\n",
						property_id);
					property_id = 0;
					rc = 0;
				}
			}
			break;
		}
		case V4L2_CID_MPEG_VIDC_VIDEO_BLUR_WIDTH:
			property_id = HAL_CONFIG_VENC_BLUR_RESOLUTION;
			blur_res.width = control[i].value;
@@ -2084,92 +2058,83 @@ int msm_venc_s_ext_ctrl(struct msm_vidc_inst *inst,
			pdata = &blur_res;
			break;
		case V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID:
			j = i;
			layer_id = control[j].value;
			do {
				switch (control[j].id) {
			layer_id = control[i].value;
			i++;
			while (i < ctrl->count) {
			switch (control[i].id) {
			case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP:
					qp.qpi = control[j].value;
				qp.qpi = control[i].value;
				qp.layer_id = layer_id;
				property_id =
					HAL_CONFIG_VENC_FRAME_QP;
				pdata = &qp;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP:
					qp.qpp = control[j].value;
				qp.qpp = control[i].value;
				qp.layer_id = layer_id;
				property_id =
					HAL_CONFIG_VENC_FRAME_QP;
				pdata = &qp;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP:
					qp.qpb = control[j].value;
				qp.qpb = control[i].value;
				qp.layer_id = layer_id;
				property_id =
					HAL_CONFIG_VENC_FRAME_QP;
				pdata = &qp;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MIN:
					qp_range.qpi_min = control[j].value;
				qp_range.qpi_min = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MIN:
					qp_range.qpp_min = control[j].value;
				qp_range.qpp_min = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
				HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MIN:
					qp_range.qpb_min = control[j].value;
				qp_range.qpb_min = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP_MAX:
					qp_range.qpi_max = control[j].value;
				qp_range.qpi_max = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP_MAX:
					qp_range.qpp_max = control[j].value;
				qp_range.qpp_max = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP_MAX:
					qp_range.qpb_max = control[j].value;
				qp_range.qpb_max = control[i].value;
				qp_range.layer_id = layer_id;
				property_id =
					HAL_PARAM_VENC_SESSION_QP_RANGE;
				pdata = &qp_range;
				break;
			case V4L2_CID_MPEG_VIDC_VENC_PARAM_LAYER_BITRATE:
				bitrate.bit_rate = control[i].value;
				bitrate.layer_id = layer_id;
				property_id =
					HAL_CONFIG_VENC_TARGET_BITRATE;
				pdata = &bitrate;
				break;
			}
				j++;
			} while ((j < ctrl->count) &&
				control[j].id !=
					V4L2_CID_MPEG_VIDC_VIDEO_LAYER_ID);
			if (!rc && property_id) {
				dprintk(VIDC_DBG, "Control: HAL property=%x\n",
					 property_id);
				rc = call_hfi_op(hdev, session_set_property,
						(void *)inst->session,
						property_id, pdata);
				if (rc) {
					dprintk(VIDC_ERR, "prop %x failed\n",
						property_id);
					return rc;
				}
				property_id = 0;
			i++;
			}
			i = j - 1;
			break;
		default:
			dprintk(VIDC_ERR, "Invalid id set: %d\n",
+1 −0
Original line number Diff line number Diff line
@@ -150,6 +150,7 @@ int msm_vidc_query_ctrl(void *instance, struct v4l2_queryctrl *ctrl)
	case V4L2_CID_MPEG_VIDC_VIDEO_HIER_P_NUM_LAYERS:
		msm_vidc_ctrl_get_range(ctrl, &inst->capability.hier_p);
		break;
	case V4L2_CID_MPEG_VIDC_VENC_PARAM_LAYER_BITRATE:
	case  V4L2_CID_MPEG_VIDEO_BITRATE:
		msm_vidc_ctrl_get_range(ctrl, &inst->capability.bitrate);
		break;
+3 −0
Original line number Diff line number Diff line
@@ -1185,6 +1185,9 @@ static void msm_vidc_comm_update_ctrl_limits(struct msm_vidc_inst *inst)
			&inst->capability.hier_p);
	msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDEO_BITRATE,
			&inst->capability.bitrate);
	msm_vidc_comm_update_ctrl(inst,
			V4L2_CID_MPEG_VIDC_VENC_PARAM_LAYER_BITRATE,
			&inst->capability.bitrate);
	msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
			&inst->capability.peakbitrate);
	msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP,