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

Commit 14bb9459 authored by Govindaraj Rajagopal's avatar Govindaraj Rajagopal
Browse files

msm: vidc: venc: set signal_info to firmware always



Currently setting signal_info, only if colorspace info
is set properly. But sometimes client can set only range.
So need to send signal_info always to firmware.

Change-Id: I5282ec01b473485ec39f39abbf7160b9c5cc0256
Signed-off-by: default avatarGovindaraj Rajagopal <grajagop@codeaurora.org>
parent 9cbbda0d
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -1861,6 +1861,9 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
			inst->clk_data.frame_rate = 1 << 16;
		}
		break;
	case V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE:
		inst->full_range = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDC_CAPTURE_FRAME_RATE:
	case V4L2_CID_MPEG_VIDC_VIDEO_HEVC_MAX_HIER_CODING_LAYER:
	case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:
@@ -1880,7 +1883,6 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
	case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP:
	case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP:
	case V4L2_CID_MPEG_VIDC_VIDEO_COLOR_SPACE:
	case V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE:
	case V4L2_CID_MPEG_VIDC_VIDEO_TRANSFER_CHARS:
	case V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS:
	case V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC:
@@ -3622,16 +3624,24 @@ int msm_venc_set_video_signal_info(struct msm_vidc_inst *inst)
	ctrl_fr = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE);
	ctrl_tr = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_TRANSFER_CHARS);
	ctrl_mc = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS);
	if (ctrl_cs->val == MSM_VIDC_RESERVED_1)
		return 0;

	memset(&signal_info, 0, sizeof(struct hfi_video_signal_metadata));
	if (inst->full_range == COLOR_RANGE_UNSPECIFIED &&
		ctrl_cs->val == MSM_VIDC_RESERVED_1)
		signal_info.enable = false;
	else
		signal_info.enable = true;

	if (signal_info.enable) {
		signal_info.video_format = MSM_VIDC_NTSC;
		signal_info.video_full_range = ctrl_fr->val;
		if (ctrl_cs->val != MSM_VIDC_RESERVED_1) {
			signal_info.color_description = 1;
			signal_info.color_primaries = ctrl_cs->val;
			signal_info.transfer_characteristics = ctrl_tr->val;
			signal_info.matrix_coeffs = ctrl_mc->val;
		}
	}

	s_vpr_h(inst->sid, "%s: %d %d %d %d\n", __func__,
		signal_info.color_primaries, signal_info.video_full_range,
+1 −0
Original line number Diff line number Diff line
@@ -1609,6 +1609,7 @@ void *msm_vidc_open(int core_id, int session_type)
	inst->all_intra = false;
	inst->max_filled_len = 0;
	inst->entropy_mode = HFI_H264_ENTROPY_CABAC;
	inst->full_range = COLOR_RANGE_UNSPECIFIED;

	for (i = SESSION_MSG_INDEX(SESSION_MSG_START);
		i <= SESSION_MSG_INDEX(SESSION_MSG_END); i++) {
+2 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@
#define DCVS_FTB_WINDOW 16
/* Superframe can have maximum of 32 frames */
#define VIDC_SUPERFRAME_MAX 32
#define COLOR_RANGE_UNSPECIFIED (-1)

#define V4L2_EVENT_VIDC_BASE  10
#define INPUT_MPLANE V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE
@@ -568,6 +569,7 @@ struct msm_vidc_inst {
	bool all_intra;
	bool is_perf_eligible_session;
	u32 max_filled_len;
	int full_range;
};

extern struct msm_vidc_drv *vidc_driver;