
V4L2
文章平均质量分 67
zzsyxl
这个作者很懒,什么都没留下…
展开
-
八、V4L2 ioctl 控制接口 调用流程
V4L2 ioctl 控制接口 调用流程当 使用v4l2打开配置好video节点后,还可能需要对设备进行参数 sensor 或者ISP的参数配置,例如自动对焦、自动曝光、亮度、对比度、锐度、色度、白平衡、测试图案等等V4L2_CID_BRIGHTNESS我们举例 设置亮度static void set_sensor_brightness(int videofd, int brightness){ struct v4l2_control ctrl; ctrl.id = V4L2_C原创 2022-05-11 17:10:45 · 2355 阅读 · 2 评论 -
七、V4L2 ioctl 标准接口 调用流程
V4L2 ioctl调用流程当video节点注册完成之后,用户层就会通过 该节点的字符设备接口接入到内核中去在 三、video设备初始化中就讲解了video的初始化,vdev->cdev->ops = &v4l2_fops; 代表着用户层的ioctl会调用到v4l2_fops的unlocked_ioctl = v4l2_ioctl;结构体 file_operationsstatic const struct file_operations v4l2_fops = {原创 2022-05-11 16:46:32 · 2670 阅读 · 0 评论 -
六、v4l2 ctrl 函数初始化---增加自定义接口v4l2_ctrl_new_custom
v4l2_ctrl_new_custom每一个ISP都有自定义的功能,例如 bypass某个算法模块、内部测试图案等等//v4l2_ctrl_new_custom( hdl_cst_ctrl, xxx_v4l2_ctrl_test_pattern , null);/*static const struct v4l2_ctrl_config xxx_v4l2_ctrl_test_pattern = { .ops = &isp_v4l2_ctrl_ops_custom, .id原创 2022-05-11 15:30:59 · 1511 阅读 · 4 评论 -
四、V4L2 control结构框架图
首先介绍下几个核心的结构体struct v4l2_ctrl:control的结构体抽象,一个control就用一个实例化的v4l2_ctrl变量来表示struct v4l2_ctrl_ref:一个实例化的v4l2_ctrl的引用,可以看到该结构体里面包含一个struct v4l2_ctrl*类型的指针变量,该指针成员指向的就是与之一一对应的v4l2_ctrl实例化对象struct v4l2_ctrl_handler:control的集合,就比如一个设备他有很多个control,这些这些众多的contr原创 2022-05-06 14:41:31 · 1250 阅读 · 0 评论 -
五、v4l2 ctrl 函数初始化---增加标准接口v4l2_ctrl_new_std
xxx_v4l2_ctrl结构体定义struct xxx_v4l2_ctrl { struct v4l2_device *v4l2_dev; struct video_device *video_dev; uint32_t ctx_id; struct v4l2_ctrl_handler ctrl_hdl_std_ctrl; struct v4l2_ctrl_handler ctrl_hdl_cst_ctrl;};v4l2_ctrl_handler结构体定义struct v4l2_ctr原创 2022-05-05 19:54:41 · 4553 阅读 · 0 评论 -
三、video设备初始化
video_device结构体struct video_device{#if defined (CONFIG_MEDIA_CONTROLLER) struct media_entity entity; struct media_intf_devnode *intf_devnode; struct media_pipeline pipe;#endif const struct v4l2_file_operations *fops; u32 device_caps;原创 2022-05-05 18:56:53 · 1749 阅读 · 0 评论 -
二、V4L2设备注册
v4l2_device 结构体struct v4l2_device { struct device *dev; struct media_device *mdev; struct list_head subdevs; spinlock_t lock; char name[V4L2_DEVICE_NAME_SIZE]; void (*notify)(struct v4l2_subdev *sd,原创 2022-05-05 16:50:34 · 1183 阅读 · 0 评论 -
一、V4L2应用层调用流程
1、打开设备相机设备基本上都是videox节点,以/dev/video0节点为例 int fd = open("/dev/video0",O_RDWR);2. 获取摄像支持的格式 struct v4l2_fmtdesc v4l2fmt; v4l2fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; int i = 0; while(1) { v4l2fmt.index = i++; ioctl(fd, VIDIOC_ENUM_FMT, &v4l2f原创 2022-04-28 17:21:48 · 1907 阅读 · 0 评论