昇腾社区首页
中文
注册

开发ISP基本功能

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

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

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

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

  • hi_mpi_isp_sensor_reg_callback :ISP内置回调算法。
  • hi_mpi_ae_sensor_reg_callback:AE回调算法。
  • hi_mpi_awb_sensor_reg_callback :AWB回调算法。

开发流程

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等。具体请参考《应用开发指南 (C&C++)》

    • cmos_get_isp_black_level

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

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