海思ISP简介
参考:https://blog.51cto.com/shugenyin/1851232
https://blog.csdn.net/qq_32896111/article/details/99643494
https://ask.csdn.net/questions/364796
https://blog.csdn.net/dddxxxx/article/details/77451196
由于前一段时间一直在搞海思的芯片,所以最近就想对自己在这一块做一个总结一座备份,主要的参考还是海思的文档。
就海思芯片来说,文档确实很多,对于初学者有很大的帮助。所以对于初学者来说,海思文档肯定是第一手的参考资料。
ISP的概述:
海思文档是这样描述的:ISP 通过一系列数字图像处理算法完成对数字图像的效果处理。主要包括 3A、坏点校正、去噪、强光抑制、背光补偿、色彩增强、镜头阴影校正等处理。ISP 包括逻辑部分以及运行在其上的 firmware。
其实对于纯做嵌入式开发 的来说,这个概念确实不好懂,毕竟涉及到太多的光学方面的专业知识和经验,这个还真不是在网上泡个几天就能够搞得定,毕竟光这些概念就把人搞蒙逼了,如果有光电学科背景的话,应该会好很多吧。
ISP的控制结构:
关于这方面呢,海思也给了一个描述,笔者觉得,还是这张图比较管用。
从上图可知,sensor将lens投射到的光信号光电转换后,将Bayer格式的原始图像(RAW)送给isp,ISP经过算法处理,输出RGB空间域的图像给后端的视频采集单元。在这个过程中,ISP 通过运行在其上的 firmware 对 ISP逻辑,lens 和 sensor 进行相应控制,进而完成自动光圈、自动曝光、自动白平衡等功能。其中,firmware 的运转靠视频采集单元的中断驱动。PQ Tools 工具通过网口或者串口完成对 ISP 的在线图像质量调节。
从上面的图图片和描述,可以知道整个ISP分为firmware和isp 处理逻辑,ISP逻辑现将sensor发送过来的Bayer格式的RAW图完成算法处理后,并将统计处当前的图像的实时信息。firmware通过获取ISP逻辑的图像统计信息,从新计算,通过i2c,spi或者pwm反馈给lens,sensor和isp逻辑,已达到自动调节图像质量的目的。
架构方面:
下面着重说一下ISP中的firmware这一部分内容。
文件的组织:
firmware的drv目录下的代码(pwm,snesor_i2c和sensor_spi)生成的驱动程序(相对应的ko文件)向用户态上报ISP的中段,并以该中断驱动 Firmware 的 ISP 控制单元运转。ISP 控制单元从驱动程序中获取统计信息,并调度基础算法单元和 3A 算法库,最后通过驱动程序配置寄存器。
从官方文档的描述来看,虽然firmware的运转靠的是视频采集单元的中段驱动,以及Firmware 通过获取 ISP 逻辑的图像统计信息,重新计算,反馈控制 lens、sensor 和 ISP 逻辑,以达到自动调节图像质量的目的。但是总他的架构上看的话,其实还包含了很多的软件库,ISP 的 Firmware 包含三部分,一部分是 ISP 控制单元和基础算法库,一部分是AE/AWB 算法库,一部分是 sensor 库。Firmware 设计的基本思想是单独提供 3A 算法库,由 ISP 控制单元调度基础算法库和 3A 算法库,同时 sensor 库分别向 ISP 基础算法库和 3A 算法库注册函数回调,以实现差异化的 sensor 适配。
不同的 sensor 都以回调函数的形式,向 ISP 算法库注册控制函数。ISP 控制单元调度基础算法库和 3A 算法库时,将通过这些回调函数获取初始化参数,并控制 sensor,如调节曝光时间、模拟增益、数字增益,控制 lens 步进聚焦或旋转光圈等。
下面是ISP firmware的架构图:
从上面的描述来看,可能主要的工作还是sensor的回调函数中的参数问题,需要关心的是回调函数的注册,以及回调函数的参数的确定。这些参数应该就是使用PQtool调试出来的参数了。
软件的开发:
用户使用海思的 3A 算法库。这时用户需要根据 ISP 基础算法库和 3A 算法库给出的
sensor 适配接口去适配不同的 sensor。这一部分主要的工作还是在sensor_cmos.c文件中的回调函数注册的参数上面。
作为软件工程师,很多时候关注具体的操作。海思文档也有说明。主要的而工作量在snesor_cmos.c和sensor_ctrl.c。这两个文件的作用分别为:
sensor_cmos.c
该文件中主要实现 ISP 需要的回调函数,这些回调函数中包含了 sensor 的适配算法,不同的 sensor 可能有所不同。
sensor_ctrl.c
sensor 的底层控制驱动,主要实现 sensor 的读写和初始化动作。用户可以根据sensor 的 datasheet 进行这两个文件的开发,必要的时候可以向 sensor 厂家寻求支持。
firmware的内部流程:
firmware的内部流程分为两部分:
1.初始化任务,主要完成 ISP 控制单元的初始化、ISP 基础算法库的初始化、3A 算法库的初始化,包括调用 sensor 的回调获取 sensor 差异化的初始化参数;
2. 另一部分是动态调节过程,在这个过程中,firmware 中的 ISP 控制单元调度 ISP 基础算法库和 3A 算法库,实时计算并进行相应控制。
如下图所示:
ISP firmware 软件结构:
海思ISP的软件流程:
ISP 作为前端采集部分,需要和视频采集单元(VIU)协同工作。ISP 初始化和基本配置完成后,需要 VIU 进行接口时序匹配。一是为了匹配不同 sensor 的输入时序,二是为 ISP 配置正确的输入时序。待时序配置完成后,ISP 就可以启动 Run 来进行动态图像质量调节。此时输出的图像被 VIU 采集,进而送去显示或编码。
PQ Tools 工具主要完成在 PC 端进行动态图像质量调节,可以调节多个影响图像质量的因子,如去噪强度、色彩转换矩阵、饱和度等。
如果用户调试好图像效果后,可以使用 PQ Tools 工具提供的配置文件保存功能进行配置参数保存。在下次启动时系统可以使用 PQ Tools 工具提供的配置文件加载功能加载已经调节好的图像参数。
firmware软件流程图: