Android 的相机硬件抽象层 (HAL) 将 android.hardware.camera2 中的更高级别相机框架 API 连接到您的底层相机驱动程序和硬件。从 Android 13 开始,相机 HAL 接口开发使用 AIDL。Android 8.0 引入了 Treble,将相机 HAL API 切换到由 HAL 接口描述语言 (HIDL) 定义的稳定接口。如果您之前为 Android 7.0 及更低版本开发过相机 HAL 模块和驱动程序,请注意相机管道中的重大更改。
AIDL 相机 HAL
对于运行 Android 13 或更高版本的设备,相机框架包含对 AIDL 相机 HAL 的支持。相机框架还支持 HIDL 相机 HAL,但 Android 13 或更高版本中添加的相机功能仅通过 AIDL 相机 HAL 接口提供。要在升级到 Android 13 或更高版本的设备上实现此类功能,设备制造商必须将其 HAL 进程从使用 HIDL 相机接口迁移到 AIDL 相机接口。
要了解有关 AIDL 优势的信息,请参阅 HAL 的 AIDL。
实现 AIDL 相机 HAL
有关 AIDL 相机 HAL 的参考实现,请参阅 hardware/google/camera/common/hal/aidl_service/
。
AIDL 相机 HAL 规范位于以下位置
- 相机提供程序:
hardware/interfaces/camera/provider/aidl/
- 相机设备:
hardware/interfaces/camera/device/aidl/
- 相机元数据:
hardware/interfaces/camera/metadata/aidl/
- 常用数据类型:
hardware/interfaces/camera/common/aidl/
对于迁移到 AIDL 的设备,设备制造商可能需要根据代码结构修改 Android SELinux 策略 (sepolicy) 和 RC 文件。
验证 AIDL 相机 HAL
要测试您的 AIDL 相机 HAL 实现,请确保设备通过所有 CTS 和 VTS 测试。Android 13 引入了 AIDL VTS 测试, VtsAidlHalCameraProvider_TargetTest.cpp
。
Camera HAL3 功能
Android 相机 API 重新设计的目的是大幅提高应用控制 Android 设备上相机子系统的能力,同时重新组织 API 以使其更高效且更易于维护。增强的控制使在 Android 设备上构建高质量相机应用变得更加容易,这些应用可以在多种产品上可靠运行,同时尽可能使用设备特定的算法来最大限度地提高质量和性能。
相机子系统的版本 3 将操作模式构建为单一统一的视图,该视图可用于实现任何先前的模式以及其他几种模式,例如连拍模式。这可以更好地实现用户对焦点和曝光的控制,以及更多的后期处理,例如降噪、对比度和锐化。此外,这种简化的视图使应用程序开发人员可以更轻松地使用相机的各种功能。
API 将相机子系统建模为一个管道,该管道将传入的帧捕获请求转换为帧,比例为 1:1。请求封装了有关帧的捕获和处理的所有配置信息。这包括分辨率和像素格式;手动传感器、镜头和闪光灯控制;3A 操作模式;RAW->YUV 处理控制;统计信息生成等等。
简而言之,应用程序框架从相机子系统请求帧,而相机子系统将结果返回到输出流。此外,还会为每组结果生成包含颜色空间和镜头阴影等信息的元数据。您可以将相机版本 3 视为相机版本 1 的单向流的管道。它将每个捕获请求转换为传感器捕获的一张图像,然后将其处理为
- 包含有关捕获的元数据的结果对象。
- 一到 N 个图像数据缓冲区,每个缓冲区都进入其自己的目标表面。
可能的输出表面集是预配置的
- 每个表面都是固定分辨率图像缓冲区流的目标。
- 一次只能配置少量表面作为输出(约 3 个)。
请求包含所有期望的捕获设置以及要将图像缓冲区推送到此请求的输出表面列表(从配置的总集中)。请求可以是单次的(使用 capture()
),也可以无限期重复(使用 setRepeatingRequest()
)。捕获优先于重复请求。

图 1. 相机核心操作模型
Camera HAL1 概述
相机子系统的版本 1 被设计为一个黑盒,具有高级控件和以下三种操作模式
- 预览
- 视频录制
- 静态图像捕获
每种模式都具有略有不同且重叠的功能。这使得难以实现新功能,例如介于两种操作模式之间的连拍模式。

图 2. 相机组件
Android 7.0 继续支持 Camera HAL1,因为许多设备仍依赖它。此外,Android 相机服务支持同时实现 HAL(1 和 3),这在您想要使用 Camera HAL1 支持功能较弱的前置摄像头,并使用 Camera HAL3 支持功能更强的高级后置摄像头时非常有用。
有一个单独的相机 HAL 模块(具有自己的版本号),其中列出了多个独立的相机设备,每个设备都有自己的版本号。支持设备 2 或更高版本需要相机模块 2 或更高版本,并且此类相机模块可以混合使用相机设备版本(这就是我们所说的 Android 支持同时实现 HAL 的意思)。