3A
- 自动对焦(AF)
- 自动曝光(AE)
- 自动白平衡(AWB)
海思文档结构
Hi3518EV200_ISP_3A 版本依赖于相应的 SDK 大版本,通过一系列数字图像处理算法完成对数字图像的效果处理。主要包含 Firmware 框架及海思 3A 库, Firmware 提供算法的基本框架,处理统计信息,驱动数字图像处理算法,并包含坏点校正、去噪、色彩增强、镜头阴影校正等处理。 3A 库以注册的方式(应用层驱动),添加到 Firmware 中,完成曝光、白平衡、色彩还原等处理。
firmware体现在\Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp\firmware
整个fiermware会编译生成一个hi3518e_isp.ko
,放在\Hi3518E_SDK_V1.0.3.0\package\mpp\ko
中;还有一个libisp.so
放在\Hi3518E_SDK_V1.0.3.0\package\mpp\lib
中
海思3A库体现在\Hi3518E V200R001C01SPC030\01.software\board\Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp\3a
中,它是没有源码,提供了库文件放在mpp的lib中;但他提供了sample,在3a的文件夹中,调用库实现AE、AWB的实现方法。
有的公司会自己做自己的3a库,那么只需要将mpp\lib中的对应库文件替换掉就可以了
ISP firmware设计思路
ISP 的 Firmware 包含三部分
- 一部分是 ISP 控制单元和基础算法单元,即 ISP 库
在\mpp\component\isp\firmware\src
底下,特别是其中的algorithms,是一些ISP相关的基础算法。应用程序以库的形式调用这些基础算法单元 - 一部分是 AE/AWB/AF 算法库
- 一部分是 sensor 库
以库的方式提供的原因
库的方式是解耦合的方式,程序修改,这些库不用动。比如换一个sensor,3a也要跟着换就很麻烦,只需要换sensor相关应用层驱动(库),3a、firmware是不用动的。
3a操作看上去和sensor有关,比如曝光时间和sensor的曝光量。
实际上3a算法不关心硬件上怎么去曝光,关心的是曝光的算法。比如根据环境光的强度得到曝光的时间,和硬件上如何去控制曝光强度没有关系。于是可以解耦合开
就是这样的架构,可以使得这三部分独立地去进行设计
Firmware设计的基本思想是单独提供 3A 算法库,由 ISP 控制单元调度基础算法单元和 3A 算法库,同时 sensor 库分别向ISP 库和 3A 算法库注册函数回调,以实现差异化的 sensor 适配。 ISP firmware 设计思路如图所示。
不同的 sensor 都向 ISP 库和 3A 算法库注册控制函数,这些函数都以回调函数的形式存在。 ISP 控制单元调度基础算法单元和 3A 算法库时,将通过这些回调函数获取初始化参数,并控制 sensor,如调节曝光时间、模拟增益、数字增益,控制 lens 步进聚焦或旋转光圈等。
流程是这样的。sensor提供操作曝光的函数,注册到ISP模块中;3A算法注册到ISP模块后,实现根据外部条件计算曝光相关参数,再将相关参数通过回调把值传给sensor操作报关的函数。
ISP结构
- ko文件如果修改,就需要重新执行load3518e来加载ko文件
- so文件如果修改,就需要将新的动态库文件部署到运行环境中
ISP流程
ISP 作为图像前处理部分,需要和视频采集单元( VIU)协同工作。 ISP 初始化和基本配置完成后,需要 VIU 进行接口时序匹配(对接sensor)。一是为了匹配不同 sensor 的输入时序,二是为 ISP 配置正确的输入时序。待时序配置完成后, ISP 就可以启动 Run 来进行动态图像质量调节。此时输出的图像被 VIU 采集,进而送去显示或编码。软件使用流程如图 2-1 所示。
PQ Tools 工具主要完成在 PC 端进行动态图像质量调节,可以调节多个影响图像质量的因子,如去噪强度、色彩转换矩阵、饱和度等
用于实时图像参数调整
对应sample_common_isp.c
代码中SAMPLE_COMM_ISP_Init
函数
- 1 sensor register callback
- 2 register hisi ae lib
- 3 register hisi awb lib
- 4 register hisi af lib
- 5 isp mem init
- 6 isp set WDR mode
- 7 isp set pub attributes
- 8 isp init
而后SAMPLE_COMM_ISP_Init
函数在主函数中的SAMPLE_COMM_VI_StartVi
被调用
SAMPLE_COMM_ISP_Init
后SAMPLE_COMM_ISP_Run
,在线程中将isp跑起来,进行动态图像调整