3. HAL3核心设计理念:Pipeline模型、Capability、Stream与Session的概念
Android Camera HAL3 架构摒弃了 HAL1 的单一阻塞式接口,引入了以 Pipeline(流水线) 为核心的异步、可配置设计。理解 Pipeline 模型、Capability(能力)、Stream(流)与 Session(会话)这四个核心概念,是掌握 HAL3 架构的基石。它们共同定义了相机硬件与框架之间的高效协作契约。
3.1 Pipeline 模型:异步请求与结果流
HAL3 的核心是一个 生产者-消费者 Pipeline。应用层通过框架向 HAL 提交 Capture Request(捕获请求),HAL 硬件 Pipeline 异步处理该请求,最终返回一个 Capture Result(捕获结果)。整个过程是流水线化的,允许同时有多个请求在 Pipeline 中排队和处理,从而显著提升吞吐量和降低延迟。
3.2 Capability:硬件能力的精确描述
HAL3 通过 camera_metadata_t 结构体向框架暴露其 Capability。这些元数据在相机打开时通过 get_camera_characteristics() 返回,详细描述了硬件支持的所有功能、限制和配置。框架据此决定如何配置 Pipeline 和提交请求。
| Capability 分类 | 关键 Tag 示例 | 说明 |
|---|---|---|
| 基础信息 | ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL |
标明硬件级别:LEGACY、LIMITED、FULL、LEVEL_3 |
| 输出格式 | ANDROID_SCALER_AVAILABLE_FORMATS |
支持的图像格式列表,如 YUV_420_888、JPEG、RAW10 |
| 分辨率 | ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS |
每种格式支持的输出/输入分辨率组合 |
| 帧率 | ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES |
支持的帧率范围,如 [15, 30] |
| 3A 能力 | ANDROID_CONTROL_AE_AVAILABLE_MODES |
自动曝光支持的模式:ON、OFF、SCENE_MODE 等 |
| 同步能力 | ANDROID_SYNC_MAX_LATENCY |
请求与结果之间的最大延迟帧数 |
3.3 Stream:数据流的抽象
Stream 是 HAL3 中数据输出的逻辑通道。一个 Stream 由 格式 (Format)、分辨率 (Resolution)、使用场景 (Usage) 和 最大缓冲区数 (MaxBuffers) 定义。应用通过 configure_streams() 接口向 HAL 注册一组 Stream,HAL 据此分配硬件资源。
3.4 Session:请求的生命周期容器
Session 是 Stream 配置与 Capture Request 执行的上下文。一个 Session 对应一次 configure_streams() 调用之后到下一次 configure_streams() 调用之前的阶段。在同一个 Session 内,Stream 配置保持不变,应用可以持续提交 Request。
configure_streams())是一个重量级操作,通常会导致 Pipeline 排空、硬件重新初始化,可能引入明显的延迟。因此,应尽量减少 Session 切换频率。
3.5 核心概念关系总结
下表总结了四个核心概念在 HAL3 架构中的角色与关系:
| 概念 | 角色 | 生命周期 | 与其它概念的关系 |
|---|---|---|---|
| Pipeline | 异步处理引擎 | 相机打开期间持续存在 | 处理 Session 内的所有 Request |
| Capability | 硬件能力描述 | 静态,相机打开时查询 | 决定 Stream 和 Request 的合法配置 |
| Stream | 数据输出通道 | Session 内固定 | 由 Capability 约束,在 Session 中注册 |
| Session | 配置与执行上下文 | 从 configure_streams() 到下一次调用 | 包含一组 Stream,接收 Request |
3.6 设计理念带来的优势
- 高吞吐量:Pipeline 模型允许多个请求并行处理,避免串行等待。
- 低延迟:异步回调机制使得结果可以尽快返回,无需轮询。
- 灵活性:Capability 机制支持硬件差异化,框架可动态适配。
- 可预测性:Stream 和 Session 的明确生命周期,使得资源管理清晰可控。
- 可扩展性:新增功能(如 HDR、多帧降噪)只需扩展 Capability 和 Request 参数,无需改动核心架构。
get_camera_characteristics() 返回的 Capability 准确无误,因为框架会严格依据这些信息进行配置检查。任何 Capability 与实际硬件能力的不匹配,都可能导致 configure_streams() 或 process_capture_request() 返回错误。