diff options
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-ctrls.c')
| -rw-r--r-- | drivers/media/v4l2-core/v4l2-ctrls.c | 74 | 
1 files changed, 74 insertions, 0 deletions
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c index 631cdc0e0bd..f6ee201d934 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls.c +++ b/drivers/media/v4l2-core/v4l2-ctrls.c @@ -384,6 +384,25 @@ const char * const *v4l2_ctrl_get_menu(u32 id)  		"Extended SAR",  		NULL,  	}; +	static const char * const h264_fp_arrangement_type[] = { +		"Checkerboard", +		"Column", +		"Row", +		"Side by Side", +		"Top Bottom", +		"Temporal", +		NULL, +	}; +	static const char * const h264_fmo_map_type[] = { +		"Interleaved Slices", +		"Scattered Slices", +		"Foreground with Leftover", +		"Box Out", +		"Raster Scan", +		"Wipe Scan", +		"Explicit", +		NULL, +	};  	static const char * const mpeg_mpeg4_level[] = {  		"0",  		"0b", @@ -508,6 +527,10 @@ const char * const *v4l2_ctrl_get_menu(u32 id)  		return h264_profile;  	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:  		return vui_sar_idc; +	case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE: +		return h264_fp_arrangement_type; +	case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE: +		return h264_fmo_map_type;  	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:  		return mpeg_mpeg4_level;  	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE: @@ -643,6 +666,22 @@ const char *v4l2_ctrl_get_name(u32 id)  	case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH:	return "Horizontal Size of SAR";  	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:		return "Aspect Ratio VUI Enable";  	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:		return "VUI Aspect Ratio IDC"; +	case V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING:	return "H264 Enable Frame Packing SEI"; +	case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0:	return "H264 Set Curr. Frame as Frame0"; +	case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:	return "H264 FP Arrangement Type"; +	case V4L2_CID_MPEG_VIDEO_H264_FMO:			return "H264 Flexible MB Ordering"; +	case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:		return "H264 Map Type for FMO"; +	case V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP:		return "H264 FMO Number of Slice Groups"; +	case V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION:	return "H264 FMO Direction of Change"; +	case V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE:		return "H264 FMO Size of 1st Slice Grp"; +	case V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH:		return "H264 FMO No. of Consecutive MBs"; +	case V4L2_CID_MPEG_VIDEO_H264_ASO:			return "H264 Arbitrary Slice Ordering"; +	case V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER:		return "H264 ASO Slice Order"; +	case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING:	return "Enable H264 Hierarchical Coding"; +	case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE:	return "H264 Hierarchical Coding Type"; +	case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER:return "H264 Number of HC Layers"; +	case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP: +								return "H264 Set QP Value for HC Layers";  	case V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP:		return "MPEG4 I-Frame QP Value";  	case V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP:		return "MPEG4 P-Frame QP Value";  	case V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP:		return "MPEG4 B-Frame QP Value"; @@ -657,6 +696,7 @@ const char *v4l2_ctrl_get_name(u32 id)  	case V4L2_CID_MPEG_VIDEO_VBV_SIZE:			return "VBV Buffer Size";  	case V4L2_CID_MPEG_VIDEO_DEC_PTS:			return "Video Decoder PTS";  	case V4L2_CID_MPEG_VIDEO_DEC_FRAME:			return "Video Decoder Frame Count"; +	case V4L2_CID_MPEG_VIDEO_VBV_DELAY:			return "Initial Delay for VBV Control";  	/* CAMERA controls */  	/* Keep the order of the 'case's the same as in videodev2.h! */ @@ -749,6 +789,7 @@ const char *v4l2_ctrl_get_name(u32 id)  	case V4L2_CID_IMAGE_PROC_CLASS:		return "Image Processing Controls";  	case V4L2_CID_LINK_FREQ:		return "Link Frequency";  	case V4L2_CID_PIXEL_RATE:		return "Pixel Rate"; +	case V4L2_CID_TEST_PATTERN:		return "Test Pattern";  	/* DV controls */  	case V4L2_CID_DV_CLASS:			return "Digital Video Controls"; @@ -853,6 +894,8 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,  	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:  	case V4L2_CID_MPEG_VIDEO_H264_PROFILE:  	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC: +	case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE: +	case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:  	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:  	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:  	case V4L2_CID_JPEG_CHROMA_SUBSAMPLING: @@ -862,6 +905,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,  	case V4L2_CID_DV_TX_MODE:  	case V4L2_CID_DV_TX_RGB_RANGE:  	case V4L2_CID_DV_RX_RGB_RANGE: +	case V4L2_CID_TEST_PATTERN:  		*type = V4L2_CTRL_TYPE_MENU;  		break;  	case V4L2_CID_LINK_FREQ: @@ -1648,6 +1692,36 @@ struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,  }  EXPORT_SYMBOL(v4l2_ctrl_new_std_menu); +/* Helper function for standard menu controls with driver defined menu */ +struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl, +			const struct v4l2_ctrl_ops *ops, u32 id, s32 max, +			s32 mask, s32 def, const char * const *qmenu) +{ +	enum v4l2_ctrl_type type; +	const char *name; +	u32 flags; +	s32 step; +	s32 min; + +	/* v4l2_ctrl_new_std_menu_items() should only be called for +	 * standard controls without a standard menu. +	 */ +	if (v4l2_ctrl_get_menu(id)) { +		handler_set_err(hdl, -EINVAL); +		return NULL; +	} + +	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags); +	if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) { +		handler_set_err(hdl, -EINVAL); +		return NULL; +	} +	return v4l2_ctrl_new(hdl, ops, id, name, type, 0, max, mask, def, +			     flags, qmenu, NULL, NULL); + +} +EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items); +  /* Helper function for standard integer menu controls */  struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,  			const struct v4l2_ctrl_ops *ops,  |