---
title: 开发ISP基本功能
description: "本章节涉及Sensor部分，请仔细阅读Sensor的Datasheet，或联系Sensor原厂工程师。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/ispdevug/ispdevug_0017.html
sourcePath: /source/zh/canncommercial/900/others/ispdevug/ispdevug_0017.html
indexId: 5c43df2bdbcdc834431946cd753e2584ee390caabfe158b731385c206559694d64
---
# 开发ISP基本功能

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

结构体说明请参考《应用开发 (C&C++)(https://www.hiascend.com/document/detail/zh/canncommercial/900/programug/acldevg/aclcppdevg_000006.html)》及本手册中的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++)(https://www.hiascend.com/document/detail/zh/canncommercial/900/programug/acldevg/aclcppdevg_000006.html)》。


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

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