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

news/2024/8/26 9:59:42 标签: 数码相机

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

V4L2相机HALv3

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

当前状态

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

使用HAL构建设备

为确保HAL是为设备构建的,请在您的<device>.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与理想/可能相比,功能不足。

其他已知问题

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


http://www.niftyadmin.cn/n/5558038.html

相关文章

自定义列表标记(dl-dt-dd)

dl:自定义列表容器标记dt:列表标题dd:列表内容 目录 例子 常用语网页的footer&#xff0c;例如 例子 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthde…

套用BI方案做数据可视化是种什么体验?

在数字化转型的浪潮中&#xff0c;数据可视化作为连接数据与决策的桥梁&#xff0c;其重要性日益凸显。近期&#xff0c;我有幸体验了奥威BI方案进行数据可视化的全过程&#xff0c;这不仅是一次技术上的探索&#xff0c;更是一次对高效、智能数据分析的深刻感受。 初识奥威&a…

待机电流过大

问题&#xff1a; 待机电流过大&#xff0c;有10几mA 原因&#xff1a; 漏电&#xff0c;芯片引脚没有关闭 验证过程&#xff1a; 对照原理图&#xff0c;把芯片几乎所有的管脚全部关掉。 比如LED管脚设置为输出模式&#xff0c;输出0 PWM管脚设置为输出模式&#xff0c…

uniapp开发钉钉小程序流程

下载开发工具 1、小程序开发工具 登录钉钉开发平台&#xff0c;根据自己的需求下载合适的版本&#xff0c;我这里下载的是Windows &#xff08;64位&#xff09;版本 小程序开发工具 - 钉钉开放平台 2、HBuilder X HBuilderX-高效极客技巧 新建项目及相关配置 新建项目 …

LVS+Nginx高可用集群---搭建高可用集群负载均衡

1.LVS简介 Lvs(Linux Virtual Server)&#xff1a;使用集群&#xff0c;对于整个用户来说是透明&#xff0c;用户访问的时候是单个高性能的整体。道理与nginx类似 LVS网络拓扑图&#xff1a;是基于四层。 用户通过浏览器发送请求&#xff0c;然后到达LVS.Lvs根据相应算法将…

泛微e-cology WorkflowServiceXml SQL注入漏洞(POC)

漏洞描述&#xff1a; 泛微 e-cology 是泛微公司开发的协同管理应用平台。泛微 e-cology v10.64.1的/services/接口默认对内网暴露&#xff0c;用于服务调用&#xff0c;未经身份认证的攻击者可向 /services/WorkflowServiceXml 接口发送恶意的SOAP请求进行SQL注入&#xff0c;…

【docker 部署springboot项目】

一、docker安装 1.检查Linux内核版本高于3.10才可安装 uname -r 2. 卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 3. 使用docker仓库进行安装 安装所需的软…

用python写一个tcp/ip协议的聊天软件

编写一个基于TCP/IP协议的简单聊天软件&#xff0c;可以让多个客户端连接到服务器&#xff0c;实现简单的文本消息收发功能。下面是一个基本的示例&#xff0c;涵盖了服务器端和客户端的实现。 服务器端&#xff08;chat_server.py&#xff09; 服务器端负责接收客户端的连接&…