增强型视觉系统 EVS
- 1、增强型视觉系统概览
- 2、车载相机 HAL
- 2.1 EVS 应用
- 2.2 EVS 管理器
- 2.3 EVS HIDL 接口
- 2.4 内核驱动程序
《增强型视觉系统 (EVS) 1.1 集成指南》
车载相机 HAL
1、增强型视觉系统概览
为了增强视频串流管理和错误处理,Android 11 更新了车载相机 HAL。有关详情,请参阅以下文章。
文章标题 | 说明 |
---|---|
事件和帧通知机制 | 一种回调机制,可让 EVS 管理器和硬件 (HW) 模块对应用中的任何流式传输事件发出通知。 |
用程序编写摄像头控制参数 | getter 和 setter 方法,用于在视频流处于活跃状态时更改摄像头参数。 |
调整摄像头和系统配置 | 新的配置管理器,使应用可以从 HAL 检索相机和成像特征。 |
帧元数据 | 帧元数据是 BufferDesc 数据结构的成员。 |
车载显示屏代理服务 | 一项新服务,用于启用 HAL 实现以使用 SurfaceFlinger。 |
多摄像头支持 | 逻辑摄像头设备,包含多个实体摄像头设备。 |
2、车载相机 HAL
2.1 EVS 应用
可作为参考实现的 C++ EVS 示例应用 (
/packages/services/Car/evs/app
)。该应用负责从 EVS 管理器请求视频帧,并将用于显示的已完成的帧发送回 EVS 管理器。EVS 和汽车服务可供使用后,它便立即由 init 启动(设置目标为在开机两 (2) 秒内启动)。原始设备制造商 (OEM) 可视需要修改或替换 EVS 应用。
2.2 EVS 管理器
EVS 管理器 (
/packages/services/Car/evs/manager
) 可提供 EVS 应用所需的构建块,以实现从简单的后视摄像头显示到 6DOF 多摄像头渲染的任何功能。它的接口通过 HIDL 呈现,并且能够接受多个并发客户端。其他应用和服务(特别是汽车服务)可以查询 EVS 管理器状态,以了解 EVS 系统何时处于活动状态。
2.3 EVS HIDL 接口
在 EVS 系统中,相机和显示元素均由
android.hardware.automotive.evs
软件包定义。用于执行接口的示例实现(生成合成测试图像并验证图像进行往返的过程)在/hardware/interfaces/automotive/evs/1.0/default
中提供。
原始设备制造商 (OEM) 负责实现由/hardware/interfaces/automotive/evs
中的.hal 文件
表示的 API。这种实现负责从物理相机配置和收集数据,并通过 Gralloc 可识别的共享内存缓冲区传送这些数据。实现的显示端负责提供可由应用填充(通常通过 EGL 渲染的方式)的共享内存缓冲区,并优先呈现已完成的帧(在任何可能会显示在物理显示设备上的其他内容之前)。EVS 接口的供应商实现可以存储在/vendor/…
/device/…
或hardware/…
(例如/hardware/[vendor]/[platform]/evs
)下。
2.4 内核驱动程序
支持 EVS 堆栈的设备需要使用内核驱动程序。原始设备制造商 (OEM) 无需创建新驱动程序,他们可以选择通过现有相机和/或显示硬件驱动程序来支持 EVS 所需的功能。重复使用驱动程序可能会有好处,对于图像呈现可能需要与其他活动线程协调的显示驱动程序来说尤其如此。Android 8.0 包含一个基于
v4l2
的示例驱动程序(在packages/services/Car/evs/sampleDriver
中),该驱动程序依靠内核实现v4l2
支持,并依靠SurfaceFlinger
呈现输出图像。
注意:对于实际的供应商实现来说,依靠 SurfaceFlinger 是不合适的,因为 EVS 必须能够在开机后的几秒钟内运行,这个时间要远早于 SurfaceFlinger 本身启动的时间。不过,示例驱动程序实现一般与硬件无关,而且支持 EVS 应用开发和测试与 EVS 驱动程序开发同时进行。