UAC 上下混音处理单元描述符
上下混合处理单元是UAC处理单元描述的一类,使用上下混合处理单元描述符来描述。
UAC1.0上下混音处理单元描述符定义
字段偏移 | 字段 | 字段长度 | 值类型 | 说明 |
---|---|---|---|---|
0 | bLength | 1 | 数字 | 该描述符的总长度:15+n+2*m |
1 | bDescriptorType | 1 | 常量 | 描述符类型,CS_INTERFACE |
2 | bDescriptorSubtype | 1 | 常量 | 描述符字类型:PROCESSING_UNIT |
3 | bUnitID | 1 | 数字 | 该处理单元的ID |
4 | wProcessType | 2 | 常量 | UAC处理单元的类型,见下表UAC处理单元描述符的类型UP/DOWNMIX_PROCESS |
6 | bNrInPins | 1 | 常量 | 该处理单元的输入管脚数量,固定为1 |
7 | bSourceID | 1 | 数字 | 该处理单元输入引脚连接的上接单元/终端ID |
8 | bNrChannels | 1 | 数字 | 该处理单元的逻辑输出通道数量 |
9 | wChannelConfig | 2 | 位图 | 输出通道的位图掩码 |
11 | iChannelNames | 1 | 数字 | 描述第一个输出通道的字符串描述符索引 |
12 | bControlSize | 1 | 数字 | bmControls的字节数 |
13 | bmControls | n | 位图 | 设置为 1 的位表示支持控制: D0:启用处理。 D1:模式选择。 D2..(n*8-1):保留 |
13+n | iProcessing | 1 | 数字 | 该处理单元的字符串描述符索引 |
14+n | bNrModes | 1 | 数字 | 该处理单元支持的模式个数:m |
15+n | waModes(1) | 2 | 位图 | 模式 1 的逻辑通道 |
… | … | … | … | … |
15+n+(m-1)*2 | waModes(m) | 2 | 位图 | 模式m 的逻辑通道 |
上下混合处理单元只有一个输入引脚,所以在处理单元描述的bNrInputs字段永远为1。
上下混音处理单元的输出由bNrChannels、wChannelConfig 和 iChannelNames 字段共同构成,它们共同描述了在处理单元的输出端实际存在哪些逻辑通道。 根据所选的操作模式,会有一个或多个通道可能未使用。
UAC音频处理单元描述符使用字段wProcessType来标识各种处理单元描述符的类型。
bmControls 字段是一个位图,表示上下混合处理单元中支持某些音频控制的可用性。 为了将来的可扩展性,bmControls 字段占用的字节数在 bControlSize 字段中指示。
bmControls 字段的位 D0 表示启用处理控制。 模式选择控制 (D1) 用于通过为音频设备选择不同的操作模式来改变处理单元的行为。
上下混音处理单元支持的模式数 (m) 包含在 bNrModes 字段中。 该字段后面是一组模式字段 waModes()。 该数组中的索引 i 是基于 1 的,并且与条目 waModes(i) 描述的模式编号直接相关。 值 i 必须用作设置模式请求的参数以选择模式 i。
waModes() 字段中的位分配与集群描述符中的 wChannelConfig 字段非常相似。即 waModes(i) 字段中设置的位表示对于 模式i,上/下混合处理单元为与设置位的位置相关联的逻辑通道产生有意义的音频数据。
每个 waModes(i) 字段只能包含输出通道集群中存在的那些逻辑通道的设置位。 换句话说,所有的 waModes() 字段只能包含 Unit 的集群描述符的 wChannelConfig 字段的一个子集。 此外,具有非预定义空间位置的逻辑通道不能在 waModes() 字段中标记为活动的。 因此默认情况下假定它们是活动的。
UAC2.0上下混音处理单元描述符定义
字段偏移 | 字段 | 字段长度 | 值类型 | 说明 |
---|---|---|---|---|
0 | bLength | 1 | 数字 | 该描述符的总长度:15+n+2*m |
1 | bDescriptorType | 1 | 常量 | 描述符类型,CS_INTERFACE |
2 | bDescriptorSubtype | 1 | 常量 | 描述符字类型:PROCESSING_UNIT |
3 | bUnitID | 1 | 数字 | 该处理单元的ID |
4 | wProcessType | 2 | 常量 | UAC处理单元的类型,见下表UAC处理单元描述符的类型UP/DOWNMIX_PROCESS |
6 | bNrInPins | 1 | 常量 | 该处理单元的输入管脚数量,固定为1 |
7 | bSourceID | 1 | 数字 | 该处理单元输入引脚连接的上接单元/终端ID |
8 | bNrChannels | 1 | 数字 | 该处理单元的逻辑输出通道数量 |
9 | wChannelConfig | 4 | 位图 | 输出通道的位图掩码 |
13 | iChannelNames | 1 | 数字 | 描述第一个输出通道的字符串描述符索引 |
14 | bmControls | 2 | 位图 | D1..0:启用控制 D3..2:模式选择控制 D5..4:集群控制 D7..6:下溢控制 D9..8:溢出控制 D15..10:保留。 必须设置为 0 |
16 | iProcessing | 1 | 数字 | 该处理单元的字符串描述符索引 |
17 | bNrModes | 1 | 数字 | 该处理单元支持的模式个数:m |
18 | waModes(1) | 4 | 位图 | 模式 1 的逻辑通道 |
… | … | … | … | … |
18+(m-1)*4 | waModes(m) | 2 | 位图 | 模式m 的逻辑通道 |
UAC处理单元描述符的类型:
wProcessType | Value |
---|---|
PROCESS_UNDEFINED | 0x00 |
UP/DOWNMIX_PROCESS | 0x01 |
DOLBY_PROLOGIC_PROCESS | 0x02 |
3D_STEREO_EXTENDER_PROCESS | 0x03 |
REVERBERATION_PROCESS | 0x04 |
UAC接口类型表
Descriptor Type | Value |
---|---|
CS_UNDEFINED | 0x20 |
CS_DEVICE | 0x21 |
CS_CONFIGURATION | 0x22 |
CS_STRING | 0x23 |
CS_INTERFACE | 0x24 |
CS_ENDPOINT | 0x25 |
Descriptor Subtype | Value |
---|---|
AC_DESCRIPTOR_UNDEFINED | 0x00 |
HEADER | 0x01 |
INPUT_TERMINAL | 0x02 |
OUTPUT_TERMINAL | 0x03 |
MIXER_UNIT | 0x04 |
SELECTOR_UNIT | 0x05 |
FEATURE_UNIT | 0x06 |
PROCESSING_UNIT | 0x07 |
EXTENSION_UNIT | 0x08 |