在CamX(Camera eXtension)架构中,MetadataPool是相机HAL层元数据管理的核心内存池组件,主要用于高效地分配和复用MetaBuffer对象(即元数据缓冲区)。根据其生命周期、作用域和使用场景,MetadataPool被设计为多种类型,每种类型服务于相机管线中不同的处理阶段和组件。
MetadataPool 主要类型及其使用场景
| 类型 | 生命周期 | 主要作用域/持有者 | 核心用途与场景 | 关键特性 |
|---|---|---|---|---|
| Per Usecase Pool (用例池) | 与一个相机用例(如预览、连拍、录像)同生命周期 | 由Usecase对象创建并持有 | 为该用例下的所有Session提供初始的元数据内存资源。作为Session池的“上游”供给源。 | 池容量通常较大,用于缓冲和分配初始的MetaBuffer给各个Session,减少Session创建时的动态分配开销。 |
| Per Session Pool (会话池) | 与一个相机会话(Session)同生命周期 | 由Session对象创建并持有 | 管理该Session内所有Pipeline(管线)在处理请求(Request)过程中所需的元数据缓冲区。 | 是元数据复用的核心池。Request从该池获取MetaBuffer,处理完成后归还,实现Request级别的高效内存复用。 |
| Per Pipeline Pool (管线池) | 与一个处理管线(Pipeline)同生命周期 | 由Pipeline对象创建并持有(可选或特定优化) | 为特定管线(如BPS、IPE)的节点(Node)提供专用的元数据缓冲区,用于存储该管线内部产生的中间元数据。 | 可用于减少跨管线或跨节点的元数据传递开销,实现更细粒度的内存隔离和复用,但并非所有架构都显式使用此类型。 |
| Static / Global Pool (静态/全局池) | 进程生命周期或HAL模块生命周期 | 全局静态变量 |