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 中排队和处理,从而显著提升吞吐量和降低延迟。

关键特性:Pipeline 模型实现了请求与结果的解耦。应用无需等待上一个请求完成即可提交下一个,HAL 硬件可以按最优顺序并行处理多个请求(例如,同时处理预览帧和高分辨率拍照帧)。
HAL3 Pipeline 异步请求-结果模型 应用层 框架 (CameraService) HAL3 实现 ISP/硬件 Capture Request Capture Result Pipeline 内部:Request 队列 → 3A → ISP → 输出 支持多个 Request 同时处于不同处理阶段 异步非阻塞:提交请求后立即返回 通过回调机制通知结果就绪

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 请求与结果之间的最大延迟帧数
设计意图:Capability 机制使得框架可以编写通用代码,无需为每款传感器硬编码参数。框架通过查询 Capability 动态适配,实现“一次编写,到处运行”。

3.3 Stream:数据流的抽象

Stream 是 HAL3 中数据输出的逻辑通道。一个 Stream 由 格式 (Format)、分辨率 (Resolution)、使用场景 (Usage) 和 最大缓冲区数 (MaxBuffers) 定义。应用通过 configure_streams() 接口向 HAL 注册一组 Stream,HAL 据此分配硬件资源。

Stream 配置与数据流向 应用配置 Streams Stream 0: 预览 (YUV, 1920x1080) Stream 1: 拍照 (JPEG, 4000x3000) HAL configure_streams() 分配 ISP 管线资源 配置 DMA 通道 硬件数据输出 Stream 0 → 预览 Surface Stream 1 → 拍照 Buffer Stream 配置规则 1. 所有 Stream 必须在 configure_streams() 中一次性配置完成 2. 配置后不可动态增减,只能重新配置整个 Stream 集合

3.4 Session:请求的生命周期容器

Session 是 Stream 配置与 Capture Request 执行的上下文。一个 Session 对应一次 configure_streams() 调用之后到下一次 configure_streams() 调用之前的阶段。在同一个 Session 内,Stream 配置保持不变,应用可以持续提交 Request。

关键约束:Session 切换(即重新调用 configure_streams())是一个重量级操作,通常会导致 Pipeline 排空、硬件重新初始化,可能引入明显的延迟。因此,应尽量减少 Session 切换频率。

3.5 核心概念关系总结

下表总结了四个核心概念在 HAL3 架构中的角色与关系:

概念 角色 生命周期 与其它概念的关系
Pipeline 异步处理引擎 相机打开期间持续存在 处理 Session 内的所有 Request
Capability 硬件能力描述 静态,相机打开时查询 决定 Stream 和 Request 的合法配置
Stream 数据输出通道 Session 内固定 由 Capability 约束,在 Session 中注册
Session 配置与执行上下文 从 configure_streams() 到下一次调用 包含一组 Stream,接收 Request
HAL3 核心概念关系图 Capability (能力) Session (会话) Stream (流) Pipeline (流水线) 约束 包含 驱动 Capability 决定 Session 可配置的 Stream 集合;Pipeline 在 Session 上下文中处理 Request 并输出到 Stream

3.6 设计理念带来的优势

  • 高吞吐量:Pipeline 模型允许多个请求并行处理,避免串行等待。
  • 低延迟:异步回调机制使得结果可以尽快返回,无需轮询。
  • 灵活性:Capability 机制支持硬件差异化,框架可动态适配。
  • 可预测性:Stream 和 Session 的明确生命周期,使得资源管理清晰可控。
  • 可扩展性:新增功能(如 HDR、多帧降噪)只需扩展 Capability 和 Request 参数,无需改动核心架构。
实践要点:在实现 HAL3 时,务必确保 get_camera_characteristics() 返回的 Capability 准确无误,因为框架会严格依据这些信息进行配置检查。任何 Capability 与实际硬件能力的不匹配,都可能导致 configure_streams() 或 process_capture_request() 返回错误。