1. 定义
Image Processing Algorithm,图像处理算法,看名字并不能很清楚的知道其在libcamera中的角色和作用。
实际上,每个ISP只有一个pipelineHandler,也只有一个IPA模块,每个IPA模块管理者多个Algorithm(如AE,AF等)。
// awb.cpp
REGISTER_IPA_ALGORITHM(Awb, "Awb") // 工厂模式创建awb实例,并注册到IPA的algorithms_数组中// af.cpp
REGISTER_IPA_ALGORITHM(Lsc, "Lsc")...// 使用algorithm
void IPAIPU3::processStats(const uint32_t frame,[[maybe_unused]] const int64_t frameTimestamp,const uint32_t bufferId, const ControlList &sensorControls)
{...for (auto const &algo : algorithms())algo->process(context_, frame, frameContext, stats, metadata);...
}
2. 角色/作用
libcamera中,IPA是算法大脑。其从PipelineHandler(管理的硬件)中接收3A统计值信息,计算和处理得到控制信息,并通过PipelineHandler下发给Sensor/ISP。
[Sensor + Lens + ISP] --> (捕获图像帧 + 生成统计信息) --> [PipelineHandler]^ || v| [IPA Module]| || | (计算控制参数)| v------------------------ (下发控制参数) <-------------------
3. 对外关系
和ISP、PipelineHandler 均一一对应;
如果系统中有多个ISP,则IpaManager就会创建多个IPAModule;
每个IPA Module可以包括多个algorithm。
CameraManager <-> IpaManager
ISP0 <-> PipelineHandler0 <-> IPA0
ISP1 <-> PipelineHandler1 <-> IPA1
...