Android 的相机硬件抽象层 (HAL)

Android 的相机硬件抽象层 (HAL) 将 android.hardware.Camera 中更高级别的相机框架 API 连接到底层相机驱动程序和硬件。Android 5.0 引入了相机堆栈的全新底层实现。如果您之前已为旧版本的 Android 开发了相机 HAL 模块和驱动程序,请注意相机管道中的重大更改。

注意:新相机HAL正在积极开发中,可以随时更改。本文档介绍相机子系统的高级设计;有关详细信息,请参阅相机版本支持。

相机 HAL1 概述

相机子系统的版本 1 被设计为具有高级控制和以下三种操作模式的黑匣子:

预览

视频录制

静态捕获

每种模式的功能略有不同和重叠。这使得实现新类型的功能(例如突发模式)变得困难,因为它介于其中两种模式之间。


Android 7.0 继续支持相机 HAL1,因为许多设备仍然依赖它。此外,Android 相机服务支持实现 HAL(1 和 3),当您想要支持功能较弱的带有摄像头 HAL1 的前置摄像头和带有摄像头 HAL3 的更高级的后置摄像头时,这非常有用。

注意:不支持相机 HAL2,因为它是通往相机 HAL3 的临时步骤。

有一个摄像头 HAL 模块(具有自己的版本号),其中列出了多个独立的摄像头设备,每个设备都有自己的版本号。需要相机模块 2 或更高版本才能支持设备 2 或更高版本,并且此类相机模块可以混合使用相机设备版本(这就是我们所说的 Android 支持实现这两个 HAL 的意思)。


相机 HAL3 增强功能
Android 相机 API 重新设计的目的是大幅提高应用程序在 Android 设备上控制相机子系统的能力,同时重新组织 API 以使其更加高效和可维护。借助额外的控制功能,您可以更轻松地在 Android 设备上构建高质量的相机应用,这些应用可以在多个产品中可靠运行,同时仍尽可能使用特定于设备的算法,以最大限度地提高质量和性能。

相机子系统的版本 3 将操作模式构建为一个统一的视图,该视图可用于实现以前的任何模式和其他几种模式,例如突发模式。这样可以更好地控制用户对焦点和曝光以及更多的后期处理,例如降噪、对比度和锐化。此外,这种简化的视图使应用程序开发人员更容易使用相机的各种功能。
API 将相机子系统建模为管道,该管道以 1:1 的比例将传入的帧捕获请求转换为帧。这些请求封装了有关帧捕获和处理的所有配置信息。这包括分辨率和像素格式;手动传感器、镜头和闪光灯控制;3A工作模式;RAW->YUV处理控制;统计数据生成;等等。

简单来说,应用程序框架从相机子系统请求一个帧,相机子系统将结果返回到输出流。此外,还会为每组结果生成包含色彩空间和镜头阴影等信息的元数据。您可以将相机版本 3 视为相机版本 1 的单向流的管道。它将每个捕获请求转换为传感器捕获的一张图像,该图像被处理为:
一个 Result 对象,其中包含有关捕获的元数据。
一到N个图像数据缓冲区,每个缓冲区都进入自己的目标Surface。
预配置了一组可能的输出曲面:

每个 Surface 都是固定分辨率的图像缓冲区流的目标。
一次只能将少量曲面配置为输出 (~3)。
请求包含所有所需的捕获设置以及要为此请求将图像缓冲区推送到其中的输出曲面列表(在总配置集内)。请求可以是一次性的(使用 capture()),也可以无限期重复(使用 setRepeatingRequest())。捕获优先于重复请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值