LINUX&UVC驱动向V4L2提供的回调接口v4l2_ioctl_ops
			 2024-03-28
			  本文链接为:http://www.usbzh.com/article/detail-1343.html ,欢迎转载,转载请附上本文链接。
	
			
			
			
			
		
			在 Linux 内核中,针对视频设备的驱动一般会使用 Video4Linux2(V4L2)接口。在 V4L2 中,ioctl 是一个用于设备控制的系统调用,用来发送各种命令给设备驱动程序。对于 UVC(USB Video Class)摄像头的驱动,通常会使用 uvc_v4l2.c 这个文件。
uvc_v4l2.c 中的 v4l2_ioctl_ops 结构体定义了对 V4L2 设备的 ioctl 操作的实现。下面是该结构体的一般形式及其成员介绍:
const struct v4l2_ioctl_ops uvc_ioctl_ops = {
    .vidioc_querycap           = uvc_ioctl_querycap,
    .vidioc_enum_fmt_vid_cap   = uvc_ioctl_enum_fmt_vid_cap,
    .vidioc_g_fmt_vid_cap      = uvc_ioctl_g_fmt_vid_cap,
    .vidioc_try_fmt_vid_cap    = uvc_ioctl_try_fmt_vid_cap,
    .vidioc_s_fmt_vid_cap      = uvc_ioctl_s_fmt_vid_cap,
    .vidioc_reqbufs            = uvc_ioctl_reqbufs,
    .vidioc_querybuf           = uvc_ioctl_querybuf,
    .vidioc_qbuf               = uvc_ioctl_qbuf,
    .vidioc_dqbuf              = uvc_ioctl_dqbuf,
    .vidioc_streamon           = uvc_ioctl_streamon,
    .vidioc_streamoff          = uvc_ioctl_streamoff,
    .vidioc_enum_input         = uvc_ioctl_enum_input,
    .vidioc_g_input            = uvc_ioctl_g_input,
    .vidioc_s_input            = uvc_ioctl_s_input,
    .vidioc_g_parm             = uvc_ioctl_g_parm,
    .vidioc_s_parm             = uvc_ioctl_s_parm,
    .vidioc_cropcap            = uvc_ioctl_cropcap,
    .vidioc_g_crop             = uvc_ioctl_g_crop,
    .vidioc_s_crop             = uvc_ioctl_s_crop,
    .vidioc_enum_framesizes    = uvc_ioctl_enum_framesizes,
    .vidioc_enum_frameintervals= uvc_ioctl_enum_frameintervals,
    .vidioc_g_fmt_vid_overlay  = uvc_ioctl_g_fmt_vid_overlay,
    .vidioc_try_fmt_vid_overlay= uvc_ioctl_try_fmt_vid_overlay,
    .vidioc_s_fmt_vid_overlay  = uvc_ioctl_s_fmt_vid_overlay,
};
每个成员的简要介绍及使用条件:
- vidioc_querycap: 用于查询设备的基本能力,如设备名称、驱动名称、支持的输入/输出格式等。无特殊条件。
- vidioc_enum_fmt_vid_cap: 枚举视频捕获设备支持的视频格式。无特殊条件。
- vidioc_g_fmt_vid_cap: 获取当前视频捕获设备的视频格式。无特殊条件。
- vidioc_try_fmt_vid_cap: 尝试设置视频捕获设备的视频格式。无特殊条件。
- vidioc_s_fmt_vid_cap: 设置视频捕获设备的视频格式。无特殊条件。
- vidioc_reqbufs: 请求内存缓冲区用于视频数据。无特殊条件。
- vidioc_querybuf: 查询内存缓冲区的信息。无特殊条件。
- vidioc_qbuf: 将缓冲区放入队列。无特殊条件。
- vidioc_dqbuf: 从队列中取出缓冲区。无特殊条件。
- vidioc_streamon: 打开数据流。无特殊条件。
- vidioc_streamoff: 关闭数据流。无特殊条件。
- vidioc_enum_input: 枚举视频输入。无特殊条件。
- vidioc_g_input: 获取当前视频输入。无特殊条件。
- vidioc_s_input: 设置视频输入。无特殊条件。
- vidioc_g_parm: 获取设备参数。无特殊条件。
- vidioc_s_parm: 设置设备参数。无特殊条件。
- vidioc_cropcap: 查询裁剪能力。无特殊条件。
- vidioc_g_crop: 获取当前裁剪设置。无特殊条件。
- vidioc_s_crop: 设置裁剪。无特殊条件。
- vidioc_enum_framesizes: 枚举帧大小。无特殊条件。
- vidioc_enum_frameintervals: 枚举帧间隔。无特殊条件。
- vidioc_g_fmt_vid_overlay: 获取视频叠加格式。无特殊条件。
- vidioc_try_fmt_vid_overlay: 尝试设置视频叠加格式。无特殊条件。
- vidioc_s_fmt_vid_overlay: 设置视频叠加格式。无特殊条件。
这些 ioctl 请求通常由用户空间的应用程序发起,例如视频采集应用或者视频播放器。应用程序可以通过 V4L2 接口与视频设备通信,发送相应的 ioctl 命令来控制视频设备的行为,如获取设备信息、设置采集参数、启动/停止数据流等。
本文链接为:http://www.usbzh.com/article/detail-1343.html ,欢迎转载,转载请附上本文链接。
 Linux&UVC驱动
			Linux&UVC驱动
			




