UVC规范(USB摄像头)
+ -

UVC 视频控制接口VC

2020-10-29 4357 0

视频控制接口包含于接口关联描述符IAD中,在USB设备枚举过程中,随配置描述符一起返回给主机。

通过控制各UVC拓扑单元和终端,可以控制视频功能。

视频控制接口包括以下:

  • 控制端点,是必须存在的,默认使用端点0.
  • 中断断点,一个可选(某些条件是必须的)的,用于状态返回。

视频控制接口是访问视频功能内部的单个入口点,所有与视频功能各拓扑单元或终端都必须通过视频控制接口来实现。所以视频函数内部相关的所有描述符都是特定于类的视频控制接口描述符的一部分。

控制端点

通过默认的端点0使用特定类请求( class-specific requests)来直接控制视频的各个单元或终端。

windows通过 URB_FUNCTION_CLASS_INTERFACE (Urb->UrbHeader.Function)来控制,所以应直接创建对应的URB并发送即可。

这些特定类请求主要包括以下几种:

名称 值  说明
RC_UNDEFINED 0x00 未定义
SET_CUR 0x01 设置属性
GET_CUR 0x81 获取当前属性
GET_MIN 0x82 获取最小设置属性
GET_MAX 0x83 获取最大设置属性
GET_RES 0x84 获取分辨率属性
GET_LEN 0x85 获取数据长度属性
GET_INF 0x86 获取设备支持的特定类请求属性
GET_DEF 0x87 获取默认属性

中断状态返回端点

USB设备通过一个可选的中断点向主机报告其可寻址的端点、单元、接口的状态。其实这些信息都是设备向主机上报相关的信息然后由主机响应实现功能调度。

在下面的三种情况下,中断端点必须支持:

  • 通过硬件触发抓取静态图片。
  • 自动更新的控制(由设备启动更改实现)。
  • 异步控制。

任何控制接口VC中的实体,端点、接口都是可以上报中断信息,并且因这些上报者的不同上报的数据也不一样。

公共数据包头

中断状态返回的数据结构是一个变长的数据结构,由其返回端的返回的状态确定。
对于视频控制接口VC和视频流接口VS,中断返回状态具有共同的数据头。

  • bStatusType:使用D3:D0表示中断的返回端的类型。
  • bOriginator:表示中端返回端的ID.
数据偏移 数据标识 长度 数据类型 描述
0 bStatusType 1 位图/数字 D7:4保留
D3:0 数据组织类型
  0:保留
  1:视频控制接口
  2:视频流接口
1 bOriginator 1 数字 中断报告ID

视频控制接口数据包

数据偏移 数据标识 长度 数据类型 描述
2 bEvent 1 数字 0x00: 控制改变
0x01-0xFF: 保留
3 bSelector 1 数字 控制改变时报告发生中断的选择器
4 bAttribute 1 指定数字 控制事件类型
0x00: 控制值的改变
0x01:控制信息的改变
0x02: 控制改变失败
0x03: 控制最小改变
0x04: 控制最大改变
0x05 - 0xFF: 保留
5 bValuenSee n(不定长) 控制请求描述述,详见下表

控制请求描述符

bAttribute Description
0x00 相当于 GET_CUR 请求结果
0x01 相当于 GET INFO 请求结果
0x02 相当于 GET CUR request on VC REQUEST ERROR CODE_CONTROL 结果
0x03 相当于 GET_MIN 请求结果
0x04 相当于 GETMAX 请求结果

视频流接口数据包

数据偏移 数据标识 长度 数据类型 描述
2 bEvent 1 数字 0x00: 按钮按下
0x01-0xFF: 保留
3 bValue n 数字 00:按钮释放
01:按钮按下
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

Linux V4L2 UVC摄像头框架浅析
V4L2 :video for linux version 2 ,是 Linux 里一套标准的视频驱动,它支持 UVC 标准的摄像头。本文来分析一下它的核心框架。整个v4l2的框架分为三层:在应用层,我们可以在 /dev 目录发现 video0 类似的设备节点,上层的摄像头程序打开设备节点进行......
打开UVC摄像头(特定类请求)数据分析
通过上节可以知道,设备支持4种的视频格式,且每种格式如下:MPJPG数据格式bFormatIndexbFrameIndex分辩率及及帧率11640x480x(30,15,10)121280x720x(30,15,10)131920x1080x(30,15......
USB-UAC麦克风 音频控制接口
音频控制接口描述符描述了设备的结构(拓扑结构),并通过特定类请求对音频的控制。UAC麦克风 音频控制接口描述符偏移地址字段长度值描述0bLength10x09接口描术符的长度1bDescriptorType10x04描述符的类型接口描述符2bInterfaceNumber10x00接口ID号3bA......
UVC摄像头扩展单元功能的开发步骤是什么?
写在扩展单元的题外话本人在开发支持UVC扩展单元的directShow应用时,必现并不需要注册接口,只需要在其源过滤器参照后续的代码枚举相关的接口如IKsControl,IKsTopologyInfo定位到指定的扩展单元接口后,直接使用其对应的IKsControl::KsProperty即可实现扩展......
UVC摄像头的延迟reduce latency
一般的ISP,200W30帧来说,sensor进来缓存一帧就是33ms+vpu处理时间大概10ms+jpeg编码时间16ms+USB传输时间200KB大概7、8ms,最后就是windows上的显示延迟时间,如果JPEG编码出来缓存不止一帧,时间就更长了,所以一般会超过100多ms另外,网络传输如使......
UVC Windows下UVC摄像头数据分析
这里我们分析一款UVC摄像头来进行数据分析。环境:win10 x64工具:bushound,usbviewer将摄像头插入PC后,打开usbviewer工具,可以看到关于此摄像头的相关信息。可以看到,这个摄像头其实是一个USB复合设备,所以其对应的系统驱动为USBCCGP,然后再由USB复合设......
UAC 类特定音频控制接口头描述符
UAC类特定音频控制头接口描述符这个名字有点绕,其实这个描述符是前接标准的音频控制接口描述符,后续关于音频控制的所有相关描述符,起着承上起下的作用。当然也可以认为是音频控制相关描述符的前导。这是因为UAC类特定音频控制接口描述符含有一个关键的字段wTotalLength,用于包含音频控制所有接口描述......
华为UAC耳机 音频控制接口
音频控制接口占用接口ID=0,音频控制接口的描述符结构布局如下:USB标准接口描述符UAC音频控制接口头描述符IDSId描述    音频控制输入终端描述符1USB Streaming   ......
简易摄像头playcap工程代码及应用程序
playcap是一个小巧的UVC摄像头测试工具,使用的是DirectShow,本人之前装饰部分代码发布到此网址:http://www.usbzh.com/article/detail-553.html但经常有人说编译不过,其实这都是工程配置问题引起的。现将工程代码及编译好的应用程序提供详细的下载地......
Windows下UVC虚拟摄像头的实现
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL_BUSEN......
UVC摄像头的关闭流程及抓包分析
通过UVC协议规范可以知道,UVC的数据传输支持USB四种传输中的批量传输和同步传输,所以对于UVC摄像头,当我们在摄像头正在工作时,需要停止摄像头工作,执行的操作是不同的。在Linux的源代码中,摄像头的流关闭是由函数uvc_video_stop_streaming完成的。代码比较简单,我们直接给......
UVC摄像头批量传输的StreamOn和StreamOff
在UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输和同步传输。UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步......
Linux源码分析UVC摄像头的初始化流程分析
UVC摄像头的初始化发生在硬件被接入USB集线器中,设备初USB驱动识别为摄像头的后续初始化流程。和Windows的AddDevice驱动函数一样,Linux设备的创建和侦测是通过int uvc_probe函数实现的。其函数的调用关系如下://linux/v5.11.11/source/drive......
Windows对红外相机摄像头的支持
从Windows10的1607版本开始,USB视频类(UVC)驱动程序支持产生红外(IR)流的摄像头。红外摄像头相机捕捉场景的亮度值,并通过USB以未压缩格式或压缩格式传输帧。这些相机及其流通过媒体捕获管道(pipeline)导出给应用程序。红外UVC摄像头相机帧类型红外UVC摄像头相机支持的格......
UVC 输入终端描述符
输入终端描述符用于向主机报告视频数据输入终端的相关信息。输入终端描述符使用bTerminalID描述输入终端的ID,且这个ID是惟一的。输入终端描述符位于视频控制接口中。输入终端描述符结构体定义如下:// Input Terminal Descriptortypedef struct _USB......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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