目录
1 概述
2 Android平台UVC和UAC功能
2.1 平台环境
2.2 功能支持
3 Demo调测
3.1 UVC YUV图片传输
3.2 UVC MJPEG图片传输
3.3 UVC实时采集视频流MJPEG传输
3.4 UAC实时录放
4 参考
1 概述
本文档描述了Android平台上如何使用UVC和UAC的功能,并提供Demo调测结果和说明。
2 Android平台UVC和UAC功能
2.1 平台环境
A311D2 T7-AN400平台是Android R系统环境,OpenLinux SDK版本以实际发布为准。
该平台的USB功能默认支持ADB,没有开放UVC和UAC相关功能,需要驱动合入相关功能的补丁支持,
另ADB与UVC有冲突,本篇仅提供配置控制开关使用,用户可以自行添加服务支持。
2.2 功能支持
有关UVC功能、UAC功能、UVC+UAC组合功能的支持,请联系工程师获取相关补丁合入。
提供UVC Server主程序(见参考),支持Demo出流演示。
简要说明UVC Server Demo的过程:
使用V4L2接口打开UVC Device,比如/dev/video0,初始化设备节点的信息,包括包大小、Bulk
Mode等相关参数与驱动保持一致。
初始化事件,先填充probe和commit,通过VIDIOC_SUBSCRIBE_EVENT注册到驱动,UVC事件包
括:SETUP,DATA,STREAMON, STREAMOFF。
循环DQEVENT处理事件:CONNECT->SETUP->DATA(probe+commit)->STREAMON-
>STREAMOFF->DISCONNECT。
STREAMON之后可以通过DQBUF/QBUF传输流数据,数据流可以自行构建Pipeline去Fill Buffer。
注意:init.amlogic.usb.rc脚本创建UVC的格式、分辨率和帧间隔与Demo保持一致。
当前Demo仅支持mjpeg 1280×720 30fps和yuv 640×360 15fps/10fps/2fps,可以自行调试。
3 Demo调测
按照Openlinux SDK版本合入相关patch,并根据Release文档编译出镜像文件烧录到AN400板子上,启动后默认支持ADB,需要按照以下顺序开启配置进行调测。
上电启动完成后,以Root权限运行,需要先开启配置 —> [如果外接USB Camera,此时插上] —> 启动服务。
USB线到Host端的插拔与启动服务的先后无关,可以先连线再启动服务,也可以启动服务后再连线。
3.1 UVC YUV图片传输
第一步:开启配置
setprop sys.usb.config uvc //如果是UVC+UAC2组合,setprop sys.usb.config uvc,uac2
setprop sys.usb.configfs 1
第二步:启动服务
/system/bin/uvcdemo -u /dev/video0 -i /data/test-640-360.yuv -f 0 -r 0
注意:需要将编译好的uvcdemo程序和yuv图片文件通过ADB先上传到相应路径下,也可以自行编译放到系统
中。
第三步:Host端(以Windows10为例,需要USB线连接)
可以使用VLC播放器->捕获设备->视频选择UVC Camera,音频选择无,VLC默认只出YUV格式预览。

3.2 UVC MJPEG图片传输
第一步:开启配置
setprop sys.usb.config uvc //如果是UVC+UAC2组合,setprop sys.usb.config uvc,uac2
setprop sys.usb.configfs 1
第二步:启动服务
/system/bin/uvcdemo -u /dev/video0 -i /data/test-1280-720.jpg -f 1 -r 1
注意:需要将编译好的uvcdemo程序和yuv图片文件通过ADB先上传到相应路径下,也可以自行编译放到系统
中。
第三步:Host端(以Windows10为例,需要USB线连接)
可以使用自带应用相机,自动打开视频预览,默认选择MJPEG格式。

3.3 UVC实时采集视频流MJPEG传输
第一步:开启配置
setprop sys.usb.config uvc //如果是UVC+UAC2组合,setprop sys.usb.config uvc,uac2
setprop sys.usb.configfs 1
第二步:插入外接USB Camera
确认将外接USB Camera插入板子,以实际除UVC生成的节点/dev/video0之外的设备为准,此处
为/dev/video1。
第三步:启动服务
#如果要测试yuv,修改-f 0 -r 0,后用VLC观测
/system/bin/uvcdemo -u /dev/video0 -v /dev/video1 -f 1 -r 1
注意:需要将编译好的uvcdemo程序和yuv图片文件通过ADB先上传到相应路径下,也可以自行编译放到系统
中。
第四步:Host端(以Windows10为例,需要USB线连接)
可以使用自带应用相机,自动打开视频预览,默认选择MJPEG格式。

3.4 UAC实时录放
第一步:开启配置
第二步:启动服务(若仅uac2配置,可跳过此步骤)
第三步:Host端(以Windows10为例,需要USB线连接)
连线USB后,枚举出声卡信息,同时板子上会新增一个声卡信息。
setprop sys.usb.config uac2 //如果是UVC+UAC2组合,setprop sys.usb.config
uvc,uac2
setprop sys.usb.configfs 1
/system/bin/uvcdemo -u /dev/video0 -i /data/test-640-360.yuv -f 0 -r 0
注意:需要将编译好的uvcdemo程序和yuv图片文件通过ADB先上传到相应路径下,也可以自行编译放到系统
中。
# cat /proc/asound/pcm
00-00: TDM-A-dummy-alsaPORT-pcm dummy-0 : : playback 1 : capture 1
00-01: TDM-B-dummy-alsaPORT-i2s multicodec-1 : : playback 1 : capture 1
00-02: TDM-C-dummy dummy-2 : : playback 1 : capture 1
00-03: PDM-dummy-alsaPORT-pdm dummy-3 : : capture 1
00-04: SPDIF-dummy-alsaPORT-spdif dummy-4 : : playback 1 : capture 1
00-05: SPDIF-B-dummy-alsaPORT-spdifb dummy-5 : : playback 1
00-06: EARC/ARC-dummy-alsaPORT-earc dummy-6 : : playback 1 : capture 1
00-07: LOOPBACK-A-dummy-alsaPORT-loopback dummy-7 : : capture 1
01-00: USB Audio : USB Audio : playback 1 : capture 1
# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: AMLAUGESOUND [AML-AUGESOUND], device 0: TDM-A-dummy-alsaPORT-pcm
dummy_codec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: AMLAUGESOUND [AML-AUGESOUND], device 1: TDM-B-a1-acodec-hifi-alsaPORTi2s
fe004800.a1_codec-1 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: UAC2Gadget [UAC2_Gadget], device 0: UAC2 PCM [UAC2 PCM]
Subdevices: 1/1
Subdevice #0: subdevice #0
Windows查看设备管理器,可以看到UAC驱动已加载更新。
录制:以Windows10为例,可用VLC播放器选择wav文件(以48khz,16bit,2ch为例)播放到音频
UAC2 SPEAKER,在板子上用tinycap来录制UAC输入音频,并存放到/data/test.wav。
tinycap /data/test.wav -D 1 -d 0 -c 2 -r 48000 -b 16 -p 960 -n 6
播放:以Windows10为例,可用VLC捕获设备,音频选择UAC2 MICROPHONE,视频选择无,在
板子上用tinyplay来播放刚刚录制的wav文件通过UAC输出音频。
tinyplay /data/test.wav -D 1 -d 0 -c 2 -r 48000 -b 16
