怎么做公司招聘网站,广州网站建设推广易尚,杭州网站建设中心,住房与城乡建设局网站最近#xff0c;遇到一个这样的问题#xff0c;临时了解下这个驱动实现架构和特点#xff0c;翻译如下
V4L2相机HALv3
camera.v4l2库使用视频Linux 2#xff08;V4L2#xff09;接口实现了camera HAL v3。这使得它在理论上可以与各种设备配合使用#xff0c;尽管V4L2的…最近遇到一个这样的问题临时了解下这个驱动实现架构和特点翻译如下
V4L2相机HALv3
camera.v4l2库使用视频Linux 2V4L2接口实现了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.camerav4l2第一行确保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子系统试图组织和简化处理相机metadatasystem/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相机v1API因为它的许多方法都试图做到这一点必须使用Camera2。
*V4L2中无法填写各种元数据属性例如相机的物理特性。因此这个HAL永远不会有能力 理论上它可以为所有相机提供完全准确的信息支持。
*Android要求HAL支持YUV420、JPEG和一种图形格式 堆栈的选择“实现定义”。实际上支持的摄像头很少所有这些格式到目前为止Raspberry Pi相机是唯一已知的格式因此HAL内置的某种格式转换将是一个有用的功能 以扩大该HAL的覆盖范围/实用性。
*V4L2没有承诺应用设置的速度也没有确定给定帧的有效设置的好方法。因此 传入请求和输出结果的设置将按以下方式应用/读取尽最大努力可能是不正确的。
*V4L2的许多功能都没有连接到HAL因此HAL与理想/可能相比功能不足。
其他已知问题
*各种功能尚未实现高速抓拍闪光灯模式热插拔。