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

news2024/12/25 9:15:02

Android的camera开发中,使用最多的是camera2 以及现在Google主推的cameraX 架构,而这两个架构主要针对的是手机移动端上camera的流程。

而今天介绍的EVS(Exterior View System)架构是不同于camera2上的手机架构,针对Automotive的版本,也就是Android为车载开发的camera架构

图片

参考:https://source.android.google.cn/docs/devices/automotive/camera-hal?hl=zh-cn

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

1.EVS概述 

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

图片

借鉴官方文档上的架构图,EVS主要分为四个部分:EVS APP、EVS Manager与EVS HAL,Vehicle HAL

图片

1.1 EVS APP 

在EVS APP中,最重要的任务就是通过EVS Manager拿到底层HAL传递的Camera数据,不过原生的EVS APP实现其实是相当不完善的,在Android12中仅支持简单的图像预览

APP的基本流程如图。

图片

枚举底层配置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 管理器打开相机并接收视频流)。

图片

同时实现对两个重要抽象对象(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两个文件。

图片

这两个文件中定义的接口其实是为摄像头上可能存在的超声波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需要更加灵活的调节方法与参数设定。

图片

因此,Camera2提供了丰富的API可以实现对摄像头的多项控制,如闪光,3A控制等。

启动时机 

EVS 在使用场景下一般都需要快速的启动,不能依赖太多的Android上层的service,开机启动一般不能超过2s

图片

如果基于手机端的Android启动方式,过于依赖Android native service,而这部分往往会耗时更多,导致整个启动后显示、使用都过于迟缓。

EVS具有更快的响应,更快的启动,以及更低的延时,这才是车载系统中最需要的部分。

例如,在汽车启动的时候,用户就需要开启倒车,整个系统的启动不能依赖Android JVM启动之后再启动APP,使用Native来实现的EVS由此应运而生。

开发难度 

Camera2在Java Framework层提供了丰富的API支持(CameraManager),使得开发者可以快速开发自己的应用。

图片

而EVS则需要开发者自己去构建诸如Input管理,View子系统等,也需要使用OpenGL ES的API去进行图像绘制,开发难度相对较大。

并且市面上关于camera2的架构以及开发的示例更多,关于EVS架构的分析是比较少的,本文也是对EVS进行一个基本的介绍分析。

综上,关于EVS 相关的软件架构到此结束,后续将会针对camera使用的细节进行分析。

感兴趣的同学也可以一起研究学习,并且帮忙指正文章中描述有误的地方,共同学习进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1631266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库介绍(Mysql安装)

前言 工程师再在存储数据用文件就可以了,为什么还要弄个数据库? 一、什么是数据库? 文件保存数据有以下几个缺点: 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质: 磁…

Blender游戏资产优化技巧

创建视频游戏资产既具有挑战性又富有回报。 经过一些研究并根据我的经验,这里有三个技巧可以帮助你使用 Blender 优化游戏资产。 在 Blender 中优化游戏资源的三种技术可以归结为拥有高效的 3D 模型拓扑、通过烘焙优化纹理,以及最后通过 Blender 节点的…

智慧校园建设有哪些新策略?

在现有智慧校园建设方案中,智慧校园主要是用于解决学校日常事务,如学工管理,教工管理等,并利用数据分析,指导学校的一些决策行为。但随着新技术的不断发展,尤其是云计算、大数据、物联网、移动互联网、人工…

python应用-socket网络编程(1)

目录 1 先简单回顾下客户端和服务端通信的知识 2 服务端常用函数 3 客户端常用函数 4 服务端和客户端都用的函数 5 示例介绍客户端和服务端通信过程 6 建立服务端套接制 7 创建服务端函数socket.create_server() 8 创建客户端套接字 9 客户端连接函数socket.create_co…

春秋云镜 CVE-2023-50564

靶标介绍: Pluck-CMS v4.7.18 中的 /inc/modules_install.php 组件,攻击者可以通过上传一个精心制作的 ZIP 文件来执行任意代码。 开启靶场: 1、点击 admin 进入登录界面 2、使用Burp爆破出登录密码为:admin123,使用…

【吊打面试官系列】Java高并发篇 - 为什么 wait, notify 和 notifyAll 这些方法不在 thread类里面?

大家好,我是锋哥。今天分享关于 【为什么 wait, notify 和 notifyAll 这些方法不在 thread类里面?】面试题,希望对大家有帮助; 为什么 wait, notify 和 notifyAll 这些方法不在 thread类里面? 一个很明显的原因是 JAVA…

个人学习总结__打开摄像头、播放网络视频的以及ffmpeg推流

前言 最近入手了一款非常便宜的usb摄像头(买回来感觉画质很低,没有描述的4k,不过也够用于学习了),想着利用它来开启流媒体相关技术的学习。第一步便是打开摄像头,从而才能够对它进行一系列后续操作,诸如实…

python-pytorch 如何使用python库Netron查看模型结构(以pytorch官网模型为例)0.9.2

Netron查看模型结构 参照模型安装Netron写netron代码运行查看结果需要关注的地方 2024年4月27日14:32:30----0.9.2 参照模型 以pytorch官网的tutorial为观察对象,链接是https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html 模型代…

IDEA代码重构

重构 重构的目的: 提高代码的可读性、可维护性、可扩展性和性能。 重命名元素 重命名类 当我们进行重命名操作的时候可以看到第六行存在一个R(rename),点击后就会弹出所偶有引用,这样可以避免我们在修改后存在遗漏引用处未修改。 我们可以通过…

Vue项目解决自定义el-dialog的border-radius无效的问题

一、问题产生的原因 自定义el-dialog的border-radius无效的原因其实就是因为层级的问题, f12打开样式检查就能发现组件自身已经全局定义了一个圆角变量 二、解决方法 和上面一样,在项目全局也就是在app.vue中定义全局变量 并且需要给!important&a…

【阿里云笔试题汇总】2024-04-20-阿里云春招笔试题-三语言题解(CPP/Python/Java)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新阿里云近期的春秋招笔试题汇总~ 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢&#x1f…

3. uniapp开发工具的一些事

前言 新的一天,又要开始卷起来了,开发程序开发当前离不开开发工具,一个好的开发工具办事起来那必然是事倍功半的...本文主要分享了关于uniapp里开发工具的一些事~ 概述 阅读时间:约5~7分钟; 本文重点&am…

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查…

linux下安装deepspeed

安装步骤 一开始安装deepspeed不可以使用pip直接进行安装。 这时我们需要利用git进行clone下载到本地: git clone https://github.com/microsoft/DeepSpeed.git 进入到deepspeed的安装目录下 cd /home/bingxing2/ailab/group/ai4agr/wzf/Tools/DeepSpeed 激活…

探索小猪APP分发平台:数字时代的新宠

随着数字化进程的加速,移动应用(APP)市场正迅速扩大。在这个充满竞争的市场中,一个优秀的APP分发平台能够帮助开发者和商家更有效地触及潜在用户,而小猪APP分发平台(www.ppzhu.net)正是其中的佼…

Windows 下安装RabbitMQ

一、消息中间件 ActiveMQ:基于JMS RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好 RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会 Kafka:分布式消息系统,高吞吐…

tableau如何传参数到MySQL数据库

1、打开tableau连接本地MySQL-》新建自定义sql-》创建参数 2、新建一个简单的工作表-》把维度拖拽到行显示结果-》右键显示参数 3、参数传递到数据库sql写法 select * from yonghu where yonghu.姓名 like concat(%,<参数.姓名>,%)select * FROMabadata4WHERE abadata4…

华为认证云计算方向,真的值得学吗……

在数字化转型的浪潮中&#xff0c;云计算技术正变得越来越关键。 华为&#xff0c;作为全球领先的信息与通信技术&#xff08;ICT&#xff09;解决方案提供商&#xff0c;其提供的云计算认证被广泛认为是行业内的重要资质之一。 那么&#xff0c;华为云计算认证的价值何在&am…

【PyTorch与深度学习】2、PyTorch张量的运算API(上)

课程地址 最近做实验发现自己还是基础框架上掌握得不好&#xff0c;于是开始重学一遍PyTorch框架&#xff0c;这个是课程笔记&#xff0c;这个课还是讲的简略&#xff0c;我半小时的课听了一个半小时。 1. 张量 1.1 张量操作 &#xff08;1&#xff09;chunk&#xff1a;将一…