Commit 435c53c3 authored by Stanimir Varbanov's avatar Stanimir Varbanov Committed by Mauro Carvalho Chehab
Browse files

media: venus: venc: Use helper to set profile and level



We have a new helper to set profile and level use it
instead.

Signed-off-by: default avatarStanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 5a86626e
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -239,17 +239,8 @@ struct venc_controls {

	u32 header_mode;

	struct {
		u32 mpeg4;
		u32 h264;
		u32 vpx;
		u32 hevc;
	} profile;
	struct {
		u32 mpeg4;
		u32 h264;
		u32 hevc;
	} level;
	u32 profile;
	u32 level;
};

struct venus_buffer {
+2 −157
Original line number Diff line number Diff line
@@ -113,80 +113,6 @@ find_format_by_index(struct venus_inst *inst, unsigned int index, u32 type)
static int venc_v4l2_to_hfi(int id, int value)
{
	switch (id) {
	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
		switch (value) {
		case V4L2_MPEG_VIDEO_MPEG4_LEVEL_0:
		default:
			return HFI_MPEG4_LEVEL_0;
		case V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B:
			return HFI_MPEG4_LEVEL_0b;
		case V4L2_MPEG_VIDEO_MPEG4_LEVEL_1:
			return HFI_MPEG4_LEVEL_1;
		case V4L2_MPEG_VIDEO_MPEG4_LEVEL_2:
			return HFI_MPEG4_LEVEL_2;
		case V4L2_MPEG_VIDEO_MPEG4_LEVEL_3:
			return HFI_MPEG4_LEVEL_3;
		case V4L2_MPEG_VIDEO_MPEG4_LEVEL_4:
			return HFI_MPEG4_LEVEL_4;
		case V4L2_MPEG_VIDEO_MPEG4_LEVEL_5:
			return HFI_MPEG4_LEVEL_5;
		}
	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
		switch (value) {
		case V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE:
		default:
			return HFI_MPEG4_PROFILE_SIMPLE;
		case V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE:
			return HFI_MPEG4_PROFILE_ADVANCEDSIMPLE;
		}
	case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
		switch (value) {
		case V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE:
			return HFI_H264_PROFILE_BASELINE;
		case V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE:
			return HFI_H264_PROFILE_CONSTRAINED_BASE;
		case V4L2_MPEG_VIDEO_H264_PROFILE_MAIN:
			return HFI_H264_PROFILE_MAIN;
		case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH:
		default:
			return HFI_H264_PROFILE_HIGH;
		}
	case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
		switch (value) {
		case V4L2_MPEG_VIDEO_H264_LEVEL_1_0:
			return HFI_H264_LEVEL_1;
		case V4L2_MPEG_VIDEO_H264_LEVEL_1B:
			return HFI_H264_LEVEL_1b;
		case V4L2_MPEG_VIDEO_H264_LEVEL_1_1:
			return HFI_H264_LEVEL_11;
		case V4L2_MPEG_VIDEO_H264_LEVEL_1_2:
			return HFI_H264_LEVEL_12;
		case V4L2_MPEG_VIDEO_H264_LEVEL_1_3:
			return HFI_H264_LEVEL_13;
		case V4L2_MPEG_VIDEO_H264_LEVEL_2_0:
			return HFI_H264_LEVEL_2;
		case V4L2_MPEG_VIDEO_H264_LEVEL_2_1:
			return HFI_H264_LEVEL_21;
		case V4L2_MPEG_VIDEO_H264_LEVEL_2_2:
			return HFI_H264_LEVEL_22;
		case V4L2_MPEG_VIDEO_H264_LEVEL_3_0:
			return HFI_H264_LEVEL_3;
		case V4L2_MPEG_VIDEO_H264_LEVEL_3_1:
			return HFI_H264_LEVEL_31;
		case V4L2_MPEG_VIDEO_H264_LEVEL_3_2:
			return HFI_H264_LEVEL_32;
		case V4L2_MPEG_VIDEO_H264_LEVEL_4_0:
			return HFI_H264_LEVEL_4;
		case V4L2_MPEG_VIDEO_H264_LEVEL_4_1:
			return HFI_H264_LEVEL_41;
		case V4L2_MPEG_VIDEO_H264_LEVEL_4_2:
			return HFI_H264_LEVEL_42;
		case V4L2_MPEG_VIDEO_H264_LEVEL_5_0:
		default:
			return HFI_H264_LEVEL_5;
		case V4L2_MPEG_VIDEO_H264_LEVEL_5_1:
			return HFI_H264_LEVEL_51;
		}
	case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
		switch (value) {
		case V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC:
@@ -195,18 +121,6 @@ static int venc_v4l2_to_hfi(int id, int value)
		case V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC:
			return HFI_H264_ENTROPY_CABAC;
		}
	case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
		switch (value) {
		case 0:
		default:
			return HFI_VPX_PROFILE_VERSION_0;
		case 1:
			return HFI_VPX_PROFILE_VERSION_1;
		case 2:
			return HFI_VPX_PROFILE_VERSION_2;
		case 3:
			return HFI_VPX_PROFILE_VERSION_3;
		}
	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
		switch (value) {
		case V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED:
@@ -217,46 +131,6 @@ static int venc_v4l2_to_hfi(int id, int value)
		case V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY:
			return HFI_H264_DB_MODE_SKIP_SLICE_BOUNDARY;
		}
	case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
		switch (value) {
		case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN:
		default:
			return HFI_HEVC_PROFILE_MAIN;
		case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE:
			return HFI_HEVC_PROFILE_MAIN_STILL_PIC;
		case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10:
			return HFI_HEVC_PROFILE_MAIN10;
		}
	case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
		switch (value) {
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_1:
		default:
			return HFI_HEVC_LEVEL_1;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_2:
			return HFI_HEVC_LEVEL_2;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1:
			return HFI_HEVC_LEVEL_21;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_3:
			return HFI_HEVC_LEVEL_3;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1:
			return HFI_HEVC_LEVEL_31;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_4:
			return HFI_HEVC_LEVEL_4;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1:
			return HFI_HEVC_LEVEL_41;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_5:
			return HFI_HEVC_LEVEL_5;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1:
			return HFI_HEVC_LEVEL_51;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2:
			return HFI_HEVC_LEVEL_52;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_6:
			return HFI_HEVC_LEVEL_6;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1:
			return HFI_HEVC_LEVEL_61;
		case V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2:
			return HFI_HEVC_LEVEL_62;
		}
	}

	return 0;
@@ -657,13 +531,12 @@ static int venc_set_properties(struct venus_inst *inst)
{
	struct venc_controls *ctr = &inst->controls.enc;
	struct hfi_intra_period intra_period;
	struct hfi_profile_level pl;
	struct hfi_framerate frate;
	struct hfi_bitrate brate;
	struct hfi_idr_period idrp;
	struct hfi_quantization quant;
	struct hfi_quantization_range quant_range;
	u32 ptype, rate_control, bitrate, profile = 0, level = 0;
	u32 ptype, rate_control, bitrate;
	int ret;

	ret = venus_helper_set_work_mode(inst, VIDC_WORK_MODE_2);
@@ -811,35 +684,7 @@ static int venc_set_properties(struct venus_inst *inst)
	if (ret)
		return ret;

	if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H264) {
		profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_H264_PROFILE,
					   ctr->profile.h264);
		level = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_H264_LEVEL,
					 ctr->level.h264);
	} else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_VP8) {
		profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_VP8_PROFILE,
					   ctr->profile.vpx);
		level = 0;
	} else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_MPEG4) {
		profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE,
					   ctr->profile.mpeg4);
		level = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL,
					 ctr->level.mpeg4);
	} else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H263) {
		profile = 0;
		level = 0;
	} else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC) {
		profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
					   ctr->profile.hevc);
		level = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
					 ctr->level.hevc);
	}

	ptype = HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT;
	pl.profile = profile;
	pl.level = level;

	ret = hfi_session_set_property(inst, ptype, &pl);
	ret = venus_helper_set_profile_level(inst, ctr->profile, ctr->level);
	if (ret)
		return ret;

+2 −12
Original line number Diff line number Diff line
@@ -103,25 +103,15 @@ static int venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
		ctr->h264_entropy_mode = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
		ctr->profile.mpeg4 = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
		ctr->profile.h264 = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
		ctr->profile.hevc = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
		ctr->profile.vpx = ctrl->val;
		ctr->profile = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
		ctr->level.mpeg4 = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
		ctr->level.h264 = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
		ctr->level.hevc = ctrl->val;
		ctr->level = ctrl->val;
		break;
	case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP:
		ctr->h264_i_qp = ctrl->val;