开发ISP基本功能

本章节涉及 Sensor 部分,请仔细阅读 Sensor 的 Datasheet,或联系Sensor原厂工程师。

结构体说明请参考AscendCL应用软件开发指南 (C&C++)及本手册中的ISP接口参考。

驱动一般包括 xxx_cmos.c 文件,xxx_cmos.h、 xxx_sensor_ctl.c文件,分别用于 ISP 功能和初始化序列,xxx_cmos_ex.h 文件用于存放定义的驱动文件中的全局变量,主要为ISP算法默认参数。

驱动文件共有 3个callback 函数,是Sensor驱动向Firmware注册函数的接口。

开发流程

ISP基本功能,请按如下顺序实现:

  1. cmos_set_image_mode, cmos_set_wdr_mode
    • cmos_set_image_mode
      • 该函数用于区分不同分辨率,用 hi_isp_sns_state 中的 img_mode 传递分辨率模式。
      • 请注意返回值,返回“0”表示重新配置 Sensor,会调用 sensor_init(),返回“-2”表示不用重新配置 Sensor,无动作。
      • 请注意 hi_isp_sns_state 中 fl_std 和 fl 的区别。fl_std 是当前分辨率及 WDR 模式下,标准帧率(一般为 30fps)时的总行数。fl 是实际总行数,该参数会在其它函数中,由于降帧的原因,基于标准行数 fl_std 及帧率修改。
    • cmos_set_wdr_mode

      该函数用于区分不同 WDR 模式,用 hi_isp_sns_state 中的 wdr_mode 传递。

      不同 WDR 模式,一般会修改 AE 相关函数,ISP default 内各个参数以及初始化序列。

  2. sensor_global_init
    • sensor_global_init

      该函数配置了 Sensor 初始化的相关配置,包括分辨率、WDR 模式、fl_std 的默认值,初始化状态值及其他相关的状态值。

  3. sensor_init, sensor_exit
    • sensor_init

      根据不同的分辨率及 WDR 模式实现对Sensor进行不同初始化序列配置。

    • sensor_exit

      实现Sensor退出操作,包括Sensor停流以及i2c、spi退出等。

  4. cmos_get_isp_default,cmos_get_isp_black_level
    • cmos_get_isp_default

      该函数配置基本是调试或校正参数,可以在调试及校正时修改参数。

      请注意不同 WDR 模式参数可能不一样,比如 Gamma,DRC 等。具体请参考AscendCL应用软件开发指南 (C&C++)

    • cmos_get_isp_black_level

      在这个函数里面配置 RAW 数据四个通道的黑电平。

      有些类型的 Sensor 的黑电平会随着 gain 值的变化而漂移,这时需要在不同的 ISO 值下分别校正出对应的黑电平值,在 cmos_get_isp_black_level()函数内进行相应的实现。