---
title: hi_isp_ae_exp_func
description: "定义AE回调函数结构体。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/ispdevug/ispdevapi_0138.html
sourcePath: /source/zh/canncommercial/900/others/ispdevug/ispdevapi_0138.html
indexId: 9ec74b4f3bd81214aaf65c63919442875e280b5c042ce38ccd898ea60e2b0ea365
---
# hi_isp_ae_exp_func

#### 说明

定义AE回调函数结构体。


#### 定义

```
typedef struct {
hi_s32
(*pfn_ae_init)(
hi_s32
handle, const
hi_isp_ae_param
*ae_param);
hi_s32
(*pfn_ae_run)(
hi_s32
handle,
const
hi_isp_ae_info
*ae_info,
hi_isp_ae_result
*ae_result,
hi_s32
reserved);
hi_s32
(*pfn_ae_ctrl)(
hi_s32
handle,
hi_u32
cmd, hi_void *value);
hi_s32
(*pfn_ae_exit)(
hi_s32
handle);
} hi_isp_ae_exp_func;
```


#### 成员

| 成员名称 | 描述 |
| --- | --- |
| pfn\_ae\_init | 初始化AE的回调函数指针。 |
| pfn\_ae\_run | 运行AE的回调函数指针。 |
| pfn\_ae\_ctrl | 控制AE内部状态的回调函数指针。 cmd值需参见hi\_isp\_ctrl\_cmd。 |
| pfn\_ae\_exit | 销毁AE的回调函数指针。 |


#### 注意事项

- 调用hi_mpi_isp_init时将调用pfn_ae_init回调函数，以初始化AE算法库。
- 调用hi_mpi_isp_run时将调用pfn_ae_run回调函数，以运行AE算法库，计算得到sensor的曝光时间和增益、ISP的数字增益。
- 设计思路中，算法库实现ctrl接口用以改变内部运行状态，ctrl接口提供一个参数传输命令，提供一个VOID类型的指针传输数据。ctrl接口一方面以回调函数指针的形式注册给ISP库，ISP控制单元隐式调用一些命令控制算法库内部运行状态，另一方面，以算法库的用户接口的形式，从而用户可以改变算法库内部运行状态。示例：

```
hi_s32 ae_ctrl_cmd(hi_s32 handle,
hi_u32
cmd, hi_void *value)
{
ae_check_pointer_return(value);
switch (cmd) {
case HI_ISP_WDR_MODE_SET:
……
break;
……
}
return HI_SUCCESS;
}
```


  运行时ISP控制单元会隐式调用pfn_ae_ctrl回调函数，通知AE算法库切换WDR和线性模式、设置FPS、通知配置sensor。

  当前Firmware定义的ctrl命令详见hi_isp_ctrl_cmd。

- 调用hi_mpi_isp_exit时将调用pfn_ae_exit回调函数，以销毁AE算法库。
- 一个算法库支持初始化和运行多个实例，参数handle以区分不同的算法库实例。如果需要支持多个实例，可以用不同的alg_lib.id多次注册算法库。例如：

```
hi_isp_3a_alg_lib ae_lib;
ae_lib.id = 0;
hi_vi_pipe vi_pipe = 0;
strncpy(ae_lib.lib_name, HI_AE_LIB_NAME, sizeof(HI_AE_LIB_NAME));
hi_mpi_ae_register(vi_pipe,&ae_lib);
ae_lib.id = 1;
hi_mpi_ae_register(vi_pipe,&ae_lib);
```
