ZSL多个session
在高通的 CamX(Camera Architecture eXtension)框架中,ZSL(Zero Shutter Lag)场景通常会创建多个 session,主要是为了满足实时预览和离线处理的不同需求。这种多 session 架构可以提高数据处理的灵活性,尤其是在复杂的多帧处理(如 HDR、夜景、ZSL 快门)等场景中。
📸 1. CamX 中的 ZSL 多 Session 结构
在 ZSL 场景中,CamX 通常会创建以下两种 session:
Session 类型 | 用途 | 特性 |
---|---|---|
Real-time Session | 处理 实时预览 和 实时帧捕获 | - 低延迟、持续捕获、推送到缓冲区 |
Offline Session | 处理 离线 ZSL 帧,例如快门按下后的帧选择 | - 处理 ZSL 缓冲区,执行复杂算法(如 HDR) |
🔍 2. ZSL 多 Session 的工作流程
以下是高通 CamX 框架中 ZSL 多 session 典型的工作逻辑:
① 实时预览阶段(Real-time Session)
- Pipeline:实时 Pipeline 负责采集传感器数据并输出到 Surface。
- Buffer:持续将预览帧写入 ZSL Ring Buffer,例如最新 10-20 帧。
- 特点:
- 持续采集,低延迟
- 只执行轻量级 ISP 处理(如 AWB、AE、AF)
- 不进行复杂图像增强
② 快门按下 (Shutter Trigger)
- Frame Picking:Anchor Frame 选择逻辑触发,挑选最优 ZSL 帧:
- AE、AWB、AF 收敛状态
- ISO、曝光参数最佳帧
- 优先选择不需要 Flash 的帧
- 时间接近快门瞬间的最佳帧
- Session 切换:将选定的帧送入 Offline Session 进行高级处理。
③ 离线处理阶段 (Offline Session)
- Pipeline:Offline Pipeline 对选定 ZSL 帧执行更复杂的图像增强(如 HDR、夜景、降噪)。
- 输出:最终处理结果输出为 JPEG 文件或其他格式,供相册或分享使用。
📊 3. CamX 中多 Session 结构的实现
在 CamX 框架代码中,主要涉及以下核心组件:
模块 | 功能 |
---|---|
Session | 管理多条 Pipeline,处理实时与离线任务。 |
Pipeline | 定义数据流处理,实时与离线使用不同 Pipeline。 |
ImageBufferManager | 负责 ZSL 缓冲区的管理与回收。 |
ZSLFrameSelector | ZSL 帧选择逻辑,决定最佳 Anchor Frame。 |
OfflineProcessing | 触发 Offline Session,处理复杂图像任务。 |
📂 常见代码位置(以 Android 14 + Qualcomm 平台为例):
- Session 创建:
camxsession.cpp
- ZSL 管理:
camximagebuffermanager.cpp
- Anchor Frame 选择:
camxanchorpicker.cpp
📌 4. 为什么 CamX 采用多 Session 处理 ZSL?
-
解耦实时与离线任务
- 实时任务(Real-time Session)要求低延迟,只能执行基本处理。
- 离线任务(Offline Session)可以用更多时间处理复杂算法(如多帧合成、超级夜景)。
-
提高系统效率
- 预览与拍照分离,避免快门按下时阻塞预览。
- 通过 ZSL Ring Buffer 记录关键帧,按需处理,降低功耗。
-
支持多种模式
- 实时预览、快门捕获、离线 HDR、夜景、4K 视频拍摄等复杂场景。
📋 5. 代码路径定位 (Qualcomm CamX in Android 14)
-
Session 初始化:
cpp
CopyEdit
CamX::Session* pSession = CamX::Session::CreateSession();
-
ZSL Buffer 设置:
cpp
CopyEdit
pZSLBufferManager->Initialize(ZSL_BUFFER_DEPTH);
-
Anchor Frame 选择逻辑:
cpp
CopyEdit
BOOL ZSLFrameSelector::IsValidFrame(Buffer* pFrame) { if (pFrame->IsAEConverged() && !pFrame->IsFlashRequired()) { return TRUE; } return FALSE; }
📚 6. 相关文档
- Qualcomm Camera Subsystem Reference Manual
- CamX Source Code (Android 14)