media: venus: add HEVC codec support
This add HEVC codec support for venus versions 3xx and 4xx. Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org> Reviewed-by: Tomasz Figa <tfiga@chromium.org> Reviewed-by: Alexandre Courbot <acourbot@chromium.org> Tested-by: Alexandre Courbot <acourbot@chromium.org> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
		
							parent
							
								
									0e8954a415
								
							
						
					
					
						commit
						1fb9a60555
					
				| @ -190,10 +190,12 @@ struct venc_controls { | ||||
| 		u32 mpeg4; | ||||
| 		u32 h264; | ||||
| 		u32 vpx; | ||||
| 		u32 hevc; | ||||
| 	} profile; | ||||
| 	struct { | ||||
| 		u32 mpeg4; | ||||
| 		u32 h264; | ||||
| 		u32 hevc; | ||||
| 	} level; | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -71,6 +71,9 @@ bool venus_helper_check_codec(struct venus_inst *inst, u32 v4l2_pixfmt) | ||||
| 	case V4L2_PIX_FMT_XVID: | ||||
| 		codec = HFI_VIDEO_CODEC_DIVX; | ||||
| 		break; | ||||
| 	case V4L2_PIX_FMT_HEVC: | ||||
| 		codec = HFI_VIDEO_CODEC_HEVC; | ||||
| 		break; | ||||
| 	default: | ||||
| 		return false; | ||||
| 	} | ||||
|  | ||||
| @ -49,6 +49,8 @@ static u32 to_codec_type(u32 pixfmt) | ||||
| 		return HFI_VIDEO_CODEC_VP9; | ||||
| 	case V4L2_PIX_FMT_XVID: | ||||
| 		return HFI_VIDEO_CODEC_DIVX; | ||||
| 	case V4L2_PIX_FMT_HEVC: | ||||
| 		return HFI_VIDEO_CODEC_HEVC; | ||||
| 	default: | ||||
| 		return 0; | ||||
| 	} | ||||
|  | ||||
| @ -77,6 +77,10 @@ static const struct venus_format vdec_formats[] = { | ||||
| 		.pixfmt = V4L2_PIX_FMT_XVID, | ||||
| 		.num_planes = 1, | ||||
| 		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, | ||||
| 	}, { | ||||
| 		.pixfmt = V4L2_PIX_FMT_HEVC, | ||||
| 		.num_planes = 1, | ||||
| 		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -59,6 +59,10 @@ static const struct venus_format venc_formats[] = { | ||||
| 		.pixfmt = V4L2_PIX_FMT_VP8, | ||||
| 		.num_planes = 1, | ||||
| 		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, | ||||
| 	}, { | ||||
| 		.pixfmt = V4L2_PIX_FMT_HEVC, | ||||
| 		.num_planes = 1, | ||||
| 		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| @ -220,6 +224,46 @@ 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; | ||||
| @ -742,6 +786,11 @@ static int venc_set_properties(struct venus_inst *inst) | ||||
| 	} 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; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user