Linux&UVC驱动
+ -

Linux相机设备对象

2025-12-08 本文链接为:http://www.usbzh.com/article/detail-1604.html ,欢迎转载,转载请附上本文链接。

Linux相机驱动中比较重要的设备对象:

    struct video_device vdev;
    struct v4l2_device v4l2_dev;
    struct uvc_video video;
  • video_device 是用户接口层,直接面对应用
  • v4l2_device 是框架管理层,协调V4L2子系统
  • uvc_video 是功能实现层,处理具体UVC视频数据
特性 struct video_device struct v4l2_device struct uvc_video
所属层次 V4L2设备接口层 V4L2框架管理层 UVC功能实现层
主要目的 提供/dev/videoX接口 管理V4L2子设备 处理视频数据流
用户可见 直接可见(设备节点) 内核内部,用户不可见 内核内部,用户不可见
生命周期 随设备创建/销毁 随驱动加载/卸载 UVC功能绑定/解绑
包含关系 包含v4l2_device指针 被video_device引用 被uvc_device包含
典型大小 ~1-2KB ~200-500字节 ~几百字节
┌─────────────────────────────────────────────┐
│       应用层 (用户空间)                       │
│       /dev/videoX 设备节点                    │
└───────────────────┬─────────────────────────┘
                    │
                    ▼ V4L2系统调用
┌─────────────────────────────────────────────┐
│          struct video_device                 │ ← 用户接口层
│        (视频设备实例,驱动直接操作)            │
└───────────────────┬─────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────┐
│        struct v4l2_device                   │ ← 框架管理层
│      (V4L2设备框架,协调多个子设备)           │
└───────────────────┬─────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────┐
│        struct uvc_video                     │ ← 硬件/功能层
│     (UVC特定功能,视频数据处理)              │
└─────────────────────────────────────────────┘

设备注册方法:

// 驱动开发者使用video_device
struct video_device *vdev = video_device_alloc();
vdev->ioctl_ops = &my_ioctl_ops;
video_register_device(vdev, VFL_TYPE_VIDEO, -1);

// 框架开发者使用v4l2_device
struct v4l2_device *v4l2_dev;
v4l2_device_register(&pdev->dev, v4l2_dev);
v4l2_device_call_all(v4l2_dev, core, s_power, 1);

// UVC开发者使用uvc_video
struct uvc_video *video = &uvc->video;
uvc_video_encode(video, buf);  // 编码视频帧
usb_ep_queue(video->ep, req);  // 提交USB请求

生命周期:

// 创建顺序
1. uvc_device分配(包含v4l2_dev、vdev、video)
2. v4l2_device初始化
3. uvc_video初始化
4. video_device注册

// 销毁顺序(反向)
1. video_device注销
2. uvc_video清理
3. v4l2_device注销
4. uvc_device释放
本文链接为:http://www.usbzh.com/article/detail-1604.html ,欢迎转载,转载请附上本文链接。

0 篇笔记 写笔记

UVC 扩展单元描述符
扩展单元描述符允许硬件设计者定义任意一组控制接口,使类驱动程序可以在设备与供应商提供的主机软件之间进行通讯控制。扩展单元描述符ID由bUnitID字段中的值唯一标识描述符。同一视频功能内的任何其他单元或终端不得具有相同的功能ID。guidExtensionCode字段包含特定于供应商的代码,该代......
打开UVC摄像头(特定类请求)数据分析
通过上节可以知道,设备支持4种的视频格式,且每种格式如下:MPJPG数据格式bFormatIndexbFrameIndex分辩率及及帧率11640x480x(30,15,10)121280x720x(30,15,10)131920x1080x(30,15......
UVC 视频流接口VS
和视频控制接口不同,视频流接口用于主机和设备视频功能之间进行传输视频数据。一个视频功能可以不包括视频流接口,也可以包含多个视频流接口。视频流接口用于传输视频时,其传输端点为等时/同步传输端点或者批量传输端点。视频流接口用于传输静止图像时,其传输类型为批量传输端点。用于静止图片传输是可选的,不是必须的......
UVC 请求错误码控制
请求错误码控制用于返回主机初始化后各单元、终端、端点的状态。bmRequestTypebRequestwValuewIndexwLengthData10100001GET_CURGET_INFO02接口1bDevicePowerModebDevicePowerMode:0x00:无错误,请求成功。0......
UVC摄像头扩展单元功能的开发步骤是什么?
写在扩展单元的题外话本人在开发支持UVC扩展单元的directShow应用时,必现并不需要注册接口,只需要在其源过滤器参照后续的代码枚举相关的接口如IKsControl,IKsTopologyInfo定位到指定的扩展单元接口后,直接使用其对应的IKsControl::KsProperty即可实现扩展......
UVC 描述符及描述符布局
USB设备的描述符用于向主机报告其设备的属性信息,UVC设备属于USB设备的一种,故和通用的USB设备一样,也包含设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。UVC设备在也定义了一些特有的描述符,用于对USB视频设备的扩展。这些特有的UVC描述符和通用的USB描述符,共同组成了UV......
UVC1.0和UVC 1.1有什么区别
符合uvc1.1的设备应将类特定VC接口中的bcdUVC标志设置为0x110。此外,如果存在可选的处理单元描述符,则符合1.1的设备应执行以下操作:将bmVideoStandards字段添加到处理单元描述符。更新处理单元中的bLength字段。更新wTotalLength以反映处理单元的较大PU大小......
UVC 等时传输中的URB_ISOCH_TRANSFER
通过UVC规范可知,视频图像数据的读取可使用两种端点传输方式,分别为:BULK 块/批量传输方式ISO 等时/同步传输方式在Windows内核中,USB数据的读取是通过URB来进行传输的,其结构体是一个大大的共用体,根据数据传输的方式对应其不同的结构体,其内容如下:typedef _Struct_s......
UVC摄像头的延迟reduce latency
一般的ISP,200W30帧来说,sensor进来缓存一帧就是33ms+vpu处理时间大概10ms+jpeg编码时间16ms+USB传输时间200KB大概7、8ms,最后就是windows上的显示延迟时间,如果JPEG编码出来缓存不止一帧,时间就更长了,所以一般会超过100多ms另外,网络传输如使......
UVC 相机终端描述符
相机端点描述符使用bTerminalID来标识其惟一的ID,所有的请求必须使用此ID。wTerminalType用来描述相关的物理实体的信息。typedef struct _CAMERA_TERMINAL_DESCRIPTOR UINT8 bLength; UINT8 bDescr......
UVC Windows下UVC摄像头数据分析
这里我们分析一款UVC摄像头来进行数据分析。环境:win10 x64工具:bushound,usbviewer将摄像头插入PC后,打开usbviewer工具,可以看到关于此摄像头的相关信息。可以看到,这个摄像头其实是一个USB复合设备,所以其对应的系统驱动为USBCCGP,然后再由USB复合设......
UVC 选择单元控制请求
选择单元控制描述符设置或读取视频功能的选择器单元内的选择器控件的属性。选择器单元表示视频流源选择器。CUR、MIN和MAX属性的有效范围是从1到选择器单元的输入管脚数。这个值可以在选择器单元描述符的bNrInPins字段中找到。RES属性只能有一个值。控制选择子SU_INPUT_SELECT_CON......
DirectShow播放UVC设备第二路码流方法
双码流播放Graphi图如上。双码流视频设备有两路捕获输出pin, RenderStream函数只会连接第一路pin,要播放第二路码流需要手动获取第二路pin,然后去连接解码器,再手动连接render,就可以显示了。示例代码// m_pGB 是 IGraphBuilder对象// m_pBF......
UVC的版本区别之处理单元描述符
UVC规范自发布到现在,已经有UVC1.0,UVC1.1和UVC1.5三个版本了。在Windows环境下,支持的最广泛的是UVC1.0,从Win7开始支持UVC1.1,从Win8开始支持UVC1.5.我们常用的UVC摄像头一般为了支持更加广泛的操作系统,一般情况下UVC的固件是UVC1.0,但随着固......
UVC 颜色匹配描述符
颜色匹配描述符是一个可选描述符,这是一个与图像成像时色域相关的参数。对于未压缩的视频格式,必须使用颜色匹配描述符bt709是srgb色域。色域是对一种颜色进行编码的方法,也指一个技术系统能够产生的颜色的总和。在计算机图形处理中,色域是颜色的某个完全的子集。颜色子集最常见的应用是用来精确地代表一......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!