安卓自带camera hal3 实例README.md翻译

2024-07-21 1052阅读

最近,遇到一个这样的问题,临时了解下这个驱动实现架构和特点,翻译如下

安卓自带camera hal3 实例README.md翻译
(图片来源网络,侵删)

V4L2相机HALv3

camera.v4l2库使用视频Linux 2(V4L2)接口实现了camera HAL v3。这使得它在理论上可以与各种设备配合使用,尽管V4L2的局限会引入一些[警告](#V4L2缺陷),导致此HAL不完全符合规范。

当前状态

人们可以自由使用这个库,如果这个能满足他们的目的工作,但它不是由安卓相机团队维护的。还有一个V4L2 camera HAL实现,由安卓相机团队维护的,是从Android P开始。查看更多信息

这里.

使用HAL构建设备

为确保HAL是为设备构建的,请在您的.mk内包含下面这些:

USE_CAMERA_V4L2_HAL := true
PRODUCT_PACKAGES += camera.v4l2
PRODUCT_PROPERTY_OVERRIDES += ro.hardware.camera=v4l2

第一行确保V4L2 HAL模块对构建系统可见。这可以防止在没有必要支持的设备上进行检查构建

失败。product package 告诉构建系统包含V4L2HALv3库到系统映像。最后一行告诉硬件管理器

加载V4L2 HAL,而不是默认的相机HAL。

HAL使用要求

希望使用此HAL的设备和摄像头必须满足以下要求:

*相机必须支持BGR32、YUV420和JPEG格式。

*设备使用的gralloc和其他图形模块必须使“HAL_PIXEL_FORMAT_RGBA_8888” ,如同 “HAL_PIX EL_FORMAT_Emplement_DEFINED”

理解HAL代码

V4L2相机HAL有三个大部件:通用HALv3相机和HAL代码,具体使用V4L2的实现,以及Metadata系统。

为了了解上下文,您可能还希望阅读 libhardware/include/camera3.h,关于框架如何与HAL交互。

###相机和HAL接口

相机和HAL接口 由摄像头和V4L2相机HAL类实现。

V4L2CameraHAL类主要处理系统的初始化。

在创建时,它搜索/dev/video* 中具有特定能力的节点。然后,这些都会以可用的形式呈现给框架供使用。进一步的操作将酌情传递给各个摄像头。

Camera类实现了处理相机的一般逻辑-打开和关闭、配置流、准备和跟踪请求等。当它处理相机周围的物流时,实际图像捕获和设置逻辑是通过向下调用来实现的[V4L2摄像头](#V4L2摄像头)。Camera(使用辅助类)强制执行由V4L2Camera初始化的[Matadata](#Metadata)中给出的限制,例如对每个流的运行中请求数量的限制。

值得注意的是,这意味着您应该能够替换V4L2实现,只要正确填写Metadata相机类“就会工作”。

V4L2具体实现

V4L2Camera类是所有捕获功能的实现。

它包括Camera类验证设置的一些方法,但类的大部分是请求队列。Camera类提交CaptureRequests,当它们进入并被验证时。V4L2Camera通过三个阶段异步流水线:

*接受:V4L2Camera接受请求,并将其置于等待状态,直到被被排队者取走。

*排队者:V4L2Camera读取请求设置,并将其应用于设备,对设置进行快照到设备,并将V4L2驱动器处理一帧buffer。

*去除排队者:从驱动程序中回收已完成的帧,并发送返回Camera类进行最终处理(验证、填写结果对象,并将数据发送回框架)。

这项工作的大部分得到了V4L2Wrapper辅助类的帮助,它围绕V4L2 ioctl提供更简单的输入和输出

基于HAL已知的使用情况;自动填写常用值,并从结果中提取对HAL有用的信息。

此封装还用于将V4L2控件暴露给其相应的Metadata组件。

Metadata

Metadata子系统试图组织和简化处理相机metadata(system/media/camera/docs/docs.html)。在顶层是Metadata类和Partial MetadataInterface。Metadata类提供与各个组件的高级交互-填充静态metadata数据,校验、获取和设置设置,等等。Metadata类将所有这些传递给组件PartialMetadataInterface,每个接口都会过滤其特定的metadata,并执行所请求的任务。

一些通用元数据类被用来简化常见逻辑,用于此过滤和应用。在高层次上,有三个类型:

*属性:一个静态值。

*控件:可动态调整的值,以及可选的关联的静态属性,指示允许的值是什么。

*状态:动态只读值。

Metadata系统使用其他接口和子类来区分不同metadata数据所需的各种不同功能tag。

Metadata工厂

此V4L2 Camera HAL实现利用了元数据工厂方法。

此方法初始化所有100多个必需的元数据组件,基本符合HAL规范。大多数人什么都不做或者报告固定值,但也有一些与V4L2驱动器相连。

这个HAL最初是为Raspberry Pi相机模块设计的v2.1,因此固定默认值通常基于该相机分配。

V4L2缺陷

*一次支持一个流。值得注意的是,这意味着您必须重新配置预览和捕获之间的流(如果格式不同)。

这使得这个HAL不能向后兼容Android相机(v1)API,因为它的许多方法都试图做到这一点;必须使用Camera2。

*V4L2中无法填写各种元数据属性,例如相机的物理特性。因此,这个HAL永远不会有能力

理论上,它可以为所有相机提供完全准确的信息支持。

*Android要求HAL支持YUV420、JPEG和一种图形格式

堆栈的选择(“实现定义”)。实际上支持的摄像头很少所有这些格式(到目前为止,Raspberry Pi相机是唯一已知的格式),因此,HAL内置的某种格式转换将是一个有用的功能

以扩大该HAL的覆盖范围/实用性。

*V4L2没有承诺应用设置的速度,也没有确定给定帧的有效设置的好方法。因此,

传入请求和输出结果的设置将按以下方式应用/读取尽最大努力,可能是不正确的。

*V4L2的许多功能都没有连接到HAL,因此HAL与理想/可能相比,功能不足。

其他已知问题

*各种功能尚未实现:高速抓拍,闪光灯模式,热插拔。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]