1. Camera HAL概述:HAL在Android相机架构中的位置、HAL的主要职责、HAL版本演进(HAL1 vs HAL3)

1.1 Android相机整体架构分层

Android相机系统采用分层架构设计,从上至下依次为:应用层、框架层、HAL层和内核驱动层。其中,Camera HAL(Hardware Abstraction Layer)位于框架层与内核驱动之间,是连接Android相机服务与具体硬件实现的桥梁。

核心观点:HAL层是Android相机系统的“适配器”,它屏蔽了不同SoC平台和传感器厂商的硬件差异,为上层框架提供统一的接口标准。
Android相机系统分层架构 应用层(App / Camera2 API) 框架层(Camera Framework / CameraService) HAL层(Camera HAL) 内核驱动层(V4L2 / Sensor Driver / ISP) HAL层是Android相机系统的“适配器”,屏蔽硬件差异,提供统一接口

1.2 Camera HAL在架构中的位置

从分层图中可以清晰看到,Camera HAL处于中间层的关键位置:

  • 向上对接:CameraService通过HIDL(HAL Interface Definition Language)或Treble架构与HAL通信,下发控制命令并接收图像数据。
  • 向下驱动:HAL直接操作内核驱动(如V4L2、Sensor驱动、ISP驱动),完成硬件初始化、流配置、帧捕获等底层操作。
  • 平台适配:不同SoC厂商(Qualcomm、MediaTek、Exynos、麒麟)提供各自的HAL实现,但都遵循Android定义的HAL接口规范。
开发提示:在HAL开发中,你主要工作在HAL层和内核驱动层之间。理解HAL的边界职责,有助于快速定位问题是出在上层框架还是底层硬件。

1.3 Camera HAL的主要职责

Camera HAL承担以下五大核心职责:

职责领域 具体内容 关键接口/操作
设备管理 枚举相机设备、初始化/去初始化传感器、管理相机电源状态 open()、close()、getCameraInfo()
流配置 配置图像输出流(分辨率、格式、帧率)、管理Stream和Surface configureStreams()、processCaptureRequest()
帧捕获 接收上层请求、驱动ISP曝光、生成图像帧、返回Metadata capture()、flush()
3A控制 自动对焦(AF)、自动曝光(AE)、自动白平衡(AWB)算法集成 set3aMode()、triggerAf()
元数据管理 生成并返回Camera Metadata(静态能力、动态状态、控制参数) getCameraCharacteristics()、getCaptureResult()

1.4 HAL版本演进:HAL1 vs HAL3

Android相机HAL经历了从HAL1到HAL3的重大演进。HAL3是当前主流版本,HAL1仅用于兼容老旧设备。

HAL1 vs HAL3 架构对比 HAL1(传统架构) App → CameraService → HAL1 单线程模型,一次只能处理一个请求 预览/拍照/录像使用独立接口 不支持逐帧控制,灵活性差 HAL3(现代架构) App → CameraService → HAL3 多线程流水线,支持并发请求 统一Capture Request/Result模型 逐帧精细控制,支持YUV/RAW/JPEG 关键差异总结 HAL1:单线程、接口耦合、不支持逐帧控制 → 适合功能机/低端设备 HAL3:多线程流水线、统一Request模型、逐帧精细控制 → 现代Android相机标准

1.5 HAL1与HAL3详细对比

对比维度 HAL1 HAL3
引入版本 Android 4.0 (API 14) Android 5.0 (API 21)
线程模型 单线程,串行处理请求 多线程流水线,支持并发
请求模型 预览/拍照/录像各自独立接口 统一Capture Request + Result
逐帧控制 不支持,只能全局设置 支持,每帧可独立设置参数
输出格式 主要YUV/JPEG YUV、RAW、JPEG、HEIC、Depth
元数据 有限,通过回调传递 丰富,CameraCharacteristics + CaptureResult
适用场景 功能机、低端设备、兼容模式 中高端智能手机、专业相机应用
开发避坑:从HAL1迁移到HAL3时,最大的挑战是线程模型和请求流水线的重构。HAL3要求HAL实现者必须支持多线程并发访问,并且要正确处理请求的排队、超时和取消。如果底层硬件不支持多路并发,需要在HAL内部做同步和缓冲。

1.6 版本选择建议

在实际项目开发中,版本选择遵循以下原则:

  • 新项目一律使用HAL3:Android 10+已强制要求HAL3,且Camera2 API完全依赖HAL3。
  • HAL1仅用于兼容:老旧平台(如Android 4.x)或低端功能机可能仍需HAL1。
  • Treble架构影响:Android 8.0引入Treble后,HAL被拆分为HIDL Service,HAL3与Treble结合更紧密。
  • 性能考量:HAL3的流水线模型能充分发挥多核ISP和硬件加速能力,是高性能相机的基础。