---
title: hi_mpi_isp_query_exposure_info
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/latest/others/ispdevug/ispdevapi_0174.html
sourcePath: /source/zh/CANNCommunityEdition/920beta1/others/ispdevug/ispdevapi_0174.html
indexId: cfb738c0b712c39cd9861d6f61921ed029e77acd946ec9030758798d86e9ef8d76
---
# hi_mpi_isp_query_exposure_info

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Ascend 950PR / Ascend 950DT | ☓ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | ☓ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | ☓ |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | ☓ |
| Atlas 训练系列产品 | ☓ |


#### 功能说明

获取AE内部状态信息，包括全局 5 段直方图、1024 段直方图和平均亮度等统计信息，同时还可获取AE运行状态中的曝光时间、增益、曝光量和实际生效的AE route等信息。


- 调用该接口需要确保系统已经运行起来并且统计信息已经生成；当系统刚运行起来第一帧，AE内部还没有统计信息时，调用该接口统计信息会返回全 0，这时候系统内存是足够的。
- 手动模式下，实际生效的again、dgain等其他值可能和hi_mpi_set_exposure_attr存在一定偏差，和具体sensor相关。

#### 函数原型

```
hi_s32
hi_mpi_isp_query_exposure_info(
hi_vi_pipe
vi_pipe,
hi_isp_exp_info
*exp_info)
```


#### 参数说明

| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| vi\_pipe | 输入 | VI PIPE号。 取值范围：[0, 12)。 |
| exp\_info | 输出 | 曝光内部状态信息结构体指针。 |


#### 返回值说明

- 0：成功
- 非0：失败，参见  ISP返回码
。


#### 约束说明

- 获取的曝光时间以微秒(us)为单位，获取的sensor模拟增益、sensor数字增益和ISP数字增益以倍数为单位，精度是10bit。
- 获取的曝光量=(曝光时间 * 曝光增益)，未考虑光圈状态，其中曝光时间以行数为单位，曝光增益包括sensor模拟增益、sensor数字增益和ISP数字增益，以倍数为单位，6bit小数精度。若该值的精度不足以满足需求，可以根据上面高精度的曝光时间(us)和增益(10bit小数精度)重新计算一个曝光量。
- 可通过查询hist_error来获取AE是否稳定的信息，若hist_error的绝对值小于曝光容忍偏差值，意味着当前AE不会动作。
- 通过该接口获取的AE route与Proc信息中的AE route都是实际生效的值。只不过该接口的节点曝光时间以us为单位，而Proc信息中的曝光时间以行数为单位；该接口的光圈分量为F值大小，取值范围为[0,10]，而Proc信息中的光圈分量为F值等效增益，大小为(1<<F值)。扩展AE route以及短帧AE route和短帧扩展AE route也是同样的对应关系。


#### 调用示例

```
hi_vi_pipe vi_pipe = 0;
hi_isp_exp_info exp_info;
hi_mpi_isp_query_exposure_info(vi_pipe, &exp_info);
printf("Sensor exposure time: %d\n",exp_info.exp_time);
printf("Analog Gain: %d\n",exp_info.a_gain);
printf("Digital Gain: %d\n",exp_info.d_gain);
printf("ISP Gain: %d\n",exp_info.isp_d_gain);
printf("Exposure: %d\n",exp_info.exposure);
printf("Average Luminance: %d\n",exp_info.ave_lum);
printf("Hist error: %d\n",exp_info.hist_error);
exp_info.exposure_is_max? printf("Exposure is MAX!\n"):printf("Exposure is NOT MAX!\n");
for(i = 0; i < 1024; i++)
{
printf("Hist1024Value[%d]: %d\n",i, exp_info.ae_hist1024_value[i]);
}
```
