基于ZCU104 USB3.0的UVC Camera实现

作者:Kevin He,文章来源: Comtech FPGA微信公众号

背景:Zynq UltraScale+ MPSoC EV系列含有大量的视频输入接口,接入的视频流经过PL侧的逻辑处理后,通过USB3.0实现UVC输出各种高分辨率、高帧率、特殊格式的视频流,满足多种应用需求。

UVC简介

UVC全称为USB Video Class(USB视频类),是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,并已成为USB org标准之一。

在Windows和Linux等常用操作系统上都能免驱对接UVC摄像头,从而免去驱动开发的麻烦。通过通用的应用程序就能对UVC摄像头进行控制和流预览。

USB 摄像头VUC部分内部主要分为一个 VC (Video Control Interface) 接口和一个 VS (Video Streaming Interface) 接口。

VC 接口主要起控制作用,内部有许多 unit 和 terminal 用来“控制”摄像头,可以通过 Process unit 设置视频流图像属性,比如白平衡、曝光等等。

VS 接口往往含有许多个设置,每一个设置都包含一个实时传输端点,虽然它们的端点地址可能相同,但是最大传输包大小不同,在 Class specific VS 接口中,包含多个 Format ,每一个 Format 包含多个 Frame。

Format 指的 YUYV等,Frame 是各种分辨率如640 * 480、 1280*720等等。以上这些信息,都通过分析描述符来获得。

UVC框架图如下:

基于ZCU104上USB3.0的UVC Camera模拟摄像头输出实现

基于Xilinx的ZCU104平台,可以搭建一个满足以上UVC接口的USB摄像头设备端。ZCU104主控芯片为ZU7EV,该平台采用带视频编解码器的 Zynq® UltraScale+™ MPSoC EV 器件,支持嵌入式视觉使用案例的许多常见外设及接口,支持super speed的USB3.0接口和high speed的USB2.0接口。随附提供的 ZU7EV 器件配备四核 ARM® Cortex™-A53 应用处理器、双核 Cortex-R5 实时处理器、Mali™-400 MP2 图形处理单元、支持 4KP60 的 H.264/H.265 视频编解码器和 16nm FinFET+ 可编程逻辑。

由于ZCU104平台兼容USB3.0和USB2.0,可以支持不同视频帧率需求的应用,在需要高帧率的应用时采用USB3.0接口,最大支持5Gbps线速率,因此可以支持传输3Gbps的视频码率。低帧率应用或只支持USB2.0接口的主机,可以采用USB2.0接口,支持传输187Mbps的视频码率。

支持USB isoc传输模式,isoc是同步传输模式,可以保证高突发低延迟视频传输,但是不保证传输可靠性。

支持USB bulk传输模式,由于USB isoc传输模式不保证可靠传输,很容易引起流中断,且在不同的PC上预览支持的带宽不一样。这时候可以采用USB bulk模式传输,保证在不同的PC上都能正常预览视频流。

UVC功能实现包括驱动部分和应用2部分:

A. UVC驱动部分主要实现UVC协议相关控制接口供上层调用,打通USB通道,准备好流传输。ZCU104的USB接口默认是主控模式,需要修改内核配置和设备树使其工作在设备模式。

B. UVC应用部分实现控制消息响应和流传递,将前级视频流转发到UVC视频流通道,通过底层驱动将视频流传输给USB主控端,同时接收用户配置参数,将参数分发给各个驱动模块。

在前期调试验证USB3.0 UVC功能时,采用通过使用Linux自带的vivid驱动模拟前级摄像头视频数据,该驱动程序模拟各种类型的video4linux硬件:视频捕获、视频输出、vbi捕获和输出等。最多可以创建64个生动的实例,每个实例最多有16个输入和16个输出。这些输入和输出的行为与真正的硬件设备完全相同,这允许可以在不需要硬件视频源的情况下测试UVC摄像头模拟输出的各种功能。

使能vivid驱动只需要打开如下内核配置(默认vivid驱动支持的分辨率和帧率都比较低,如需模拟高帧率视频,需要修改vivid驱动才行)。

在PC上通过接收软件USB Camera查看ZCU104上USB3.0实现UVC摄像头模拟输出的视频, 默认vivid驱动会出一幅彩条图像,640*360@125fps(分辨率和帧率受限于vivid驱动)效果图如下:

实际产品中,用户换成自己的前端摄像头,可以实现更高分辨率和帧率的支持,比如720P@120fps,1080P@30fps等。

如果您有FPGA实现UVC的需求或者疑问,欢迎联系:
simonyang@comtech.com.cn
charlesxu@comtech.com.cn
kevinhe@comtech.com.cn

最新文章