UAC 混音单元描述符
UAC混音单元描述符的英文全称为: Mixer Unit Descriptor,简称MUD.
和其它的单元描述符一样,混音单元描述符也有一个字段bUnitID,用来标识其惟一的拓扑单元ID.
和UVC规范一样,在其音频控制接口内的所有终端(Terminal)单元(unit)不得具有相同的ID标识,每个单元或终端的ID必须具有惟一性。
UAC混音单元功能
混音单元(MU)将多个逻辑输入信道转换成多个逻辑输出信道。
UAC混音单元描述符的结构-UAC1.0
typedef struct _MIX_UNIT_DESCRIPTOR;
{
UINT8 bLength;
UINT8 bDescriptorType;
UINT8 bDescriptorSubtype;
UINT8 bUnitID;
UINT8 bNrInPins;
UINT8 baSourceID[bNrInPins];
UINT8 bNrChannels;
UINT16 wChannelConfig;
UINT8 iChannelNames;
UINT8 bmControls[N];
UINT8 iMixer;
}MIX_UNIT_DESCRIPTOR;
- 0:bLength:UAC混音单元描述符的总长度。
- 1:bDescriptorType:接口类型CS_INTERFACE
- 2:bDescriptorSubtype:接口子类型MIXER_UNIT
- 3:bUnitID:单元ID
- 4:bNrInPins:拓扑中输入到该单元的管脚数量,该字段用于描述baSourceID数组的大小。
- 5:baSourceID:输入管脚连接到到该单元的的终端或单元ID
- 5+p:bNrChannels:混音器输出音频通道群集中的逻辑输出通道数。
- 6+p:wChannelConfig:述逻辑通道的空间位置
- 8+p:iChannelNames:字符串描述符的索引,描述第一个逻辑通道的名称
- 9+p:bmControls:指示哪些混音控制可编程的bitmap。
- 9+p+N:iMixer:用于描述该混音单元的字符串索引
由于混音单元可以重新定义其输出集群中包含的逻辑输出通道的空间位置,因此需要混频器输出集群描述符。bNrChannels、wChannelConfig和iChannelNames是通过单个输出引脚(“下游”连接)离开混频器单元的集群的特征。
混音单元描述符在bmControls位图字段中报告哪些控件可编程。此位图为二维位数组,每个逻辑输入有一行通道和每个逻辑输出通道的列。如果在位置[u,v]处设置了位,这意味着混音器单元包含一个可编程混音控制器,该控制器将输入通道u连接到输出通道v。
如果位[u,v]清除,则表示输入通道u和输出通道v之间的连接已断开不可编程。可以通过适当的请求检索其固定值。u的有效范围从1到n。v的有效范围是从1到m。
bmControls字段逐行存储位数组,其中第一个字节的MSb对应于输入通道1和输出通道1之间的连接。如果(n x m)不是8的整数倍,则位数组将用零填充,直到占用整数个字节。用于存储位数组的字节数N可以如下计算。
IF ((n x m) MOD 8) <> 0 THEN
N = ((n x m) DIV 8) + 1
ELSE
N = ((n x m) DIV 8)
UAC混音单元描述符的结构-UAC2.0
typedef struct _MIX_UNIT_DESCRIPTOR;
{
UINT8 bLength;
UINT8 bDescriptorType;
UINT8 bDescriptorSubtype;
UINT8 bUnitID;
UINT8 bNrInPins;
UINT8 baSourceID[bNrInPins];
UINT8 bNrChannels;
UINT32 bmChannelConfig;//变化
UINT8 iChannelNames;
UINT8 bmMixerControls[N];//新增
UINT8 bmControls;//新增
UINT8 iMixer;
}MIX_UNIT_DESCRIPTOR;
- bmChannelConfig:描述逻辑通道的空间位置
- bmMixerControls:指示哪些混音器控件可编程的位图
- bmControls:
- D1..0: Cluster Control
- D3..2: Underflow Control
- D5..4: Overflow Control
- D7..6: Reserved. Must be set to 0
bmControls字段包含一组位对,指示存在哪些控件及其功能。如果控件存在,则它必须是主机可读的。如果某个控件不存在,则位对必须设置为0b00。如果控件存在但为只读,则位对必须设置为0b01。如果控件也是主机可编程的,则位对必须设置为0b11。不允许使用值0b10
UAC混音单元的内部结构如下图:
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 |