当前位置: 首页 > news >正文

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

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

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与理想/可能相比,功能不足。

其他已知问题

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • c语言之 *指针与 **指针
  • .net dataexcel 脚本公式 函数源码
  • 在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点
  • MySQL索引特性(上)
  • 什么是死锁 , 以及产生的原因详细介绍
  • 1.6.丢弃法
  • 论文复现:Predictive Control of Networked Multiagent Systems via Cloud Computing
  • x264 编码器 CAVLC 熵编码源码分析
  • Alpine Linux 轻量级Linux 适合于 docker 容器镜像
  • 浏览器缓存:强缓存与协商缓存实现原理有哪些?
  • HTTPS请求头缺少HttpOnly和Secure属性解决方案
  • 微服务实战系列之玩转Docker(二)
  • redis基本类型和订阅
  • 数据结构之初始二叉树(2)
  • docker网络互联
  • python3.6+scrapy+mysql 爬虫实战
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • create-react-app项目添加less配置
  • download使用浅析
  • export和import的用法总结
  • Gradle 5.0 正式版发布
  • JavaScript 奇技淫巧
  • javascript从右向左截取指定位数字符的3种方法
  • JavaScript类型识别
  • JDK 6和JDK 7中的substring()方法
  • opencv python Meanshift 和 Camshift
  • PHP面试之三:MySQL数据库
  • Redis的resp协议
  • Redis在Web项目中的应用与实践
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vuex 学习笔记 01
  • 后端_ThinkPHP5
  • 你真的知道 == 和 equals 的区别吗?
  • 前端存储 - localStorage
  • 树莓派 - 使用须知
  • 想写好前端,先练好内功
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 在electron中实现跨域请求,无需更改服务器端设置
  • Java总结 - String - 这篇请使劲喷我
  • k8s使用glusterfs实现动态持久化存储
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # Panda3d 碰撞检测系统介绍
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (~_~)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (接口封装)