UAC功能使用说明
1. 概述¶
UAC 即USB Audio Class,是USB音频协议的一种,协议分为UAC1 与UAC2版本,本文介绍的是UAC1的使用。
2. Uac新架构¶
新版本的uac实现,将uac设备模拟成alsa设备,允许在应用层进行访问MIC的Raw数据以便音频算法进行处理。
公版默认已经开启uac功能uac*_function_*enable=2,需要加载的ko如下:
图2-1
2.1. 内核配置¶
-
Power Manager支持
-> Power management options
-> Device power management core functionality
注意:为snd框架依赖,需替换内核
-
音频框架的支持
-> Device Drivers
-> Sound card support
-> Advanced Linux Sound Architecture
[*] PCM timer interface
生成驱动: soundcore.ko snd.ko snd-timer.ko snd-pcm.ko
-
Gadget Uac的支持
-> Device Drivers
-> USB support
-> USB Gadget Support
-> USB Gadget Drivers
-> USB Webcam Gadget
[*] Include configuration with UAC (Audio)
生成驱动:u_audio.ko usb_f_uac1.ko
2.1.1. 驱动装载顺序¶
soundcore.ko
snd.ko
snd-timer.ko
snd-pcm.ko
u_audio.ko
usb_f_uac1.ko (依赖于libcomposite.ko)
g_webcam.ko
2.1.2. 驱动参数解析¶
-
soundcore.ko 和**snd**.ko 驱动默认build in kernel,故不需加载;
-
g_webcam.ko 参数:
-
playback: device->host
-
capture: host->device
-
uac*_function_*enable:
0: 关闭uac功能, 1: 开启喇叭功能, 2:开启麦克风功能, 3:开启喇叭与麦克风
-
p_srate:
playback的采样率
-
c_srate:
capture的采样率
-
c_chmask:
capture的通道数
-
p_chmask:
playback的通道数
该架构需要在user 层串接uac应用,将mi audio与uac 串接起来
Pudding参考demo:
sdk/verify/mi\_demo/alderaan/uac
若开启uvc和uac系统启动后会生成相关的结点:
Uac: /dev/ snd/*
Uvc:/dev/ video*
2.2. Uac旧架构¶
旧版本的uac实现,通过向alsa设备获取或者发送音频数据,直接在内核层串通整个flow
以下需要在配置完webcam的基础上增加配置。
-
参考相应的“编译补充说明文档”,重新编译kernel,然后将如下3个ko拷贝到板子上(例如拷贝到 /config/modules/4.9.84/):
snd-timer.ko
snd-pcm.ko
usb_f_uac1.ko
-
查看/customer/demo.sh文件,确认板子是否有insmod mi_alsa.ko,(如果没有的话,可以在sdk中编译得到)
-
在insmod mi_alsa.ko前先insmod snd-timer.ko和snd-pcm.ko,
修改/customer/demo.sh文件.
insmod /config/modules/4.9.84/snd-timer.ko insmod /config/modules/4.9.84/snd-pcm.ko insmod /config/modules/4.9.84/mi_alsa.ko //如果没有insmod mi_alsa.ko,则需新增
-
在insmod g_webcam.ko前insmod usb_f_uac1.ko,且开启uac功能,并加上相关的参数。在/customer/demo.sh中做如下修改:
insmod /config/modules/4.9.84/usb_f_uac1.ko insmod /config/modules/4.9.84/g_webcam.ko streaming_maxpacket=3072 streaming_maxburst=13 uac_function_enable=2 audio_capture_buf_size=48000 audio_capture_period_size=4096 in_req_buf_size=1024
-
修改完成后重启板子,在PC端的应用Potplayer打开USB CAM设备时加上如下两项设置即可打开UAC,正常的话打开设备后,PC端就可以听到板子端的麦克风声音了。
图2-2
-
驱动参数解析:
g_webcam.ko
-
uac_function_enable
0:关闭uac功能,1:开启喇叭功能,2:开启麦克风功能,3:开启喇叭与麦克风
注意:在加载g_webcam.ko驱动前需确保平台有alsa设备存在,目前由mi_alsa.ko创建。
-
playback_channel_count/capture_channel_count
通道的数量
-
playback_sample_rate/capture_sample_rate
采样率大小
-
out_req_buf_size/in_req_buf_size
isoc endpoint最大包大小
-
out_req_count/in_req_count
isoc 请求数量
-
audio_playback_buf_size/audio_capture_buf_size
数据缓存buf大小
-