UAC 音频与 UVC 视频 Function
1. UAC 架构
1 | Host (USB Audio Class driver) |
音频数据不接真实 codec:Host 放音变成本机 PCM capture,本机 playback 变成 Host 的录音源。真正连接硬件 codec 的是f_uac1_legacy(需板级 codec,较少用)。
关键入口
| 函数 | 位置 | 职责 |
|---|---|---|
g_audio_setup() |
u_audio.c:1426 |
创建 ALSA card/PCM,连接 uac 参数 |
u_audio_start_capture() |
u_audio.c:594 |
Host->设备 方向 isoc OUT 流启动 |
u_audio_start_playback() |
u_audio.c:722 |
设备->Host 方向 isoc IN 流启动 |
afunc_bind() |
f_uac2.c:1033 |
UAC2 描述符/端点分配 |
afunc_set_alt() |
f_uac2.c:1418 |
alt 0/1 开关流 |
afunc_setup() |
f_uac2.c:1822 |
Clock Source/Volume/Mute 等 class request |
afunc_disable() |
f_uac2.c:1493 |
断开停流 |
UAC1 vs UAC2
| UAC1 | UAC2 | |
|---|---|---|
| 速度 | FS 语义(HS 可跑但描述符老) | HS/SS,推荐 |
| 时钟模型 | 无显式 clock entity | Clock Source/Selector,支持多采样率切换 |
| 反馈 | adaptive/sync | 支持显式 feedback EP(异步模式) |
| Windows | 原生 | Win10+ 原生 |
ConfigFS 属性配置采样率(c_srate/p_srate)、位宽(c_ssize/p_ssize)、通道掩码(c_chmask/p_chmask)、音量/静音控制暴露等。修改必须在绑定 UDC 前完成。
音频要点
- isoc 无重传,欠载/过载直接表现为爆音;每包字节数由采样率/包间隔推出,非整数采样率下有 ±1 帧抖动处理;
- 异步模式需 feedback 端点向 Host 报速率,否则长时间播放产生漂移;
- ALSA period/buffer 设置过小会在系统调度抖动时 underrun。
2. UVC 架构
1 | Host (UVC driver, 如Windows相机) |
UVC function 把控制与数据都交给用户态:控制请求经 V4L2 event(UVC_EVENT_SETUP/DATA/STREAMON/STREAMOFF)投递给应用,视频帧由应用向/dev/videoX(V4L2 OUTPUT 设备)QBUF。
关键入口
| 函数 | 位置 | 职责 |
|---|---|---|
uvc_alloc() |
f_uvc.c:1281 |
实例化 function |
uvc_function_bind() |
f_uvc.c:800 |
控制/流接口、端点、V4L2 设备注册 |
uvc_function_setup() |
f_uvc.c:295 |
class 请求转为 V4L2 event(DELAYED_STATUS) |
uvc_function_setup_continue() |
f_uvc.c:342 |
用户应答后恢复 EP0 状态阶段 |
uvc_function_set_alt() |
f_uvc.c:380 |
alt 0/1 停/起流 |
uvc_v4l2_open() |
uvc_v4l2.c:617 |
用户态打开 V4L2 节点 |
uvcg_video_enable() |
uvc_video.c:784 |
组织 request 队列开始推流 |
ConfigFS 描述符树
UVC 的格式/分辨率/帧率在 configfs 中搭建(uvc_configfs.c):
1 | functions/uvc.0/ |
漏建任一层链接都会 bind 失败。带宽由 maxpacket×burst×interval 决定,1080p MJPEG 以上通常需要 HS isoc 3×1024 或 SS。
UVC 要点
- 应用必须及时处理 STREAMON/OFF 与 setup event,否则 Host 侧超时;
- isoc 模式丢包即丢帧数据,Host 端表现花屏;bulk 模式无带宽保证但不丢;
- SS 下 companion 描述符的 burst 配置直接决定可用带宽。
3. RK3588 配置现状
rockchip_linux_defconfig启用USB_CONFIGFS_F_UVC(相机产品线),rockchip_cpcem_linux_defconfig启用 UAC1/UAC2/HID(音频类产品),electric 仅基础 ACM/MSC/FFS。本树另有自定义f_audio_raw绕开 UAC 标准协议做原始音频传输(见厂商自定义 Function 章)。
正在加载留言…