Android相机-HAL子系统

这篇具有很好参考价值的文章主要介绍了Android相机-HAL子系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

应用框架要通过拍照预览摄像获得照片或者视频,就需要向相机子系统发出请求,

一个请求对应一组结果

一次可发起多个请求,并且提交请求是非阻塞的,始终按照接收的顺序以队列的形式先进先出地进行顺序处理

一个请求包含了拍摄和拍照配置的所有信息,以及处理这些的结果,

(一般包括:分辨率,像素格式,手动传感器、镜头,闪光灯控件,3A操作模式,RAW到YUV处理控制,统计信息的生成等等,这就是说可以对输出结果和处理有很多的控制。这就是Camera2对比Camera1的一个最主要的变化)

相机请求模型:

Android相机-HAL子系统,Android相机体系,数码相机,android

相机pipeline

相机子系统中,包括pipeline中组件的实现。如:3A算法和处理控件。

相机HAL提供接口,用户可以实现自己的版本的这些组件接口。比如高通或者MTK等各自根据标准HAL接口来实现自己的组件接口。这样的标准接口既保证了多个设备制造商和ISP之间的跨平台兼容性,又能保证各自实现的独特性。

相机pipeline是虚拟的,整个相机数据的处理流程跟管道是一样的。完全可以管道的概念来映射硬件。以这种pipeline的抽象的组件方式,来支持多种不同的算法和运算顺序,不会影响质量,效率和跨设备的兼容性。

相机pipeline也支持通知或者事件触发:app框架可以启动的一些如自动对焦的功能,它还将通知发送回应用程序框架,向应用程序通知自动对焦锁定或错误等事件。

Android相机-HAL子系统,Android相机体系,数码相机,android

上述的相机pipeline的图种,既包括了实际的硬件设备处理,又包括了软件处理:

CameraSensor,ISP,统计信息,3A算法,Bayer处理,Jpeg处理,YUV处理

ISP又包含有:热像素校准,去马赛克,降噪,阴影校准,几何校准,色差校准,边缘增强,色调曲线调整,

值得注意的,一些图像处理块,如在图中显示的,并没有明确定义的,相机pipeline做出如下的假设。:

1)RAW Bayer输出在ISP内部不经过任何处理

2)统计信息根据原始传感器数据生成

3)原始数据转换成YUV的各种处理块可以按照任意顺序排列

4)当显示多个刻度和裁剪单元时,所有缩放单元共享区域控件(数字缩放)。不过每个单元都可能具有不同的输出分辨率和像素格式。

HAL的操作摘要

来自FW的拍照或者录像的异步requests

HAL设备必须按照顺序处理requests 。每个requests 均生成输出结果的metadata以及一个或多个output image buffers

requests and results以及后续的流请求都遵守先进先出规则(队列的规则)。

指定请求的所有输出的时间戳必须完全相同,以便框架可以根据需要将它们匹配在一起。

所有拍照或者录像的配置和状态(不包括 3A 例程)都包含在请求和结果中。

相机HAL概述:

Android相机-HAL子系统,Android相机体系,数码相机,android

相机的启动与预期操作顺序

AndroidCamera API的使用流程

  1. 监听和枚举相机设备。
  2. 打开设备并连接监听器。
  3. 配置目标使用情形的输出(如静态拍照、录制等)。
  4. 为目标使用情形创建请求。
  5. 捕获/重复请求和连拍。
  6. 接收结果metadata  image data
  7. 切换 usecases(使用情形)时,返回到第 3 步

相机操作流程

Android相机-HAL子系统,Android相机体系,数码相机,android

HIDL接口定义位于:

hardware/interfaces/camera

1)枚举、打开相机设备并创建有效会话:

  •         a. 在初始化之后,框架开始监听任何一个现有的CameraProvider(ICameraProvider接口的实现)如果存在一个或者多个CameraProvider,FW就会尝试建立connection

        b. FW枚举相机设备是通过:ICameraProvider::getCameraIdList()

        c. FW实例化一个新的ICameraDevice 相应的调用:

                ICameraProvider::getCameraDeviceInterface_VX_X()

        d. FW通过调用ICameraDevice::open() 来创建一个新的激活的 capture session(ICameraDeviceSession)

2)使用有效相机会话:

        a. FW调用HAL设备的输入/输出流列表来调用: ICameraDeviceSession::configureStreams()

        b.  只要ICameraDeviceSession被ICameraDevice::open() 创建好之后,在任何时候,FW在一些usecase中,都可以调用默认设置的请求:ICameraDeviceSession::constructDefaultRequestSettings();

        c. 框架通过调用基于某一组默认设置的设置,以及框架之前注册的至少一个输出流来构造第一个capture request,并将其发送到HAL。此请求是通过ICameraDeviceSession::processCaptureRequest() 发送到HAL。HAL必须阻塞这次调用的返回,直到准备好发送下一个请求为止。

        d. 框架继续提交请求,并根据需要调用ICameraDeviceSession::constructDefaultRequestSettings()以获取其他用例的默认设置缓冲区。

        e. 当请求捕获开始(传感器开始曝光以进行捕获)时,HAL 用SHUTTER 消息 来调用ICameraDeviceCallback::notify() 包括:帧号和开始曝光的时间戳。此通知回调不必在给第一个请求调用processCaptureResult()之前发生。但直到针对相应的捕获调用 notify() 之后,才会向应用提供有关该捕获的结果。

        f. 经过一定的流水线延迟后,HAL 开始使用 ICameraDeviceCallback::processCaptureResult() 将完成的捕获返回到框架。这些捕获按照与提交请求相同的顺序返回。一次可发起多个请求,具体取决于相机 HAL 设备的管道深度。

3)在打开了相机之后会出现以下的某种情况:

        a. 完成拍照或者摄像后,重新设置,重新下发请求,则会重新进行配流重新获取数据。

重新配流就是调用:ICameraDeviceSession::configureStreams()

        b. 关闭相机

关闭相机会调用:ICameraDeviceSession::close()

        c. 相机出现错误或者异常。

返回 错误或事件 消息:ICamaeraDeviceCallback::notify()文章来源地址https://www.toymoban.com/news/detail-667987.html

到了这里,关于Android相机-HAL子系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 五分钟Win11安装安卓(Android)子系统

    十分钟,完成win11安装安卓子系统 Win+i 进入设置页面,选择 时间和语言 - 语言和区域 - 区域-美国 访问如下连接,install即可 安卓子系统 在开始菜单找到子系统,点开,做如下配置: 打开应用商店,安卓APK安装程序 下载应用宝手机版,APK文件,双击,有什么点什么,即可

    2024年02月02日
    浏览(60)
  • Android13音频子系统分析(三)---音效算法集成框架

    目录 一、Android音效C/S架构 二、EffectHAL音效框架的初始化与使用 2.1音效框架初始化 2.2创建并加载音效算法 2.3执行音效算法 三、AudioFlinger对音效框架的二次封装 四、Device音效的绑定过程 4.1 DeviceHAL处理音效数据的方式 4.2 AudioFlinger处理音效数据的方式 五、Stream音效的绑定过程

    2024年02月03日
    浏览(43)
  • 【Windows优化系列】Windows11安装Android子系统

    Q:为什么要在Windows安装Android系统?直接在手机使用不好吗? A:在电脑刷酷安不比拿着手机刷酷安爽吗?在电脑版的酷安码字不比手机上码字爽吗?不用打开手机也可以在电脑上点饿了么外卖不方便吗?手机上似乎不能使用tiktok,电脑上就可以使用tiktok。 并且,使用微软的

    2024年02月07日
    浏览(60)
  • windows11安装Android子系统,安装apk教程。

    系统:windows11TPM2.0 硬件:内存大于8GB 浏览器地址栏输入:“https://store.rg-adguard.net/” 搜索框输入:“https://www.microsoft.com/store/productId/9P3395VX91NR” 然后在右边下拉列表选择“Slow” ,然后点击最后面的“√”。注:不要翻译界面! 找到MicrosoftCorporationII.WindowsSubsystemForAndroid_1

    2024年02月06日
    浏览(56)
  • Android/Linux 子系统Graphics图形栈入门普法介绍

      由于工作原因,最近在公司做了一个关于Android/Linux 子系统Graphics图形栈入门相关知识的培训介绍,个人感觉对于想要了解入门这块的朋友还是有一定帮助的。由于博客不能直接放入ppt,这里我就将相关的ppt转换成可以博客展示的发表出来,希望能帮助到对这一块感兴趣的

    2024年01月17日
    浏览(42)
  • Windows11安装安卓/Android子系统运行安卓应用程序详细教程

    开启电脑的虚拟化支持,在控制面板-程序和功能-启用和关闭windows功能。选择 Hyper-V 和 虚拟机平台 ,然后重启电脑即可。 访问 https://store.rg-adguard.net/ 搜索 https://www.microsoft.com/store/productId/9P3395VX91NR 下载最大的一个文件,即安卓子系统文件 下载地址: http://tlu.dl.delivery.mp.mi

    2024年02月03日
    浏览(56)
  • 【Windows 11】系统安装修改版 Subsystem for Android 安卓子系统,并用 Magisk Root

    目录 步骤 1. 卸载已安装的Window Subsystem for Android 官方版本 2. 启用\\\"Hyper-V\\\" 和 \\\"虚拟机平台\\\"  3. 查看 CPU 处理器是架构 4. 下载修改版Windows Subsystem Android安卓子系统 5. 解压 WSA .zip 包解压缩,并看到有 “AppxManifest.xml” 的文件路径并复制 6. 安装 WSA 安卓子系统 7. 打 开WSA安卓子系

    2024年02月06日
    浏览(52)
  • 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程

    第一篇 深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动 第二篇 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程 上一篇文章深入探索了 Android Framework 的输入系统 IMS 的构成与启动,对 IMS 的重要成员有了初步的理解,然后通过源码对 IMS 的整个启动流程进行

    2024年01月20日
    浏览(45)
  • Win11提示无法启动适用于android的windows子系统的解决方法

    现在很多用户都在Win11系统上安装了WSA安卓子系统,不过在打开Windows Subsystem for Android的时候,弹出提示框:无法启动适用于Android的Windows子系统,确保在可选的Windows功能中启用虚拟机平台。确保设备在bios中启用了虚拟化。如果有遇到这个问题,可以尝试下面的解决方法。

    2024年02月05日
    浏览(58)
  • 适用于Android™的Windows子系统Windows Subsystem fo r Android™Win11安装指南

    需要在电脑上进行网课APP(无客户端只有App)的视频观看,而安卓模拟器种类繁多体积臃肿,质量良莠不齐(广告等),投屏软件每次要从手机端开启,于是想到了微软公司对Win11安卓应用的兼容虚拟机Windows Subsystem for Android™Win11,来进行网课App的安装。 安卓子系统里的安卓

    2024年02月06日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包