UVC 视频流接口控制请求
2020-10-20
6291
52
视频流接口控制请求用于设置或读取视频函数的特定视频流接口内接口控制的属性。
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:223probe->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