USB协议-UVC描述符篇(三)

USB协议-UVC描述符篇(三)

1.概述

USB设备的描述符用于向主机报告其设备的属性信息,UVC设备属于USB设备的一种,故和通用的USB设备一样,也包含设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。

UVC设备也定义了一些特有的描述符,用于对USB视频设备的扩展。这些特有的UVC描述符和通用的USB描述符,共同组成了UVC设备的描述符,用于对UVC设备信息的描述。

关于USB通用描述符请查看USB协议-描述符篇(一)

2.UVC描述符布局

下图展示了一个UVC设备其描述符的整体布局,该设备使用一个等时/同步传输端点用于传输视频数据,使用一个批量传输端点传输静态图像数据。如果端点支持临时编码数据格式,该描述符布局也包含一个编码单元。

在这里插入图片描述
在该描述符布局中,首先第一项是设备描述符,其次是配置描述符,并且该设备只拥有一个配置描述符。
配置描述符后接一个接口关联描述符IAD,接口关联描述符IAD拥有一个视频控制接口VC和N个视频流接口。

视频控制接口包括视视频控制接口头描述符、输入终端描述符、处理单元描述符、编码单元描述符、输出终端描述符、中断断点描述符。

视频流接口中包括一个接口和与其对应的多个转换设置接口(Alternate Setting)。
其中转换设置接口0描述了临时编码数据格式,用于支持临时编码数据格式,用于使用了等时/同步传输,故转换设置接口0不包含数据传输端点信息。数据传输端点信息在其它转换设置接口中描述。

3.设备描述符

UVC设备使用通用的USB设备描述符来描述设备信息。
根据UVC设备是否包含视频流接口,UVC设备的设备描述符分为两类:

  • 对于包含只暴露视频控制接口的UVC设备,通常视频的功能常常在接口描述符中来定义,设备描述符的bDeviceClass字段,bdevices子类字段,和bDeviceProtocol字段必须设置为零,以便枚举查看接口以确定接口类。
OffsetFieldSizeValueDescription
4bDeviceClass1Class只暴露VC接口,需要设置 0x0
5bDeviceSubClass1SubClass同上, 设置 0x0
6bDeviceProtocol1Protocol0x0
  • 对于包含一个或多个视频接口集合的设备,通常视频的功能常常在接口描述符中来定义。但是由于使用了接口关联描述符描述视频接口集,所以必须设置bDeviceClass,bDeviceSubClass和bDeviceProtocol字段分别为0xEF、0x02和0x01。 目前大多数UVC设备都采用的是这一种了。
OffsetFieldSizeValueDescription
4bDeviceClass1Class设置成混杂设备类, 0xEF
5bDeviceSubClass1SubClass标识一个IAD描述符,必须设置0x02
6bDeviceProtocol1Protocol标识一个IAD描述符,必须 0x1

4.配置描述符

UVC设备的配置描述符也是使用通用USB描述符。规范定义在 defined in section 9.6.3。
配置描述符可以通过GetDescriptor获取,它将携带UVC所有的描述符一起返回给HOST端。关于描述符在内存中的布局请看最后一节。

5.接口关联描述符 - IAD

对于有多个视频流接口的设备必须使用接口关联描述符。该描述符也是和USB通用关联描述符相同。

接口关联描述符是用来描述视频控制接口和一个或多个视频流接口的每个设备功能的视频接口集合。标准的VIC接口集关联描述符与接口关联描述符ECN中定义的标准接口关联描述符相同,只是有些字段现在具有专用值。

OffsetFieldSizeValueDescription
0bLength1Number描述符全部长度
1bDescriptorType1Constant描述符类型,该值为0x0b
2bFirstInterface1Number第一个接口编号。关联描述符中的接口号必须连续
3bInterfaceCount1Number该功能接口总数量(包括视频控制接口和所有视频流接口)
4bFunctionClass1ClassClass code,UVC定义了视频接口类代码CC_VIDEO,值为0x0E
5bFunctionSubClass1Subclass视频子类接口代码 SC_VIDEO_INTERFACE_COLLECTION,值为0x03
UVC IAD Subclass
6bFunctionProtocol1Protocol未用,必须为PC_PROTOCOL_UNDEFINED,值为0x00 或者 PC_PROTOCOL_15, 值为0x01
7iFunction1index功能描述符的索引值

6.视频控制接口描述符

视频控制(VC)接口描述符(VideoControl(VC) Interface Descriptors)包含所有相关信息,以充分表征相应的视频功能。它由两部分组成:标准控制接口描述符(Standard VC Interface Descriptor) 和特定类控制接口描述符(class-specific VC interface descriptor) 。 标准控制接口描述符表征接口本身,而特定于类的接口控制描述符提供有关视频功能内部的相关信息。它指定了修订级别信息,并列出了每个单元和终端的功能。

6.1 标准视频接口描述符

Standard VC Interface Descriptor标准视频控制接口描述符使用的是USB通用的接口描述符。
其在UVC设备中定义如下:


    bLength : 描述符大小.固定为0x09.
    bDescriptorType : 接口描述符类型.固定为0x04.
    bInterfaceNumber: 该接口的编号,接口编号从0开始.
    bAlternateSetting : 用于为上一个字段选择可供替换的位置.即备用的接口描述符编号.
    bNumEndpoint : 使用的端点数目.端点0除外.
    bInterfaceClass : 类型代码,固定为CC_VIDEO,值为0x0E.
    bInterfaceSubClass : 子类型代码,固定为SC_VIDEOCONTROL,值为0x01.
    bInterfaceProtocol : 协议代码,PC_PROTOCOL_15为0x01,PC_PROTOCOL_UNDEFINED未定义为0x00.
    iInterface : 字符串描述符的索引
  • 其中bInterfaceSubClass 视频接口子类主要有以下定义字段:

视频接口subclass code码:

Video Subclass CodesValue
SC_UNDEFINED0x00
SC_VIDEOCONTROL0x01
SC_VIDEOSTREAMING0x02
SC_VIDEO_INTERFACE_COLLECTION0x03
  • bInterfaceProtocol 视频接口协议即UVC协议主要有以下字段:

视频接口协议code标识码:

Video Interface Protocol CodesValue
PC_PROTOCOL_UNDEFINED0x00
PC_PROTOCOL_150x01

6.2 类特定视频控制接口描述符

特定于类的VC接口描述符是用于完全描述视频功能的所有描述符的连接,即所有单元描述符(UDs)和终端描述符(TDs)。
特定于类的VC接口描述符的总长度取决于视频功能中的单元和终端的数量。因此,描述符以一个头(VC_HEADER)开头,该头中wTotalLength字段反映了整个特定于类的VC接口描述符的总字节长度。bcdUVC字段标识了与此视频功能及其描述符兼容的视频设备类规范的版本。bInCollection字段指示此视频控制接口所属的视频接口集合(Video Interface Collection)中有多少个视频流接口(Video Stream Interface)。baInterfaceNr()数组包含Collection中所有VideoStreaming接口的接口号。bInCollection和baInterfaceNr()字段共同提供了所有必要的信息,以确定哪些接口共同构成了视频功能的整个USB接口,即描述视频接口集合(Video Interface Collection)。
对单元(Unit)描述符和终端(Terminal)描述符的报告顺序并不重要,因为每个描述符都可以通过其描述符类型(bDescriptorType)和描述符子类型(bDescriptorSubType)字段进行标识。“描述符类型”字段将描述符标识为特定于类的接口描述符。描述符子类型字段进一步限定了描述符的确切性质。

类特定视频控制接口头描述符位于UVC 标准视频控制接口描述符(Standard VC Interface Descriptor)之后,是控制单元和端点的描述符头。
The following table defines the class-specific VC interface header descriptor.

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度12+bInCollection(即12+n)
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VC_HEADER,值为0x01,用于进一步确定描述符的性质
3bcdUVC2BCDUVC规范协议版本号:UVC15: 0x0150;UVC10: 0x0100
5wTotalLength2Number类特定VC接口描述符总长度,包含这个描述符的header长度和Until描述符及terminal描述符的长度.即表示整个特定类描述符的总长度。
7dwClockFrequency4Number时钟频率,以HZ为单位。新规范已经丢弃了
11bInCollection1Number此Video Control接口所属的Video Interface Collection中有多少个Video Streaming接口数量:n
12baInterfaceNr(1)1Number在这个VIC集合中第一个VideoStreaming的接口号
12+(n-1)baInterfaceNr(n)1Number在这个VIC集合中最后一个VideoStreaming的接口号

此header后面是一个或多个单元和/或终端描述符(Terminal Descriptors)。描述符的布局取决于它们所代表的单元或终端的类型。在第2.3节“视频功能拓扑”中描述的每个单元和终端都有一个描述符类型。它们将在下面的部分中进行总结。前四个字段可用于所有单元符和终端描述符。它们包含描述符长度(Length)、描述符类型(DescriptorType)、描述符子类型(DescriptorSubType)以及单元或终端ID(Unit and Termanl ID)。

视频功能中的每个单元和终端都被分配了一个唯一的标识号,即Unit ID(UID)或Termianl ID(TID),它包含在描述符的bUnitID或bTerminalID字段中。值0x00被保留给未定义的ID,有效地将视频函数(单元和终端)中可寻址实体的总数限制为255。

除了唯一地识别视频功能中的所有可寻址实体外,id还用于描述视频功能的拓扑结构;即,一个单元或终端描述符的bSourceID字段指示该单元或终端连接到哪个其他单元或终端。

6.2.1 输入端子描述符 Input Terminal Descriptor

Input Terminal Descriptor in section 3.7.2.1
输入终端描述符(ITD)向主机提供与输入终端的功能方面相关的信息。

输入终端由bTerminalID字段中的值唯一标识。同一视频功能内的其他单元或终端不得具有相同的ID。该值必须在每个定向到终端的请求的bTerminalID字段中传递。

wTerminalType类型字段提供了有关输入终端所代表的物理实体的相关信息。这可以是一个USB输出端点,一个外部复合视频连接,一个摄像头传感器,等等。第B.2节“输入终端类型”提供了终端类型代码的完整列表。

bAssocTerminal字段用于将输出终端与该输入终端关联,有效地实现了双向终端的配对。这方面的一个例子是摄像机上的一个胶带(胶卷)单元,它将分别有输入和输出终端来接收和源视频。如果使用了这个bAssocTerminal字段,则两个关联的终端都必须属于双向终端类型组。如果不存在关联,则必须将bAssocTerminal字段设置为零。

主机软件可以将相关的终端视为物理上相关的终端。在许多情况下,一个终端不能因为没有另一个终端而存在。提供了一个到字符串描述符的索引,以进一步描述输入终端。

The following table presents an outline of the Input Terminal descriptor.
Table 3-4 Input Terminal Descriptor

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度。即8(+x)
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VC_INPUT_TERMINAL,值为0x02,用于进一步确定描述符的性质
3bTerminalID1Constant唯一标识终端的非零常数。此值用于处理此终端的所有请求。
4wTerminalType2Constant描述终端类型的常数。见附录B,“终端类型”。即: Input Terminal Types
6bAssocTerminal1Constant与此输入终端关联的输出终端的ID,如果不存在此类关联,则为零(0)。
7iTerminal1Index描述输入终端的字符串描述符的一个的索引。
根据终端类型,某些输入终端描述符具有附加字段。这些特殊终端类型的描述符将在特定于这些终端的单独部分和随附的文档中进行描述。

B.2. Input Terminal Types
这些终端类型描述了被设计用于捕捉视频的终端。它们要么是视频功能的物理一部分,要么可以假定在正常运行中与之连接。这些终端类型仅对输入终端有效。
Table B- 2 Input Terminal Types

Terminal TypeCodeI/ODescription
ITT_ VENDOR_SPECIFIC0x0200IVendor-Specific Input Terminal. 特定于供应商的输入终端
ITT_CAMERA0x0201ICamera sensor. To be used only in Camera Terminal descriptors. 摄像头传感器。仅用于照相机终端描述符。
ITT_MEDIA_TRANSPORT_INPUT0x0202ISequential media. To be used only in Media Transport Terminal Descriptors. 顺序媒体。仅用于终端传输描述符

6.2.2 输出端子描述符 Output Terminal Descriptor

Output Terminal Descriptor in section 3.7.2.2
输出终端描述符(OTD)向主机提供与输出终端的功能方面相关的信息。

输出终端由bTerminalID字段中的值作为唯一标识。同一视频功能内的其他单元或终端不得具有相同的ID。该值必须在每个定向到终端的请求的bTerminalID字段中传递。

wTerminalType字段提供了有关输出终端所代表的物理实体的相关信息。这可以是一个USB IN Endpoint,一个外部复合视频输出连接(external Composite Video Out Connection),一个液晶显示器(LCD Display),等等。第B.3节“输出终端类型”(Output Terminal Types)提供了终端类型代码的完整列表。

bAssocTerminal字段用于将输出终端与该输入终端关联,有效地实现了双向终端的配对。这方面的一个例子是摄像机上的一个胶带(胶卷)单元,它将分别有输入和输出终端来接收和源视频。如果使用了这个bAssocTerminal字段,则两个关联的终端都必须属于双向终端类型组。如果不存在关联,则必须将bAssocTerminal字段设置为零。

bSourceID字段用于描述此终端的连接性。它包含此输出终端通过其输入引脚连接到的单元或终端的ID。提供了一个到字符串描述符的索引,以进一步描述输出终端。

The following table presents an outline of the Output Terminal descriptor.
Table 3-5 Output Terminal Descriptor

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度。即8(+x)
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VC_OUTPUT_TERMINAL,值为0x02,用于进一步确定描述符的性质
3bTerminalID1Constant唯一标识终端的非零常数。此值用于处理此终端的所有请求。
4wTerminalType2Constant描述终端类型的常数。见附录B,“终端类型”。即: Input Terminal Types
6bAssocTerminal1Constant与此输入终端关联的输出终端的ID,如果不存在此类关联,则为零(0)。
7bSourceID1Constant此终端所连接到的单元或终端的ID。
8iTerminal1Index描述输入终端的字符串描述符的一个的索引。
根据终端类型,某些输出终端描述符具有附加字段。这些特殊终端类型的描述符将在特定于这些终端的单独部分和随附的文档中进行描述。

6.2.3 相机端点描述符

Camera Terminal Descriptor in section 3.7.2.3
相机终端由bTerminalID字段中的值唯一标识。同一视频功能内的其他单元或终端不得具有相同的ID。该值必须在每个定向到终端的请求的bTerminalID字段中传递。

wTerminalType字段提供了有关输入终端所代表的物理实体的相关信息。对于相机终端,该字段应设置为ITT_CAMERA(参见B.2节,“输入终端类型” Input Terminal Types)。

bAssocTerminal字段用于将输出终端与该输入终端关联,有效地实现了双向终端对。提供了一个到字符串描述符的索引,以进一步描述照相机终端。

bmContorsls字段是一个位图,指示视频流的某些摄像机控制的可用性。

Table 3-6 Camera Terminal Descriptor

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度。18个字节
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VC_INPUT_TERMINAL,值为0x02,用于进一步确定描述符的性质
3bTerminalID1Constant唯一标识终端的非零常数。此值用于处理此终端的所有请求。
4wTerminalType2Constant描述终端类型的常数。设置为: ITT_CAMERA - 0x0201
6bAssocTerminal1Constant与此输入终端关联的输出终端的ID。
7iTerminal1Index描述相机终端的字符串描述符的一个的索引。
8wObjectiveFocalLengthMin2Number如果不支持光学变焦,则Lmin值;此字段应设置为0。
10wObjectiveFocalLengthMax2Number如果不支持光学变焦,则Lmax值;此字段应设置为0。
12wOcularFocalLength2Number如果不支持光学变焦,则Locular值;此字段应设置为0。
14bControlSize1NumberbmControls字段的字节大小:3
15bmControls3Number设置为1的位表示视频流支持所述控制。
D0:Scanning Mode 扫描模式
D1:Auto Exposure Mode 自动曝光模式
D2: Auto-Exposure Priority 自动曝光优先级
D3: Exposure Time (Absolute) 绝对曝光时间
D4: Exposure Time (Relative) 相对曝光时间
D5: Focus (Absolute) 对焦绝对
D6 : Focus (Relative) 对焦相对
D7: Iris (Absolute)
D8 : Iris (Relative)
D9: Zoom (Absolute)
D10: Zoom (Relative)
D11: PanTilt (Absolute)
D12: PanTilt (Relative)
D13: Roll (Absolute)
D14: Roll (Relative)
D15: Reserved
D16: Reserved
D17: Focus, Auto
D18: Privacy
D19: Focus, Simple
D20: Window
D21: Region of Interest
D22 – D23: Reserved, set to zero

6.2.4 SU选择器单元描述符

Selector Unit Descriptor 3.7.2.4
选择器单元是由选择器单元描述符Seletor Unit Descriptor(SUD)的bUnitID字段中的值唯一标识。同一视频功能内的其他单元或终端不得具有相同的ID。这个值必须与指向选择器单元的每个请求一起传递。

bNrInPins字段包含选择器单元的输入引脚数(p)。输入引脚的连接是通过包含p个元素的baSourceID()数组来描述的。数组中的索引i是基于输入引脚号的,与输入引脚号直接相关。baSourceID(i)包含输入引脚i所连接的单元或端子的ID。

提供了对字符串描述符的索引,以进一步描述选择器单元。

Table 3-7 Selector Unit Descriptor

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度。6+p
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VC_SELETOR_UNIT,值为0x04,用于进一步确定描述符的性质
3bUnitID1Number一个非零常数,在视频功能中唯一标识该单元。此值用于处理此单元的所有请求。
4bNrInPins1NumberNumber of Input Pins of this Unit: p. 该单元输入引脚号
5baSourceID(1)1Number该选择器单元的第一个输入引脚号所连接到的单元或终端的ID。
5+(p-1)baSourceID§1Number该选择器单元的最后一个输入引脚号所连接到的单元或终端的ID。
5+piSelector1Index描述选择器单元的字符串描述符的索引。

6.2.5 处理单元描述符 Processing Unit Descriptor

Processing Unit Descriptor 3.7.2.5
处理单元由处理单元描述符(PUD)的bUnitID字段中的值唯一标识。同一视频功能内的其他单元或终端不得具有相同的ID。这个值必须与指向处理单元的每个请求一起传递。

bSourceID字段用于描述此处理单元的连通性。它包含该处理单元通过其输入引脚连接到的单元或终端的ID。bSourceID必须指同一视频功能中的单元或终端。bmControls字段是一个位图,指示视频流的某些处理控件的可用性。

提供了一个到字符串描述符的索引,以进一步描述该处理单元。
Table 3-8 Processing Unit Descriptor

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度。13字节
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VC_PROCESSING_UNIT,值为0x05,用于进一步确定描述符的性质
3bUnitID1Number一个非零常数,在视频功能中唯一标识该单元。此值用于处理此单元的所有请求。
4bSourceID1Constant此单元所连接到的单元或终端的ID
5wMaxMultiplier2Number如果支持数字倍增器控制,此字段表示最大数字放大倍数乘以100。例如,对于一个支持1-4.5倍数字变焦(4.5倍的倍数)的设备,该字段将被设置为450。如果是数字乘数器不支持控制,此字段应设置为0。
7bControlSize1NumberbmControls字段的大小,字节:3
8bmControls3bitmapA bit set to 1 indicates that the mentioned Control is supported for the video stream.
D0: Brightness
D1: Contrast
D2: Hue
D3: Saturation
D4: Sharpness
D5: Gamma
D6: White Balance Temperature
D7: White Balance Component
D8: Backlight Compensation
D9: Gain
D10: Power Line Frequency
D11: Hue, Auto
D12: White Balance Temperature, Auto
D13: White Balance Component, Auto
D14: Digital Multiplier
D15: Digital Multiplier Limit
D16: Analog Video Standard
D17: Analog Video Lock Status
D18: Contrast, Auto
D19 – D23: Reserved. Set to zero.
11iProcessing1Index描述此处理单元的字符串描述符的索引。
12bmVideoStandards1bitmap由处理单元支持的所有模拟视频标准的位图。值为零表示应该忽略此位图。
D0: NONE
D1:NTSC-525/60
D2:PAL-625/50
D3:secam-625/50
D4:NTSC-625/50
D5:PAL-525/60
D6-D7:Reserved。Set to zero。

6.2.6 编码单元描述符 Encoding Unit Descriptor

Encoding Unit Descriptor 3.7.2.6
编码单元由编码单元描述符(EUD)的bUnitID字段中的值唯一标识。同一视频功能内的其他单元或终端不得具有相同的ID。这个值必须与定向到编码单元的每个请求一起传递。

bSourceID字段用于描述此编码单元的连通性。它包含该编码单元通过其输入引脚连接到的单元或终端的ID。bSourceID必须指同一视频功能中的单元或终端。bmContorsls字段是一个位图,指示视频流的某些编码控件的可用性。

提供了对字符串描述符的索引,以进一步描述编码单元。

Table 3-9 Encoding Unit Descriptor

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度。13字节
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VC_ENCODING_UNIT,值为0x07,用于进一步确定描述符的性质
3bUnitID1Number一个非零常数,在视频功能中唯一标识该单元。此值用于处理此单元的所有请求。
4bSourceID1Constant此单元所连接到的单元或终端的ID
5iEncoding1Index描述此编码单元的字符串描述符的索引。
6bControlSize1NumberbmControls和bmControlsRuntime字段的大小:值必须为3。
7bmControls3bitmap位设置为1表示支持指定的控件进行初始化:
D0: Select Layer
D1: Profile and Toolset
D2: Video Resolution
D3: Minimum Frame Interval
D4: Slice Mode
D5: Rate Control Mode
D6: Average Bit Rate
D7: CPB Size
D8: Peak Bit Rate
D9: Quantization Parameter
D10: Synchronization and Long-Term Reference Frame
D11: Long-Term Buffer
D12: Picture Long-Term Reference
D13: LTR Validation
D14: Level IDC
D15: SEI Message
D16: QP Range
D17: Priority ID
D18: Start or Stop Layer/View
D19: Error Resiliency
D20 - 23: Reserved; set to zero
10bmControlsRuntime3bitmap设置为1的位表示在运行时支持上述控件:
D0: Select Layer
D1: Profile and Toolset.
D2: Video Resolution
D3: Minimum Frame Interval
D4: Slice Mode.
D5: Rate Control Mode
D6: Average Bit Rate
D7: CPB Size
D8: Peak Bit Rate.
D9: Quantization Parameter
D10: Synchronization and Long-Term Reference Frame
D11: Long-Term Buffer
D12: Picture Long-Term Reference
D13: LTRValidation
D14: Level IDC
D15: SEI Message
D16: QP Range
D17: Priority ID.
D18: Start or Stop Layer/View
D19: Error Resiliency
D20 – D23: Reserved, set to zero.

编码单元描述符支持bmControls和bmControlsRuntime 的单独列表。这里使用的两个列表反映了期望许多UVC设备在进行流媒体视频时将不能支持与初始化期间相同的功能。这部分是由于固有的异步性质的编码器控制提供的USB。

6.2.7 扩展单元描述符 Extension Unit Descriptor

Extension Unit Descriptor 3.7.2.7
扩展单元是由扩展单元描述符(XUD)的bUnitID字段中的值唯一标识。同一视频功能内的其他单元或终端不得具有相同的ID。这个值必须与指向扩展单元的每个请求一起传递。

The Extension Unit Descriptor allows the hardware designer to define any arbitrary set of controls such that a class driver can act as an intermediary between vendor-supplied host software and functionality of the device.
扩展单元描述符允许硬件设计器定义任何任意的控件集,以便类驱动程序可以作为供应商提供的主机软件和设备功能之间的中介。

指南扩展代码(guidExtensionCode)字段包含一个供应商特定的代码,以进一步标识扩展单元。

Table 3-10 Extension Unit Descriptor

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度。24+p+n
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VC_EXTENSION_UNIT,值为0x06,用于进一步确定描述符的性质
3bUnitID1Number一个非零常数,在视频功能中唯一标识该单元。此值用于处理此单元的所有请求。
4guidExtensionCode16GUID标识扩展单元的供应商特定的代码
20bNumControls1Number此扩展单元中的控制数量
21bNrInPins1Number本装置的输入引脚数量:p
22baSourceID(1)1Number此扩展单元的第一个输入引脚所连接到的单元或终端的标识。
22+(p-1)baSourceID§1Number此扩展单元的最后一个输入引脚号所连接到的单元或终端的标识。
22+pbControlSize1NumberbmControls字段的大小,字节:n
23+pbmControlsnbmControls设置为1的位表示支持上述控件:D(n*8-1)…0:特定于供应商的
23+p+niExtensionnIndex描述此扩展单元的字符串描述符的索引。

7.视频控制端点描述符 VideoControl Endpoint Descriptors

VideoControl Endpoint Descriptors 3.8
本小节将描述所有相关Video Control interface的端点描述符。

7.1VC控制端点描述符 VC Control Endpoint Descriptors

7.1.1 标准VC控制端点描述符 Standard VC Control Endpoint Descriptor

Because endpoint 0 is used as the VideoControl control endpoint, there is no dedicated standard
control endpoint descriptor.
因为端点0被用作视频控制控制端点,因此没有专用的标准控制端点描述符。

7.1.2 类特定的VC控制端点描述符 Class-Specific VC Control Endpoint Descriptor

UVC设备没有Class-Specific VC Control Endpoint Descriptor

7.2 VC中断端点描述符 VC Interrupt Endpoint Descriptors

VC Interrupt Endpoint Descriptors VC中断端点描述符。
标准和特定于类的中断端点描述符提供有关设备中断使用的所有信息

7.2.1 标准VC中断端点描述符 Standard VC Interrupt Endpoint Descriptor

Standard VC Interrupt Endpoint Descriptor标准VC中断端点描述符使用的是通用的USB端点描述符来描述端点信息。 (defined in section 9.6.6 “Endpoint” of USB Specification Revision 2.0 or USB Specification Revision 3.0.)

Table 3-11 Standard VC Interrupt Endpoint Descriptor

OffsetFieldSizeValueDescription
0bLength1Number描述符的全部长度。 7个字节。
1bDescriptorType1Constant指描述符的类型,ENDPOINT描述符该值0x05
2bEndpointAddress1Endpoint该字段描述usb设备上端点的地址。 该地址有以下编码:
Bit 3…0: The endpoint number
Bit 6…4: Reserved, reset to zero
Bit 7: Direction, ignored for control endpoints
    0 = OUT endpoint
    1 = IN endpoint
3bmAttributes1Bitmap当使用 bConfigurationValue 配置端点时,该字段描述端点的属性。
Bits 1…0: Transfer Type
     00 = Control
     01 = Isochronous
     10 = Bulk
     11 = Interrupt
如果是中断端点,位 5…2 定义如下:
Bits 3…2: Reserved, must be set 00
Bits 5…4: Usage Type
     00 = Notification
     01 = Periodic
     10 = Reserved
     11 = Reserved
如果是同步的,它们的定义如下:
Bits 3…2: Synchronization Type
     00 = No Synchronization
     01 = Asynchronous
     10 = Adaptive
     11 Synchronous
Bits 5…4: Usage Type
     00 = Data endpoint
     01 = Feedback endpoint
     10 = Implicit feedback Data endpoint
     11 = Reserved
如果不是等时或中断端点,位 5…2 被保留并且应设置为零。所有其他位都保留并应重置为零。 保留位主机将忽略。
4wMaxPacketSize2Number表示当前配置下此端点能够接收或发送的最大数据包的大小。
该字段只有两个合法值。 对于控制端点,此字段应设置为 512。对于所有其他端点类型,此字段应设置为 1024。
6bInterval1Number查询时间,就是主机多久和设备通讯一次,主机在枚举设备的时候会得到端点描述符,然后根据端点描述符这个值和此端点进行对应的数据交互,也就是主机多久给端点发送一次数据请求。根据设备运行速度以帧或微帧表示,低速和全速称为帧,下面的一个值代表1ms,高速称为微帧,一个值代表125us。
关于中断端点: 针对数据传输的轮询端点的时间间隔。对于全速中断端点,该值以帧表示,其范围必须为1到255。对于高速中断端点,使用bInteval的值作为**2bInteval-1**值的指数;例如,**bInterval**为4表示周期为8(23)。此值必须是从1到16。

7.2.2 类特定VC中断端点描述符 Class-specific VC Interrupt Endpoint Descriptor

特定于类的中断端点描述符提供有关设备能够发送的最大中断结构大小的信息。 主机驱动程序将使用此值来分配足够大小的缓冲区以接收最大中断结构大小。 如果定义了标准中断端点描述符,则此描述符是必需的。

OffsetFieldSizeValueDescription
0bLength1Number结构体自身长度5
1bDescriptorType1Constant描述符类型:CS_ENDPOINT,值为0x25
2bDescriptorSubType1ConstantEP_INTERRUPT 值为:0x03
3wMaxTransferSize2Number此端点能够发送的最大中断结构大小。

Table A- 7 Video Class-Specific Endpoint Descriptor Subtypes

Descriptor SubtypeValue
EP_UNDEFINED0x00
EP_GENERAL0x01
EP_ENDPOINT0x02
EP_INTERRUPT0x03

8.视频流接口描述符 VideoStreaming Interface Descriptors

VideoStreaming Interface Descriptors 视频流接口描述符包含了所有相关流接口的完整信息。

8.1 标准视频流接口描述符 Standard VS Interface Descriptor

Standard VS Interface Descriptor 标准流接口描述符和USB通用接口描述符相同。

Table 3-13 Standard VS Interface Descriptor

OffsetFieldSizeValueDescription
0bLength1Number描述符的全部长度, 9个字节
1bDescriptorType1Constant指描述符的类型,接口描述符该值0x04
2bInterfaceNumber1Number接口编号。如果一个配置有多个接口的话,那么每个接口的编号都有一个独立的编号,编号从0开始递增。如果只有一个接口这里可以设置为0, 如果不只一个接口,从0开始依次递增
3bAlternateSetting1Number备用接口编号,一般很少用,设置为0。即,比如一个接口1中可能有多种备选接口进行选择,这个字段就是用来标识在接口1中我是第几个备选接口,也是从0开始依次递增。 如果没有备选接口该值为0。通常UVC设备都会有备选接口。
4bNumEndpoints1Number该接口使用的端点个数,前面讲过一个接口就是一种功能,每个接口需要用户为其分配端点来实现对应的功能,注意一点,这个端点个数不包括端点0
5bInterfaceClass1ClassClass code (assigned by the USB-IF).
零值保留用于将来的标准化。 如果此字段设置为 FFH,则接口类是特定于供应商的进行自定义。 所有其他值保留供 USB-IF 分配。该值取自defined-class-codes约定的值。通常USB设备是作为UVC、HID等功能都是这个字段进行定义的。 此处作为UVC设备,设置为 CC_VIDEO, 值为0x0E
6bInterfaceSubClass1SubClassSubclass code (assigned by the USB-IF).
这些代码由 bInterfaceClass 字段的值限定。 如果 bInterfaceClass 字段重置为零,则该字段也应重置为零。 如果 bInterfaceClass 字段未设置为 FFH,则所有值都保留供 USB-IF 分配。 作为UVC 接口类 CC_VIDEO,此处为SC_VIDEOSTREAMING, 值为0x02
7bInterfaceProtocol1ProtocolProtocol code (assigned by the USB).
这些代码由 bInterfaceClass 和 bInterfaceSubClass 字段的值限定。 如果接口支持特定于类的请求,则此代码标识设备使用的协议,如设备类的规范所定义。 如果此字段重置为零,则设备不会在此接口上使用特定于类的协议。 如果此字段设置为 FFH,则设备为此接口使用供应商特定的协议。 作为UVC设备,此处必须为: PC_PROTOCOL_15,值为0x01
8iInterface1index描述此接口的描述索引值

8.2 类特定视频流接口描述符 Class-Specific VS Interface Descriptors

类特定VS接口描述符由输入头(Input Header)、输出头(Output Header)、格式(Format)和帧(Frame)描述符组成。
每个 VS 接口都有一个输入或输出头描述符,每个支持的视频流格式都有一个单独的格式描述符,每个格式描述符都有一个单独的帧描述符列表(如果格式需要帧描述符)。 标头、格式和帧描述符仅在相关接口的备用设置 0 中定义。 它们不会在同一界面的后续备用设置中重复。

8.2.1 输入头描述符

Input Header Descriptor 3.9.2.1
Input Header Descriptor用于包含流式视频数据的IN Endpoint的 VS Interface。它提供了关于后面的不同格式描述符数量的信息,以及在此接口的备用设置0中所有特定于类的描述符的总大小。

Table 3-14 Class-specific VS Interface Input Header Descriptor

OffsetFieldSizeValueDescription
0bLength1Number这个描述符的自身长度。13+(p*n)
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VS_INPUT_HEADER,值为0x01,用于进一步确定描述符的性质
3bNumFormats1Number此接口的视频有效载荷格式描述符(Format Descriptor)数量(不包括视频帧描述符(Frame Descriptor)):p
4wTotalLength2Number类特定VS接口描述符总长度,包含这个描述符的header长度,即表示整个特定类VS描述符的总长度。
6bEndpointAddress4Endpoint用于视频数据的等时(isochronous)或批量(BULK)端点的地址。地址编码如下:
D7: Direction
1 = IN endpoint
D6…4: Reserved, set to zero.
D3…0: The endpoint number, determined by the designer.
7bmInfo1bitmapIndicates the capabilities of this VideoStreaming interface: 指示此视频流接口的能力
D0: Dynamic Format Change supported
D7…1: Reserved, set to zero.
8bTerminalLink1Constant该接口的视频端点(vidoe endpoint)所连接到的输出终端(output terminal)的终端ID。
9bStillCaptureMethod1Number支持如第2.4.2.4节“静止图像捕获”所述的静态图像捕获方法:
0: None (Host software will not support any form of still image capture)
1: Method 1
2: Method 2
3: Method 3
10bTriggerSupport1Number指定通过此接口是否支持硬件触发:
0: Not supported
1: Supported
11bTriggerUsage1Number指定主机软件应如何响应来自此接口的硬件触发中断事件。这是忽略了如果bTriggerSupport字段为0.
0: Initiate still image capture 启动静态图像捕捉
1: General purpose button event. Host driver will notify client application of button press and button release events 通用按钮事件。主机驱动程序将通知客户端应用程序的按钮按下和按钮释放事件
12bControlSize1Number每个bmaContorls(x)字段的大小,以字节表示:n
13bmaControls(1)1bitmap对于位D3…0,位设置为1表示当bFormatIndex为1时,视频探测和提交控制支持命名字段:
D0: wKeyFrameRate
D1: wPFrameRate
D2: wCompQuality
D3: wCompWindowSize
For bits D5…4, a bit set to 1 indicates that the named control is supported by the device when bFormatIndex is 1:
D4: Generate Key Frame
D5: Update Frame Segment
D6…(n*8-1): Reserved, set to zero
Note going forward from version 1.5 the proper means to detect whether a field is supported by Probe & Commit is to issue a VS_PROBE_CONTROL(GET_CUR).
13+ (p*n-n)bmaControls§1BitmapFor bits D3…0, a bit set to 1 indicates that the named field is supported by the Video Probe and Commit Control when bFormatIndex is p:
D0: wKeyFrameRate
D1: wPFrameRate
D2: wCompQuality
D3: wCompWindowSize
For bits D5…4, a bit set to 1 indicates that the named control is supported by the device when bFormatIndex is p:
D4: Generate Key Frame
D5: Update Frame Segment
D6…(n*8-1): Reserved, set to zero
Note D0-D3 are deprecated. Going forward from version 1.5 the proper means to detect whether a field is supported by Probe & Commit is to issue a VS_PROBE_CONTROL(GET_CUR).

8.2.2 输出头描述符 Output Header Descriptor

Output Header Descriptor 3.9.2.2
Output Header Descriptor用于包含流式视频数据的OUT Endpoint的VS interface。它提供了关于后面的不同格式描述符数量的信息,以及在此接口的备用设置0中所有特定于类的描述符的总大小。

Table 3-15 Class-specific VS Interface Output Header Descriptor

OffsetFieldSizeValueDescription
0bLength1Number这个描述符的自身长度。9+(p*n)
1bDescriptorType1Constant描述符类型:CS_INTERFACE,值为0x24
2bDescriptorSubType1Constant描述符子类型VS_OUTPUT_HEADER,值为0x02,用于进一步确定描述符的性质
3bNumFormats1Number此接口的视频有效载荷格式描述符(Format Descriptor)数量(不包括视频帧描述符(Frame Descriptor)):p
4wTotalLength2Number类特定VS接口描述符总长度,包含这个描述符的header长度,即表示整个特定类VS描述符的总长度。
6bEndpointAddress4Endpoint用于视频数据的等时(isochronous)或批量(BULK)端点的地址。地址编码如下:
D7: Direction
0 = out endpoint
D6…4: Reserved, set to zero.
D3…0: The endpoint number, determined by the designer.
7bmInfo1bitmapIndicates the capabilities of this VideoStreaming interface: 指示此视频流接口的能力
D0: Dynamic Format Change supported
D7…1: Reserved, set to zero.
8bTerminalLink1Constant该接口的视频端点(vidoe endpoint)所连接到的输入终端(input terminal)的终端ID。
12bControlSize1Number每个bmaContorls(x)字段的大小,以字节表示:n
13bmaControls(1)1bitmap对于位D3…0,位设置为1表示当bFormatIndex为1时,视频探测和提交控制支持命名字段:
D0: wKeyFrameRate
D1: wPFrameRate
D2: wCompQuality
D3: wCompWindowSize
D4…(n*8-1): Reserved, set to zero
Note D0-D3 are deprecated. Going forward from version 1.5, the proper means to detect whether a field is supported by Probe & Commit is to issue a VS_PROBE_CONTROL(GET_CUR).
13+ (p*n-n)bmaControls§1BitmapFor bits D3…0, a bit set to 1 indicates that the named field is supported by the Video Probe and Commit Control when bFormatIndex is p:
D0: wKeyFrameRate
D1: wPFrameRate
D2: wCompQuality
D3: wCompWindowSize

D4…(n*8-1): Reserved, set to zero

8.2.3 负载格式描述符 Payload Format Descriptors

有效负载格式描述符用其特定的格式来定义视频流的特征。以下描述符在本文档附带的单独的有效负载规范文档中定义。有关特定描述符的更多信息,请参见相应的文档。

Table 3-16 Payload Format Descriptor

Payload Format DescriptorDocument
Uncompressed VideoUSB_Video_Payload_Uncompressed
MJPEG VideoUSB_Video_Payload_MJPEG
MPEG1-SSUSB_Video_Payload_Stream_Based
MPEG2-PSUSB_Video_Payload_Stream_Based
MPEG-2 TSUSB_Video_Payload_MPEG2-TS
H.264USB_Video_Payload_H264
VP8USB_Video_Payload_VP8
SMTPE VC1USB_Video_Payload_MPEG2-TS
MPEG-4 SLUSB_Video_Payload_MPEG2-TS
DVUSB_Video_Payload_DV
Vendor DefinedUSB_Video_Payload_Stream_Based or
USB_Video_Payload_Frame_Based

8.2.4 视频帧描述符 Video Frame Descriptor

Video Frame Descriptor 3.9.2.4
视频帧描述符(或简称帧描述符)用于描述已解码的视频和静态图像的帧尺寸以及基于帧的格式所支持的其他特定于帧的特征。框架描述符(如果需要)立即遵循相关的格式描述符。以下视频框架描述符将在本文档附带的单独的有效负载规范文档中定义。有关特定框架描述符的更多信息,请参见相应的文档。

Table 3-17 Defined Video Frame Descriptor Resources

Video Frame DescriptorDocument
UncompressedUSB_Video_Payload_Uncompressed
MJPEGUSB_Video_Payload_MJPEG
Generic Frame-BasedUSB_Video_Payload_Frame_Based
H.264USB_Video_Payload_H.264
VP8USB_Video_Payload_VP8

8.2.5 静态图像帧描述符 Still image Frame Descriptor

Still image Frame Descriptor 3.9.2.5

8.2.6 颜色匹配描述符

Color Matching Descriptor

9.视频流端点描述符

Video Streming endpoint descriptor

10.UVC描述符布局

UVC摄像头的配置描述符内存布局实例

下面引用一段UVC摄像头的配置描述符内存布局。

USB_CONFIGURATION_DESCRIPTOR(配置描述符)
USB_INTERFACE_ASSOCIATION_DESCRIPTOR(接口关联描述符)
Standard VC Interface Descriptor(UVC 标准接口描述符)
    USB_VC_HEADER(UVC控制接口头描述符)
        Video Control Input Terminal Descriptor
        Video Control Processing Unit Descriptor
        Video Control Extension Unit Descriptor
        Video Control Output Terminal Descriptor
        Endpoint Descriptor
    Class-specific VC Interrupt Endpoint Descriptor
        VC-Specific VS Video Input Header Descriptor(视频流接口描述符)
        VS Frame Based Payload Format Type Descriptor
        VS Frame Based Payload Frame Type Descriptor
        Endpoint Descriptor
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值