当前位置: 首页 > news >正文

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 缓冲区的管理与回收。
ZSLFrameSelectorZSL 帧选择逻辑,决定最佳 Anchor Frame。
OfflineProcessing触发 Offline Session,处理复杂图像任务。

📂 常见代码位置(以 Android 14 + Qualcomm 平台为例)

  • Session 创建camxsession.cpp
  • ZSL 管理camximagebuffermanager.cpp
  • Anchor Frame 选择camxanchorpicker.cpp

📌 4. 为什么 CamX 采用多 Session 处理 ZSL?

  1. 解耦实时与离线任务

    • 实时任务(Real-time Session)要求低延迟,只能执行基本处理。
    • 离线任务(Offline Session)可以用更多时间处理复杂算法(如多帧合成、超级夜景)。
  2. 提高系统效率

    • 预览与拍照分离,避免快门按下时阻塞预览。
    • 通过 ZSL Ring Buffer 记录关键帧,按需处理,降低功耗。
  3. 支持多种模式

    • 实时预览、快门捕获、离线 HDR、夜景、4K 视频拍摄等复杂场景。

📋 5. 代码路径定位 (Qualcomm CamX in Android 14)

  1. Session 初始化

     

    cpp

    CopyEdit

    CamX::Session* pSession = CamX::Session::CreateSession();

  2. ZSL Buffer 设置

     

    cpp

    CopyEdit

    pZSLBufferManager->Initialize(ZSL_BUFFER_DEPTH);

  3. 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)

相关文章:

  • 软考笔记——计算机系统知识
  • 5.建造者模式
  • vSphere 克隆 Windows 虚拟机后无法访问文件共享的解决方案
  • Maven | 站在初学者的角度配置
  • vue3单独引用element-plus的Infinite Scroll无限滚动;vue3自定义指令
  • 一、Redis简介篇
  • 【操作系统安全】任务5:Windows 文件与文件系统
  • 解锁淘宝分类宝藏:深入探索“cat_get”接口的力量
  • vue3 elementUi table自由渲染组件
  • 使用computed计算属性实现购物车勾选
  • 【leetcode hot 100 105】从前序与中序遍历序列构造二叉树
  • 【从零开始】Air780EPM的LuatOS二次开发——OneWire协议调试注意事项!
  • C++之list类及模拟实现
  • 《C#上位机开发从门外到门内》3-5:基于FastAPI的Web上位机系统
  • 【NLP】 1. 文本在计算机里的表示: One-Hot, sparse vector, bag of words
  • MCU的应用场景:从智能家居到工业控制
  • 【Go】无法访问 proxy.golang.org 进行依赖下载
  • spring bean的生命周期和循环依赖
  • 量子信息理论入门:探索量子世界的奇妙信息处理方式
  • .gitignore 文件用于 Git 应忽略的文件夹的格式
  • AI把野史当信史?警惕公共认知的滑坡
  • 5月资金面前瞻:政府债净融资规模预计显著抬升,央行有望提供流动性支持
  • 新势力4月销量出炉:零跑逾4万辆再夺冠,蔚来环比增近六成,小米下滑
  • “五一”假期首日跨区域人员流动预计超3.4亿人次
  • 今年4月上海一二手房成交面积同比增21%,二手房成交2.07万套
  • 美乌矿产协议签署被曝“临门一脚”时生变,美方提附加条件