Message ID | 20240717125426.32660-3-yelian.wang@mediatek.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | media: mediatek: Add support MT8188 AIE | expand |
Hi, Le mercredi 17 juillet 2024 à 20:41 +0800, 20220614094956 created a écrit : > From: Yelian Wang <yelian.wang@mediatek.com> > > Add AIE control related definitions I'm not yet providing a review at this stage since this patch will need more work. When adding new CIDs, you should make sure these are truly specific to your hardware before opting for vendor controls IDs. You commit message should detail your reasoning toward is non-generic choice. V4L2 CID are by nature generic for userspace and we strongly prefer if re-usable CID gets defined. This allow making less userspace code that runs on more hardware. Face detection isn't a new thing, it has never been exposed in Linux Media, but you'll find that it existed and is document on Samsung Exynos 4 platforms notably. The second aspect is documentation. When writing documentation for your driver controls, consider that the user have no background about your platform. Provide all the necessary information to use you userspace API (uAPI), and expand at least once any acronym that you are using. When introduce binary metadata format, ensure that you document how to parse this format in userspace. Finally, if the CID are not selft explanatory, an dedicated documentation is needed. You'll find this for CODECs (way more complex) but also for architecture specific features like older IMX Media Controller. A final note, it could be nice to fix you email client, its printing "20220614094956 created" instead of "Yelian Wang". regards, Nicolas > > Signed-off-by: Yelian Wang <yelian.wang@mediatek.com> > --- > include/uapi/linux/mtk_aie_v4l2_controls.h | 130 +++++++++++++++++++++ > include/uapi/linux/videodev2.h | 6 + > 2 files changed, 136 insertions(+) > create mode 100644 include/uapi/linux/mtk_aie_v4l2_controls.h > > diff --git a/include/uapi/linux/mtk_aie_v4l2_controls.h b/include/uapi/linux/mtk_aie_v4l2_controls.h > new file mode 100644 > index 000000000000..f4be180c8ddf > --- /dev/null > +++ b/include/uapi/linux/mtk_aie_v4l2_controls.h > @@ -0,0 +1,130 @@ > +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ > +/* > + * AIE Controls Header > + * > + * Copyright (c) 2020 MediaTek Inc. > + * Author: Fish Wu <fish.wu@mediatek.com> > + */ > + > +#ifndef __MTK_AIE_V4L2_CONTROLS_H__ > +#define __MTK_AIE_V4L2_CONTROLS_H__ > + > +#include <linux/types.h> > + > +/* > + * The base for the mediatek FD driver controls. > + * We reserve 16 controls for this driver. > + */ > +#define V4L2_CID_USER_MTK_FD_BASE (V4L2_CID_USER_BASE + 0x1fd0) > + > +#define V4L2_CID_MTK_AIE_INIT (V4L2_CID_USER_MTK_FD_BASE + 1) > +#define V4L2_CID_MTK_AIE_PARAM (V4L2_CID_USER_MTK_FD_BASE + 2) > + > +#define V4L2_FLD_MAX_FRAME 15 > + > +/** > + * struct v4l2_ctrl_aie_init - aie init parameters. > + * > + * @max_img_width: maximum width of the source image. > + * @max_img_height: maximum height of the source image. > + * @pyramid_width: maximum width of the base pyramid. > + * @pyramid_height: maximum height of the base pyramid. > + * @feature_threshold: feature threshold for hareware. > + */ > +struct v4l2_ctrl_aie_init { > + __u32 max_img_width; > + __u32 max_img_height; > + __u32 pyramid_width; > + __u32 pyramid_height; > + __s32 feature_threshold; > +}; > + > +/** > + * struct v4l2_aie_roi - aie roi parameters. > + * > + * @x1: x1 of the roi coordinate. > + * @y1: y1 of the roi coordinate. > + * @x2: x2 of the roi coordinate. > + * @y2: y2 of the roi coordinate. > + */ > +struct v4l2_aie_roi { > + __u32 x1; > + __u32 y1; > + __u32 x2; > + __u32 y2; > +}; > + > +/** > + * struct v4l2_aie_padding - aie padding parameters. > + * > + * @left: the size of padding left. > + * @right: the size of padding right. > + * @down: the size of padding below. > + * @up: the size of padding above. > + */ > +struct v4l2_aie_padding { > + __u32 left; > + __u32 right; > + __u32 down; > + __u32 up; > +}; > + > +/** > + * struct v4l2_fld_crop_rip_rop - aie fld parameters. > + * > + * @fld_in_crop_x1: x1 of the crop coordinate. > + * @fld_in_crop_y1: y1 of the crop coordinate. > + * @fld_in_crop_x2: x2 of the crop coordinate. > + * @fld_in_crop_y2: y2 of the crop coordinate. > + * @fld_in_rip: fld in rip. > + * @fld_in_rop: fld in rop. > + */ > +struct v4l2_fld_crop_rip_rop { > + __u32 fld_in_crop_x1; > + __u32 fld_in_crop_y1; > + __u32 fld_in_crop_x2; > + __u32 fld_in_crop_y2; > + __u32 fld_in_rip; > + __u32 fld_in_rop; > +}; > + > +/** > + * struct v4l2_fld_crop_rip_rop - aie fld parameters. > + * > + * @fd_mode: select a mode for current fd. > + * @src_img_fmt: source image format. > + * @src_img_width: the width of the source image. > + * @src_img_height: the height of the source image. > + * @src_img_stride: the stride of the source image. > + * @pyramid_base_width: the width of the base pyramid. > + * @pyramid_base_height: the width of the base pyramid. > + * @number_of_pyramid: number of pyramid. > + * @rotate_degree: the rotate degree of the image. > + * @en_roi: enable roi. > + * @src_roi: roi params. > + * @en_padding: enable padding. > + * @src_padding: padding params. > + * @freq_level: frequency level. > + * @fld_face_num: the number of faces in fld. > + * @fld_input: fld input params. > + */ > +struct v4l2_ctrl_aie_param { > + __u32 fd_mode; > + __u32 src_img_fmt; > + __u32 src_img_width; > + __u32 src_img_height; > + __u32 src_img_stride; > + __u32 pyramid_base_width; > + __u32 pyramid_base_height; > + __u32 number_of_pyramid; > + __u32 rotate_degree; > + __s32 en_roi; > + struct v4l2_aie_roi src_roi; > + __s32 en_padding; > + struct v4l2_aie_padding src_padding; > + __u32 freq_level; > + __u32 fld_face_num; > + struct v4l2_fld_crop_rip_rop fld_input[V4L2_FLD_MAX_FRAME]; > +}; > + > +#endif /* __MTK_AIE_V4L2_CONTROLS_H__ */ > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index 4e91362da6da..a5d54b683b7d 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -858,6 +858,9 @@ struct v4l2_pix_format { > /* Vendor specific - used for RaspberryPi PiSP */ > #define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') /* PiSP BE configuration */ > > +/* Vendor-specific definition: used for the MediaTek camera subsystem's face detection results */ > +#define V4L2_META_FMT_MTFD_RESULT v4l2_fourcc('M', 'T', 'f', 'd') > + > #ifdef __KERNEL__ > /* > * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when > @@ -1953,6 +1956,9 @@ enum v4l2_ctrl_type { > V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY = 0x281, > V4L2_CTRL_TYPE_AV1_FRAME = 0x282, > V4L2_CTRL_TYPE_AV1_FILM_GRAIN = 0x283, > + > + V4L2_CTRL_TYPE_AIE_INIT = 0x0290, > + V4L2_CTRL_TYPE_AIE_PARAM = 0x0291, > }; > > /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
diff --git a/include/uapi/linux/mtk_aie_v4l2_controls.h b/include/uapi/linux/mtk_aie_v4l2_controls.h new file mode 100644 index 000000000000..f4be180c8ddf --- /dev/null +++ b/include/uapi/linux/mtk_aie_v4l2_controls.h @@ -0,0 +1,130 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * AIE Controls Header + * + * Copyright (c) 2020 MediaTek Inc. + * Author: Fish Wu <fish.wu@mediatek.com> + */ + +#ifndef __MTK_AIE_V4L2_CONTROLS_H__ +#define __MTK_AIE_V4L2_CONTROLS_H__ + +#include <linux/types.h> + +/* + * The base for the mediatek FD driver controls. + * We reserve 16 controls for this driver. + */ +#define V4L2_CID_USER_MTK_FD_BASE (V4L2_CID_USER_BASE + 0x1fd0) + +#define V4L2_CID_MTK_AIE_INIT (V4L2_CID_USER_MTK_FD_BASE + 1) +#define V4L2_CID_MTK_AIE_PARAM (V4L2_CID_USER_MTK_FD_BASE + 2) + +#define V4L2_FLD_MAX_FRAME 15 + +/** + * struct v4l2_ctrl_aie_init - aie init parameters. + * + * @max_img_width: maximum width of the source image. + * @max_img_height: maximum height of the source image. + * @pyramid_width: maximum width of the base pyramid. + * @pyramid_height: maximum height of the base pyramid. + * @feature_threshold: feature threshold for hareware. + */ +struct v4l2_ctrl_aie_init { + __u32 max_img_width; + __u32 max_img_height; + __u32 pyramid_width; + __u32 pyramid_height; + __s32 feature_threshold; +}; + +/** + * struct v4l2_aie_roi - aie roi parameters. + * + * @x1: x1 of the roi coordinate. + * @y1: y1 of the roi coordinate. + * @x2: x2 of the roi coordinate. + * @y2: y2 of the roi coordinate. + */ +struct v4l2_aie_roi { + __u32 x1; + __u32 y1; + __u32 x2; + __u32 y2; +}; + +/** + * struct v4l2_aie_padding - aie padding parameters. + * + * @left: the size of padding left. + * @right: the size of padding right. + * @down: the size of padding below. + * @up: the size of padding above. + */ +struct v4l2_aie_padding { + __u32 left; + __u32 right; + __u32 down; + __u32 up; +}; + +/** + * struct v4l2_fld_crop_rip_rop - aie fld parameters. + * + * @fld_in_crop_x1: x1 of the crop coordinate. + * @fld_in_crop_y1: y1 of the crop coordinate. + * @fld_in_crop_x2: x2 of the crop coordinate. + * @fld_in_crop_y2: y2 of the crop coordinate. + * @fld_in_rip: fld in rip. + * @fld_in_rop: fld in rop. + */ +struct v4l2_fld_crop_rip_rop { + __u32 fld_in_crop_x1; + __u32 fld_in_crop_y1; + __u32 fld_in_crop_x2; + __u32 fld_in_crop_y2; + __u32 fld_in_rip; + __u32 fld_in_rop; +}; + +/** + * struct v4l2_fld_crop_rip_rop - aie fld parameters. + * + * @fd_mode: select a mode for current fd. + * @src_img_fmt: source image format. + * @src_img_width: the width of the source image. + * @src_img_height: the height of the source image. + * @src_img_stride: the stride of the source image. + * @pyramid_base_width: the width of the base pyramid. + * @pyramid_base_height: the width of the base pyramid. + * @number_of_pyramid: number of pyramid. + * @rotate_degree: the rotate degree of the image. + * @en_roi: enable roi. + * @src_roi: roi params. + * @en_padding: enable padding. + * @src_padding: padding params. + * @freq_level: frequency level. + * @fld_face_num: the number of faces in fld. + * @fld_input: fld input params. + */ +struct v4l2_ctrl_aie_param { + __u32 fd_mode; + __u32 src_img_fmt; + __u32 src_img_width; + __u32 src_img_height; + __u32 src_img_stride; + __u32 pyramid_base_width; + __u32 pyramid_base_height; + __u32 number_of_pyramid; + __u32 rotate_degree; + __s32 en_roi; + struct v4l2_aie_roi src_roi; + __s32 en_padding; + struct v4l2_aie_padding src_padding; + __u32 freq_level; + __u32 fld_face_num; + struct v4l2_fld_crop_rip_rop fld_input[V4L2_FLD_MAX_FRAME]; +}; + +#endif /* __MTK_AIE_V4L2_CONTROLS_H__ */ diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 4e91362da6da..a5d54b683b7d 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -858,6 +858,9 @@ struct v4l2_pix_format { /* Vendor specific - used for RaspberryPi PiSP */ #define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') /* PiSP BE configuration */ +/* Vendor-specific definition: used for the MediaTek camera subsystem's face detection results */ +#define V4L2_META_FMT_MTFD_RESULT v4l2_fourcc('M', 'T', 'f', 'd') + #ifdef __KERNEL__ /* * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when @@ -1953,6 +1956,9 @@ enum v4l2_ctrl_type { V4L2_CTRL_TYPE_AV1_TILE_GROUP_ENTRY = 0x281, V4L2_CTRL_TYPE_AV1_FRAME = 0x282, V4L2_CTRL_TYPE_AV1_FILM_GRAIN = 0x283, + + V4L2_CTRL_TYPE_AIE_INIT = 0x0290, + V4L2_CTRL_TYPE_AIE_PARAM = 0x0291, }; /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */