Camera HAL 多线程管理详解
聚焦 CAMX 与 CHI-CDK 两套线程管理体系的设计思想、关键实现与典型用法,
并给出"症状 → 代码切入点"的定位速查,便于日常开发与死锁/卡顿/堆积类问题排查。
1. 为什么需要单独讲"多线程管理"
Camera HAL 是强实时、流水线、多节点并发的系统。一帧预览从 Sensor 采集到屏幕显示,要流经 IFE→BPS/IPE→
JPEG→Stats 等多个硬件节点,每个节点都有"等输入 buffer/fence 就绪 → 提交硬件 → 等硬件完成 → 通知下游"的节奏。
如果全程串行,吞吐和时延都不可接受;如果用裸线程随手std::thread,又会陷入创建销毁开销、生命周期混乱、
flush/同步困难、死锁难查的泥潭。
QCOM 的解法:把"线程池 + 任务调度"抽象成一套独立的 ThreadManager 库,所有需要异步执行的逻辑(节点处理、
请求/结果回调、defer 重排(DRQ)、资源/元数据管理)都注册成"作业族(JobFamily)",再以 Job 形式投递。代码只关心
"干什么(JobFunc)“和"什么时候干完(同步/Flush)”,线程的创建、复用、优先级、同步由库统一托管。
关键事实:CAMX 与 CHI-CDK 各自维护一套 ThreadManager 实现(文件不同、接口略