半亩花草 发表于 2024-8-29 04:22:39

一文讲解Android车载体系camera架构 - EVS

Android的camera开发中,使用最多的是camera2 以及如今Google主推的cameraX 架构,而这两个架构重要针对的是手机移动端上camera的流程。
而本日先容的EVS(Exterior View System)架构是差别于camera2上的手机架构,针对Automotive的版本,也就是Android为车载开发的camera架构。

https://img-blog.csdnimg.cn/img_convert/fe3412c00f1bbb0099ae482582424f0b.jpeg
参考:https://source.android.google.cn/docs/devices/automotive/camera-hal?hl=zh-cn

更多技术文章,全网首发公众号 “极客钛” 锁定 -上午11点 - ,感谢各人关注、转发、点赞!

1.EVS概述 
EVS(Exterior View System),可以见名知义,EVS的使用场景是针对汽车外景体系,详细体现就是倒车影像,360全景这类影像体系。

https://img-blog.csdnimg.cn/img_convert/89eeb8277751a3b99e5ba93cd078bb55.png
借鉴官方文档上的架构图,EVS重要分为四个部分:EVS APP、EVS Manager与EVS HAL,Vehicle HAL

https://img-blog.csdnimg.cn/img_convert/55d36b394ee188ef44e11b47b526a668.png
1.1 EVS APP 
在EVS APP中,最重要的使命就是通过EVS Manager拿到底层HAL通报的Camera数据,不过原生的EVS APP实现其实是相称不完善的,在Android12中仅支持简单的图像预览。
APP的基本流程如图。

https://img-blog.csdnimg.cn/img_convert/9f02ace4dc9d52e89552cb8e79860800.png
罗列底层配置video装备节点,对video装备所支持的格式进行判定,最后符合条件的,会将device放入到sCameraList中。
在需要使用Vehicle HAL的前提下,连接Vehicle HAL,订阅车辆挡位信息与转向灯信息,当数据变革时通过listener回调处理。
开启EvsStateControl状态更新线程,在该线程内根据外部输入调整EVS APP的运行状态以及实现详细的图像绘制。
源码位置 /packages/services/Car/cpp/evs/apps/default
参考:
https://s.deepinout.com/android-14.0.0_r2/xref/packages/services/Car/cpp/evs/apps/default/
1.2 EVS Manager
EVS Manager作为中间嵌套的一层,为APP提供接入EVS HAL的接口。
EVS Manager实现与底层 HAL 驱动步伐相同的 API,并通过支持多个并发客户端来提供扩展服务(多个客户端可以通过 EVS 管理器打开相机并接收视频流)。

https://img-blog.csdnimg.cn/img_convert/b52692f33f2587eb8c888c55b6d51e06.png
同时实现对两个重要抽象对象(EVS Camera与EVS Display)的集中管理,别的还提供了额外的诸如权限管理,诊断功能等。
EVS Manager本质上是对HAL接口的一层封装,只不过在此基础上增加了一些其他东西。比如数据统计、诊断相干以及对虚拟Camera装备的支持等。
源码位于packages/services/Car/cpp/evs/manager
参考:
https://s.deepinout.com/android-14.0.0_r2/xref/packages/services/Car/cpp/evs/manager/
1.3 EVS HAL
EVS HAL作为硬件抽象层的详细实现,将与内核驱动进行交互,获取详细摄像头数据。在这一层将会实现两个重要的抽象对象:EVS Camera与EVS Display。
EVS HAL作为隔离用户态步伐(EVS APP)与底层驱动(Camera Driver)的HAL实现,是OEM产商最为关注的部分。这部分也是原生EVS架构中最为复杂的部分。
EVS HAL存在两个版本,即1.0版本与1.1版本。关于两个版本的详细差异,我们可以大抵看一下HIDL接口上的差异。
从文件上来讲,在1.1中多了IEvsUltrasonicsArray.hal与IEvsUltrasonicsArrayStream.hal两个文件。

https://img-blog.csdnimg.cn/img_convert/8fef3ccc7c8941a511dd4119cf710878.png
这两个文件中界说的接口其实是为摄像头上大概存在的超声波Sensor提供相应的API,这部分新增的内容大概是为了未来的主动驾驶做考虑。
其源码路径位于/hardware/interfaces/automotive/evs目录。
参考:
https://s.deepinout.com/android-14.0.0_r2/xref/hardware/interfaces/automotive/evs/
1.4 Vehicle HAL
Vehicle HAL是整体Android Automotive版本中对外(与汽车其他控制器)沟通的桥梁。
一般而言Vehicle向下会接入CAN/Uart/Ethernet实现对外通信,向上接入CarService,服务于Java Framework,固然Native Framework也是可以接入的。
Vehicle HAL的接口界说与默认实现位于hardware/interfaces/automotive/vehicle/2.0目录。
参考:
https://s.deepinout.com/android-14.0.0_r2/xref/hardware/interfaces/automotive/vehicle/2.0/

2.EVS与camera2 的区别
控制难易程度 
EVS架构一般针对车外摄像头。车外摄像头的位置都是固定的,且都属于鱼眼视角,其他参数上也较为固定。
因此也注定了在EVS架构中,体系对摄像头的控制是比较少的。
而camera2 本身是用于手机camera相干的控制上,或者可以用于车内中IMS(座舱检测体系)、DMS(驾驶员监测体系)等体系,camera需要更加机动的调节方法与参数设定。

https://img-blog.csdnimg.cn/img_convert/c13c701eff7e2b0372d1e26701bd6487.png
因此,Camera2提供了丰富的API可以实现对摄像头的多项控制,如闪光,3A控制等。
启动时机 
EVS 在使用场景下一般都需要快速的启动,不能依赖太多的Android上层的service,开机启动一般不能超过2s。

https://img-blog.csdnimg.cn/img_convert/8251a3eb19dab0842c50eb5755567b5d.png
如果基于手机端的Android启动方式,过于依赖Android native service,而这部分通常会耗时更多,导致整个启动后显示、使用都过于迟缓。
EVS具有更快的响应,更快的启动,以及更低的延时,这才是车载体系中最需要的部分。
例如,在汽车启动的时间,用户就需要开启倒车,整个体系的启动不能依赖Android JVM启动之后再启动APP,使用Native来实现的EVS由此应运而生。
开发难度 
Camera2在Java Framework层提供了丰富的API支持(CameraManager),使得开发者可以快速开发自己的应用。

https://img-blog.csdnimg.cn/img_convert/8367e96a193219e5f417a4f3b3c7f689.png
而EVS则需要开发者自己去构建诸如Input管理,View子体系等,也需要使用OpenGL ES的API去进行图像绘制,开发难度相对较大。
并且市面上关于camera2的架构以及开发的示例更多,关于EVS架构的分析是比较少的,本文也是对EVS进行一个基本的先容分析。

综上,关于EVS 相干的软件架构到此竣事,后续将会针对camera使用的细节进行分析。
感兴趣的同砚也可以一起研究学习,并且帮助指正文章中描述有误的地方,共同砚习进步。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 一文讲解Android车载体系camera架构 - EVS