Android Automotive OS | 车载相机HAL

Posted Justin-Yip

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Automotive OS | 车载相机HAL相关的知识,希望对你有一定的参考价值。


–This article is excerpted from Google’s official about Automotive , please indicate the source for reprinting–

Exterior View System (EVS)

EVS Framework

IEvsCamera
struct CameraDesc {
   string      camera_id;
   int32       vendor_flags;       // Opaque value
}
getCameraInfo() generates (CameraDesc info); 
  • setMaxFrames
 setMaxFramesInFlight(int32 bufferCount) generates (Evs Result result);
EVS 应用

可作为参考实现的 C++ EVS 示例应用 (/packages/services/Car/evs/app)。该应用负责从 EVS 管理器请求视频帧,并将用于显示的已完成的帧发送回 EVS 管理器。EVS 和汽车服务可供使用后,它便立即由 init 启动(设置目标为在开机两 (2) 秒内启动)。原始设备制造商 (OEM) 可视需要修改或替换 EVS 应用。

EVS 管理器

EVS 管理器 (/packages/services/Car/evs/manager) 可提供 EVS 应用所需的构建块,以实现从简单的后视摄像头显示到 6DOF 多摄像头渲染的任何功能。它的接口通过 HIDL 呈现,并且能够接受多个并发客户端。其他应用和服务(特别是汽车服务)可以查询 EVS 管理器状态,以了解 EVS 系统何时处于活动状态。

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)下。

内核驱动程序

支持 EVS 堆栈的设备需要使用内核驱动程序。原始设备制造商 (OEM) 无需创建新驱动程序,他们可以选择通过现有相机和/或显示硬件驱动程序来支持 EVS 所需的功能。重复使用驱动程序可能会有好处,对于图像呈现可能需要与其他活动线程协调的显示驱动程序来说尤其如此。Android 8.0 包含一个基于 v4l2 的示例驱动程序(在 packages/services/Car/evs/sampleDriver 中),该驱动程序依靠内核实现 v4l2 支持,并依靠 SurfaceFlinger 呈现输出图像。
未完待续

以上是关于Android Automotive OS | 车载相机HAL的主要内容,如果未能解决你的问题,请参考以下文章

Android Automotive OS知识体系

Android Automotive OS知识体系

Android 车机初体验:Auto,Automotive 傻傻分不清楚?

Android Automotive OS知识体系

Android Automotive OS | Instrument Cluster

Android Automotive OS | 车载相机HAL