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

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.mzph.cn/bicheng/4545.shtml

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

相关文章

软文伪原创工具有哪些,推荐3款强大的软文伪原创工具

软文作为一种重要的营销和传播手段,受到了越来越多的关注。而随着科技的不断发展,各种软文生产的工具相续出现,如:软文伪原创工具,它能为人们提供便捷、高效的文章生产方式,也及可以节省文章写作的时间与精…

车载系统的 加减串器应用示意

overview 车载系统上使用加减串器来实现camera, led液晶显示屏等 图像数据的远距离传输,将原先在短距离传输视频信号的mipi csi,dsi 等的TX,RX中间,插入加减串器,实现长距离的可靠传输。 示意图如下 往往…

Vue从入门到精通-01-Vue的介绍和vue-cli

MVVM模式 Model:负责数据存储 View:负责页面展示 View Model:负责业务逻辑处理(比如Ajax请求等),对数据进行加工后交给视图展示 关于框架 为什么要学习流行框架 1、企业为了提高开发效率:…

图像处理:乘法滤波器(Multiplying Filter)和逆FFT位移

一、乘法滤波器(Multiplying Filter) 乘法滤波器是一种以像素值为权重的滤波器,它通过将滤波器的权重与图像的像素值相乘,来获得滤波后的像素值。具体地,假设乘法滤波器的权重为h(i,j),图像的像素值为f(m,…

Cranck-Nicolson隐式方法解线性双曲型方程

Cranck-Nicolson隐式方法解线性双曲型方程 Cranck-Nicolson方法在抛物型方程里面比较常用,双曲型方程例子不多,该方法是二阶精度,无条件稳定,然而,数值震荡比较明显,特别是时间演化比较大以及courant数比较…

网工内推 | 云计算运维,厂商云相关认证优先,股票期权,全勤奖

01 国科科技 招聘岗位:云计算运维 职责描述: 1、负责私有云平台的运维管理工作,包括云平台日常运维、故障处理、扩容、版本升级、优化和维护等。 2、根据业务需求,从技术角度支持及配合各业务系统上云工作。 3、为云上业务系统提供云产品、云服务方面的…

python ERA5 画水汽通量散度图地图:风速风向矢量图、叠加等高线、色彩分级、添加shp文件、添加位置点及备注

动机 有个同事吧,写论文,让我帮忙出个图,就写了个代码,然后我的博客好久没更新了,就顺便贴上来了! 很多人感兴趣风速的箭头怎样画,可能这种图使用 NCL 非常容易,很多没用过代码的小…

【idea】idea 中 git 分支多个提交合并一个提交到新的分支

一、方法原理讲解 我们在 dev 分支对不同的代码文件做了多次提交。现在我们想要把这些提交都合并到 test 分支。首先我们要明白四个 git 操作, commit:命令用于将你的代码变更保存到本地代码仓库中,它创建了一个新的提交(commit…

idea的插件,反编译整个jar包

idea的插件,反编译整个jar包 1.安装插件1.1找到插件1.2 搜索插件 2.反编译整个jar包2.1 复制jar包到工件目录下:2.2 选中jar包,点出右键 3.不用插件,手动查看某一个java类3.1 选中jar包,点出右键 1.安装插件 1.1找到插…

Linux网络编程---Socket编程

一、网络套接字 一个文件描述符指向一个套接字(该套接字内部由内核借助两个缓冲区实现。) 在通信过程中,套接字一定是成对出现的 套接字通讯原理示意图: 二、预备知识 1. 网络字节序 内存中的多字节数据相对于内存地址有大端和小端之分 小端法&…

同事上班这样摸鱼,我坐边上咋看他都在专心写代码啊

我边上有个同事,我坐他边上,但是每天看着他都眉头紧锁,忙的不亦乐乎,但终于有一天,我发现了他上班摸鱼的秘诀。 我劝你千万不要学会这4招,要不就该不好好上班了。 目录 1 上班看电影? 2 上班…

自建SQL server 服务无法启动,提示评估期已过

问题背景 在服务器内安装的SQL server无法启动,报错提示如下截图,提示错误代码17051: 结合系统日志查看应用程序日志详情提示评估期已过,报错如下 问题原因 出现此报错原因是SQL server 安装时,使用的评估版本&#xf…

网络安全的防护措施有哪些?

1. 安全策略和合规性 2. 物理和网络安全 3. 数据加密 4. 软件和系统更新 5. 访问控制 6. 威胁监测和响应 7. 员工培训和安全意识 8. 备份和灾难恢复 零基础入门学习路线 视频配套资料&国内外网安书籍、文档 网络安全面试题 网络安全的防护措施多种多样&#xff0c…

基于Spring Boot的商务安全邮件收发系统设计与实现

基于Spring Boot的商务安全邮件收发系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 已发送效果图,用户可以对已发送信息…

【GitHub】2FA认证(双重身份验证)

GitHub 2FA认证(双重身份验证) 写在最前面一、使用 TOTP 应用程序配置双2FA(双因素身份验证)1. 介绍2. github3. 认证 官网介绍小结 & 补充 :权限不足or验证码错误问题 🌈你好呀!我是 是Yu欸…

张大哥笔记:普通人可以靠知识付费赚到钱吗?

大家好,我是张大哥,今天给大家聊聊普通人怎么做知识付费赚钱这个话题,首先科普一下,什么是知识付费?把知识变成产品或服务,以实现商业价值的行为就是知识付费! 做知识付费类的项目,首…

MySQL数据库基础(数据库的基本操作、常用的数据类型、表的相关操作)

前言 今天我们将介绍数据库的基本操作、常用的数据类型、表的相关操作 一、数据库的基本操作 1.1 显示当前的数据库 操作代码 show databases;1.2 创建数据库 基本语法: 1. //创建数据库 create database examble;2. create database if not exists exist exa…

CentOS命令大全:掌握关键命令及其精妙用法!

CentOS是一种流行的开源企业级Linux发行版,它基于Red Hat Enterprise Linux (RHEL)的源代码构建。对于系统管理员和运维工程师来说,掌握CentOS的常用命令至关重要。 这些命令不仅可以帮助管理服务器,还可以进行故障排查、性能监控和安全加固等…

代码随想录(番外)图论3|1020. 飞地的数量|130. 被围绕的区域

代码随想录&#xff08;番外&#xff09;图论3|1020. 飞地的数量|130. 被围绕的区域 1020. 飞地的数量 class Solution { public:int dir[4][2]{0,1,1,0,0,-1,-1,0};int count;void dfs(vector<vector<int>>& grid,int x,int y){grid[x][y]0;count;for(int i…

人形机器人核心架构梳理

定义&#xff1a;机器人是能进行运动、操纵或定位且具有一定程度自主能力的可编程执行机构。按外在形态分类可分为传统机器人和人形机器人&#xff0c;其中人形机器人是一种利用人工智能和机器人技术制造的具有类似人类外观和行为的机器人。 人形机器人发展历程&#xff1a; 人…