下载
中文
注册

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);