
(1)video_device
- 抽象对象:代表一个可被用户空间访问的视频设备实例,是用户空间与内核空间中视频设备交互的桥梁。
- 主要作用:为用户空间应用程序提供统一的接口,使用户可以通过标准的文件操作,对视频设备进行控制和数据交互。

(2)v4l2_device
- 抽象对象:对整个视频设备系统的高层抽象,代表一个完整的视频设备集合,可能包含多个不同功能的子组件。
- 主要作用:管理和协调多个子设备的工作,提供公共的设备操作和状态管理。它就像一个 “大管家”,统筹整个视频设备系统的资源和任务。

(3)v4l2_subdev
- 抽象对象:用于抽象视频设备中的各个子组件,如图像传感器、ISP(图像信号处理器)、闪光灯等。每个子组件具有独立的功能和操作逻辑。
- 主要作用:实现子组件的独立管理和操作,允许对每个子设备进行单独的配置和控制,提高系统的模块化和可维护性。

ioctl 系统调用向 /dev/videoX 设备节点发送控制命令。video_device的fops成员中的 unlocked_ioctlioctl命令码去查找并调用v4l2_ioctl_ops中相应的操作函数,根据命令的具体要求去遍历v4l2_device的subdevs链表,找到合适的v4l2_subdev子设备。(4)调用v4l2_subdev的v4l2_subdev_ops结构体里的相应操作函数,完成具体的控制操作注册video_device设备

实现video_device设备的v4l2_file_operations函数集

v4l2_ioctl_ops的函数集(分三类:v4l2通用函数、videobuf2框架函数、v4l2子设备需要实现的函数)

注册 v4l2_device设备【v4l2_device_register】
注册v4l2_subdev子设备【v4l2_device_register_subdev】

实现v4l2_device设备的v4l2_device_ops,主要(子设备通知回调处理)【当帧率变化、曝光过度等,能够及时通知到用户空间的应用程序】subdev_notify

实现v4l2_subdev子设备的v4l2_subdev_ops函数(子设备初始化、参数控制、视频流控制)



夜雨聆风