UVC规范(USB摄像头)
+ -

UVC 视频流接口控制请求

2020-10-20 5154 40

视频流接口控制请求用于设置或读取视频函数的特定视频流接口内接口控制的属性。

bmRequestType(1) bRequest(1) wValue (2) wIndex(2) wLength(2) Data(26~34~48)
00100001 SET_CUR 选择器CS<<8I0 接口 参数长度 参数块

获取请求GET_CUR

获取请求用于视频功能的相关属性.

bmRequestType(1) bRequest(1) wValue (2) wIndex(2) wLength(2) Data(26~34~48)
10100001(接口)
—————
10100010(端点)
GET_CUR
GET_MIN
GET_MAX
GET_RES
GET_LEN
GET_INFO
GET_DEF
选择器CS<<8I0 接口 参数长度 参数块
  • bRequest字段指示请求正在操作的属性。
  • wValue字段以高字节指定控制选择器(CS),低字节必须设置为零。CS指示此请求正在操作的控件类型。如果请求指定了指向该端点的未知CS,则控制管道必须指示暂停

视频流接口控件允许主机软件查询和设置与视频流格式和视频流编码器相关的参数。这些参数包括视频流的格式、帧大小和帧速率,以及由与视频流相关联的设备捕获的静止图像的格式和帧大小。对于支持主机可调视频流编码器参数的设备,还支持允许调整关键帧速率和压缩质量等参数的控件。只有流错误码控制支持视频流接口中断。

视频探测和提交控件(Video Probe and Commit Controls)

基于流媒体和主机之间的共享接口的选择,考虑了以下流媒体特性:

  • USB的共享特性
  • 流参数的相互依赖性
  • 有效载荷独立性
  • 流式传输期间修改流参数

视频流控制接口命令

Control Selector Value
VS_CONTROL_UNDEFINED 0x00
VS_PROBE_CONTROL 0x01
VS_COMMIT_CONTROL 0x02
VS_STILL_PROBE_CONTROL 0x03
VS_STILL_COMMIT_CONTROL 0x04
VS_STILL_IMAGE_TRIGGER_CONTROL 0x05
VS_STREAM_ERROR_CODE_CONTROL 0x06
VS_GENERATE_KEY_FRAME_CONTROL 0x07
VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08
VS_SYNCH_DELAY_CONTROL 0x09
控制选择子 VS_PROBE_CONTROL(01)
VS_COMMIT_CONTROL(02)
强制性请求 见下表
长度 48

说明
UVC1.0的长度是26字节;
UVC1.1的长度是34字节;
UVC1.5的是48字节。

偏移 数据 长度 描述
0 bmHint 2 位图 指示哪些字段应保持固定(仅供参考):
D0:dwFrameInterval
D1:wKeyFrameRate
D2:wPFrameRate
D3:wCompQuality
D4:wCompWindowSize
D15..5:保留(0)
指定了视频流接口指示在流参数协商过程中哪些字段应保持不变。例如,如果所选内容想要优先于帧速率而不是质量,那么dwFrameInterval位
此字段由主机设置,对于视频流接口是只读的。
2 bFormatIndex 1 数字 来自此视频接口的格式描述符的视频格式索引。通过将此字段设置为相关格式描述符的基于一的索引,选择特定的视频流格式。要选择设备定义的第一种格式,将值1写入此字段。即使设备只支持一种视频格式,也必须支持此字段。
此字段由主机设置
3 bFrameIndex 1 数字 来自帧描述符的视频帧索引.此字段从所选流支持的分辨率数组中选择视频帧分辨率。索引值的范围从1到特定格式描述符后面的帧描述符的数量。对于基于帧的格式,即使设备只支持一个视频帧索引,也必须支持此字段。对于没有定义帧描述符的视频有效载荷,该字段应设置为零(0)。此字段由主机设置。
4 dwFrameInterval 4 数字 以100纳秒为单位的帧间隔。
此字段设置所选视频流的所需视频帧间隔和帧索引。帧间隔值以100ns为单位指定。设备应支持设置与所选视频帧索引对应的帧描述符中报告的所有帧间隔。对于基于帧的格式,即使设备只支持一个视频帧间隔,也必须实现该字段。>此字段设置所选视频流的所需视频帧间隔和帧索引。帧间隔值以100ns为单位指定。设备应支持设置与所选视频帧索引对应的帧描述符中报告的所有帧间隔。对于基于帧的格式,即使设备只支持一个视频帧间隔,也必须实现该字段。
当与接入端点一起使用时,主机应在探测阶段显示其偏好。该值必须来自设备支持的值范围。
当与输出端点一起使用时,主机应接受设备指示的值。
8 wKeyFrameRate 2 数字 每个视频帧单位的关键帧速率。此字段仅适用于能够以可调压缩参数流式传输视频的源(和格式)。此控件的使用由设备决定,并在VS输入或输出标头描述符中指明。“关键帧速率”字段用于指定压缩器的关键帧速率。例如,如果视频流序列中每十个编码帧中有一个是关键帧,则此控件将报告值10。值为0表示只有第一帧是关键帧。当与接入端点一起使用时,主机应在探测阶段显示其偏好。该值必须来自设备支持的值范围。当与输出端点一起使用时,主机应接受设备指示的值。
10 wPFrameRate 2 数字 以PFrame/key frame 单位表示的PFrame速率。此字段仅适用于能够以可调压缩参数流式传输视频的源(和格式)。此控件的使用由设备决定,并在VS输入或输出标头描述符中指明。P帧速率控件用于指定每个关键帧的P帧数。作为编码帧类型之间关系的示例,假设每10帧出现一个关键帧,并且每个关键帧有3个P帧。P帧将在关键帧之间均匀分布。其他6帧出现在关键帧和P帧之间,将是双向(B)帧。
12 wCompQuality 2 数字 压缩质量控制抽象单元1(最低)到10000(最高)。此字段仅适用于能够以可调压缩参数流式传输视频的源(和格式)。此字段的使用由设备决定,并在VS输入或输出标题描述符中指明。此字段用于指定视频压缩的质量。此属性的值范围为1到10000(1表示最低质量,10000表示最高质量)。此控件报告的分辨率将决定它可以支持的离散质量设置的数量。当与接入端点一起使用时,主机应在探测阶段显示其偏好。该值必须来自设备支持的值范围。当与输出端点一起使用时,主机应接受设备指示的值。
14 wCompWindowSize 2 数字 平均比特率控制的窗口大小。此字段仅适用于能够以可调压缩参数流式传输视频的源(和格式)。此控件的使用由设备决定,并在VS输入或输出标头描述符中指明。压缩窗口大小控制用于指定平均大小不能超过指定数据速率的编码视频帧的数量。对于大小为n的窗口,任何连续n帧的平均帧大小不会超过流的指定数据速率。单个框架可以更大或更小。例如,如果压缩窗口大小为10的每秒10帧(fps)影片的数据速率设置为100千字节/秒(KBps),则各个帧可以是任何大小,只要任何10帧序列中的帧的平均大小小于或等于10千字节。当与接入端点一起使用时,主机应在探测阶段显示其偏好。该值必须来自设备支持的值范围。当与输出端点一起使用时,主机应接受设备指示的值。
16 wDelay 2 数字 内部视频流接口延迟(毫秒),从视频数据捕获到USB上的演示。当与in端点一起使用时,此字段由设备设置,并从主机只读。当与输出端点一起使用时,此字段由主机设置,并从设备只读。
18 dwMaxVideo
FrameSize
4 数字 视频帧或编解码器特定段的最大大小(字节).
对于基于帧的格式,此字段指示单个视频帧的最大大小。当流式同步广播时,此数字反映协商帧描述符的最大视频帧大小。对于基于帧的格式,必须支持此字段。
对于基于流的格式,并且通过bmFramingInfo字段(如下)启用此行为时,此字段指示单个编解码器特定段的最大大小。发送方需要通过有效载荷头中的FID位指示段边界。如果bmFramingInfo位未启用,则忽略此字段(对于基于流的格式)。
当与in端点一起使用时,此字段由设备设置,并从主机只读。
当与输出端点一起使用时,此字段由主机设置,并从设备只读。
22 dwMaxPayload
TransferSize
4 数字 指定设备在单个有效负载传输中可以传输或接收的最大字节数。必须支持此字段。此字段由设备设置,仅从主机读取。某些主机实现限制此字段允许的最大值。主机应通过重新配置设备来避免单个有效负载传输大小的超调。(例如,通过更新比特率、分辨率等)
26 dwClockFrequency 4 数字 指定格式的设备时钟频率(Hz)。这将指定用于数据流中视频有效负载标头中时间信息字段的单位。此参数由设备设置,并且只能从主机读取。
30 bmFramingInfo 1 位图 D0:如果设置为1,则有效负载标头中需要帧ID(FID)字段。发送方需要至少每dwMaxVideoFrameSize字节切换帧ID。
D1:有效载荷。指定此位而不同时指定D0是错误的。
D2:如果设置为1,则表示片结束(EOS)字段可能存在于有效负载标头中。指定此位而不同时指定D0是错误的。
D7..D3:保留(0)
31 bPreferedVersion 1 数字 主机或设备支持的指定bFormatIndex值的首选有效负载格式版本。此参数允许主机和设备协商与bFormatIndex字段相关联的有效负载格式的共同商定版本。主机在第一个探测集上将此字段以及以下bMinVersion和bMaxVersion字段初始化为零。探测器获取后,设备应返回其首选版本,以及设备支持的最低和最高版本(请参阅下面的bMinVersion和bMaxVersion)。主机可以发出后续的探测集/获取序列来指定其首选版本(在初始探测集/获取序列的bMinVersion和bMaxVersion返回的范围内)。不允许主机更改bMinVersion和bMaxVersion值。此字段最多支持256(1-255)个版本的单一有效负载格式。版本号来自有效负载格式规范的次要版本。
32 bMinVersion 1 数字 对于指定的bFormatIndex值,设备支持的最小有效负载格式版本。此值由主机初始化为零,并由设备重置为1到255范围内的值。
33 bMaxVersion 1 数字 对于指定的bFormatIndex值,设备支持的最大有效负载格式版本。此值由主机初始化为零,并由设备重置为1到255范围内的值。
34 bUsage 1 数字 1-8:实时模式
9-16:广播模式
17-24:文件存储模式
25–31:多视图模式
32-255:保留
35 bBitDepthLuma 1 数字 表示bit_depth_luma_minus8+8,它必须与bit_depth_chroma_minus8+8相同。
36 bmSettings 1 位图 一种标志位图,用于发现和控制经过时间编码的视频流的特定特征。当支持它时,它在相关的有效负载规范中定义。此位图启用视频帧描述符的bmCapabilities字段报告的功能。
37 bMaxNumberOf
RefFramesPlus1
1 数字 主机指示存储用作引用的最大帧数。
38 bmRateControlModes 2 数字 此字段包含4个子字段,每个子字段都是4位数字。
它启用视频格式描述符的bmSupportedRateControlModes字段报告的功能。
每个4位数字表示编码视频流的速率控制模式。如果视频有效负载不支持速率控制,则整个字段应设置为0。
bmRateControlModes最多支持四个同步广播流。对于同播传输,从bmLayoutPerStream字段推断流的数量。否则,流的数目为1。
D3-D0:第一个同播流的速率控制模式(stream_id=0)
D7-D4:第二个同播流的速率控制模式(stream_id=1)。
D11-D8:第三个同播流的速率控制模式(stream iu id=2)。
D15-D12:第四个同播流的速率控制模式(stream iu id=3)
当bmRateControlModes为非零时,每个4位子字段可以采用以下值之一:
0:不适用,因为此流不存在。
1: VBR with underflow allowed
2: CBR
3: Constant QP
4: Global VBR,underflow allowed
5: VBR without underflow
6: Global VBR without underflow
7-15:保留
对于临时编码的视频格式,必须支持此字段,即使设备仅支持bmRateControlModes的单个值。
40 bmLayoutPerStream 8 数字 此字段包含4个子字段,每个子字段都是2字节编号。对于同播传输,此字段指示每个流的特定分层结构,最多四个同播流。对于单个多层流,只使用前两个字节。对于没有增强层的单个流,该字段应设置为0。有关如何解释每个2字节的子字段,请参阅单个有效负载规范。对于临时编码的视频格式,必须支持此字段。

注1:实际以LINUX&UVC驱动源代码来看,bmHint字段被置为1。
linux-5.6.11\drivers\media\usb\uvc\v4l2.c:223

    probe->bmHint = 1;    /* dwFrameInterval */

VS_PROBE_CONTROL Requests请求

属性 说明
GET_CUR 返回流接口的当前状态。所有设置为零的支持字段都将返回一个可接受的协商值。在初始SET_CUR操作之前,GET_CUR状态是未定义的。如果协商失败,此请求将暂停。
GET_MIN 返回协商字段的最小值。
GET_MAX 返回协商字段的最大值。
GET_RES 返回探测/提交数据结构中每个支持字段的分辨率。
GET_DEF 返回协商字段的默认值
GET_LEN 返回探测器数据结构的长度。
GET_INFO 查询控件的功能和状态。为此请求返回的值应将位D0和D1分别设置为一(1),其余位设置为零(0)
SET_CUR 设置流接口探测状态。这是用于流参数协商的属性。如果设备将处于不受支持的状态或协商字段的值超出范围,则此请求应协议暂停。

VS_COMMIT_CONTROL请求

属性 说明
GET_CUR 返回流接口的当前状态。在初始SET_CUR操作之前,GET_CUR状态是未定义的。
GET_MIN 未指定。
GET_MAX 未指定。
GET_RES 未指定
GET_DEF 未指定
GET_LEN 返回提交数据结构的长度。
GET_INFO 查询控件的功能和状态。为此请求返回的值应将位D0和D1分别设置为一(1),其余位设置为零(0)
SET_CUR 设置设备状态。这将设置活动设备状态。字段值必须是成功的VS\u PROBE_CONTROL(GET_CUR)请求的结果。如果指定了不受支持的状态,则此请求应协议暂停。如果设备将处于不受支持的状态或协商字段的值超出范围,则此请求应协议暂停。
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 篇笔记 写笔记

打开UVC摄像头(特定类请求)数据分析
通过上节可以知道,设备支持4种的视频格式,且每种格式如下:MPJPG数据格式bFormatIndexbFrameIndex分辩率及及帧率11640x480x(30,15,10)121280x720x(30,15,10)131920x1080x(30,15......
UVC 视频流接口VS
和视频控制接口不同,视频流接口用于主机和设备视频功能之间进行传输视频数据。一个视频功能可以不包括视频流接口,也可以包含多个视频流接口。视频流接口用于传输视频时,其传输端点为等时/同步传输端点或者批量传输端点。视频流接口用于传输静止图像时,其传输类型为批量传输端点。用于静止图片传输是可选的,不是必须的......
UVC 选择单元控制请求
选择单元控制描述符设置或读取视频功能的选择器单元内的选择器控件的属性。选择器单元表示视频流源选择器。CUR、MIN和MAX属性的有效范围是从1到选择器单元的输入管脚数。这个值可以在选择器单元描述符的bNrInPins字段中找到。RES属性只能有一个值。控制选择子SU_INPUT_SELECT_CON......
UVC 视频流接口控制请求
视频流接口控制请求用于设置或读取视频函数的特定视频流接口内接口控制的属性。bmRequestType(1)bRequest(1)wValue (2)wIndex(2)wLength(2)Data(26~34~48)00100001SET_CUR选择器CS<<......
UAC 特性单元控制请求
特性单元控制请求对应于音频特性单元描述符。特性单元控制请求支持的选择子Control SelectorValueFU_CONTROL_UNDEFINED0x00MUTE_CONTROL0x01VOLUME_CONTROL0x02BASS_CONTROL0x03MID_CONTROL0x04TREBL......
UVC 视频流接口描述符
视频流接口描述符包含了所有完整的视频流接口信息。视频流接口信息以标准的视频流接口开头。视频流接口描述符由标准视频控制接口描述符以及各控制相关描述符组成。标准视频流接口描述符使用通用USB设备接口描述符数据结构。struct _INTERFACE_DESCRIPTOR_STRUCT; { BY......
UVC 扩展单元控制请求
扩展单元控制请求设置或读取扩展单元内的视频控件.bmRequestTypebRequestwValue(2)wIndexwLengthData00100001SET_CUR选择子扩展单元ID参数长度参数块bmRequestTypebRequestwValue(2)wIndexwLengthData1......
UVC 处理单元控制请求
处理单元控制请求用于设置或读取视频函数的处理单元内的视频控件的属性。Control SelectorValuePU_CONTROL_UNDEFINED0x00PU_BACKLIGHT_COMPENSATION_CONTROL0x01PU_BRIGHTNESS_CO......
Windows视频流驱动堆栈
在Windows下,微软提供了视频类驱动模块,各厂商只需要遵照UVC协议即可实现生产的摄像头“免驱”的效果。当然,为了实现特定的自定义功能,厂商可以通过UVC的扩展单元实现自定义的功能,由于是自定义协议,需要厂商的硬件和应用软件的支持。Windows下的视频流驱动堆栈可以看到,当厂商生产的摄像头we......
UAC 音频流端点控制请求
音频流端点控制支持如下选择子:ControlSelector ValueEP_CONTROL_UNDEFINED0x00SAMPLING_FREQ_CONTROL0x01PITCH_CONTROL0x02SAMPLING_FREQ_CONTROL采样......
UVC 相机终端控制请求
相机终端控制有20种,分别如下:ControlSelectorValueCT_CONTROL_UNDEFINED0x00CT_SCANNING_MODE_CONTROL0x01CT_AE_MODE_CONTROL0x02CT_AE_PRIORITY_CON......
UVC 视频流端点描述符
视频数据端点可以实现为同步端点或批量端点。等时/同步传输视频端点描述符使用和标准USB设备端点描符同样的数据结构。struct _ENDPOIN_DESCRIPTOR_STRUCT { BYTE bLength; //设备描述符的字节数大小,为0x12 BYTE ......
UVC 静止图像控制请求
静止图像控制请求于支持用于静止图像检索的方法2或3的视频功能是必需的。控制选择子VS_STILL_PROBE_CONTROLVS_STILL_COMMIT_CONTROL强制性请求见下表长度11偏移数据长度值描述0bFormatIndex1数字格式描述符的视频格式索引。通过将此字段设置为关联格式描述......
UVC 接口控制请求
接口控制请求用于设置或读取视频功能VideoControl接口相关控制的属性。bmRequestTypebRequestwValuewIndexwLengthData00100001
—————
10100001SET_CUR<......
再谈USB摄像头UVC视频流接口控制请求dwMaxVideoFrameSize和dwMaxPayloadTransferSize
刚开始的时候,我们做一件事是认真,一丝不苟。对于各个数据的考量力求做到精度,其实这个追求可能并不是因为我们因为项目上的要求,而是我们为了弄清一个事实,有了这个事实我们就可以随处吹牛逼,也成了我们在做新的类似的项目上的优势之资。言归正转,以前在windows下通过USB总线驱动虚拟的UVC摄像头都只......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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