6. AF

6.1. 概述

CVI AF 模块实现的功能是: 根据硬件统计信息模块输出的图像清晰度值 FV (Focus Value),通过自动对焦算法找到最佳对焦位置,并控制对焦马达移动到该位置,以获得最清晰的图像。

AF 算法采用三段式对焦搜索策略:首先确定对焦方向,然后以较大步长进行粗搜索找到 FV 峰值附近区域,最后以小步长进行精确定位。同时支持追焦(变焦后自动重新对焦)、实时追焦(检测画面变化自动重新对焦)、齿隙补偿等功能。

AF 模块的工作需要马达驱动的支持,客户需实现马达控制回调函数并注册到 AF 模块中。

6.2. 重要概念

  • 清晰度值(FV, Focus Value):通过分析图像的高频分量来表征图像清晰度。图像越清晰,FV 值越大。

  • 对焦搜索三阶段:AF 算法将对焦过程分为三个阶段——初始步长搜索(InitStep)、粗搜索(FindStep)、精定位(LocateStep)。

  • 追焦(Chasing Focus):当镜头变焦导致对焦位置偏移时,根据 Zoom-Focus 查找表自动调整对焦位置以恢复清晰图像。

  • 实时追焦(Real-Time Focus):通过持续监测 FV 值和亮度变化,在检测到画面变化时自动触发重新对焦。

  • 齿隙补偿(Backlash):马达正反转切换时存在机械间隙,AF 算法通过反向预走一定步长来消除该间隙的影响。

  • 变焦对焦追踪表(Zoom-Focus Table):记录不同变焦位置对应的最佳对焦位置范围,共 9 个采样点,用于变焦时快速估算对焦位置。

  • VCM(Voice Coil Motor):音圈马达,通过电流驱动镜头移动,无机械齿隙。

  • 步进马达(Stepper Motor):通过步进驱动的马达,存在机械齿隙需补偿。

6.3. 功能描述

AF 模块主要由 ISP 硬件统计信息模块和 AF 控制算法两部分组成。

ISP 硬件统计信息模块负责对输入图像进行滤波处理并统计每个区块的高频分量值,提供 H0、H1、V0 三种滤波器的统计结果以及高亮点计数(HlCnt)。

AF 控制算法采用有限状态机实现,主要流程包括:马达归位初始化、触发对焦、方向检测、粗搜索、精定位、对焦完成。此外还支持追焦(Chasing Focus)、实时对焦(Real-Time Focus)以及马达方向切换时的齿隙补偿。

6.4. API 参考

6.4.1. AF 库接口

所有 AF 库接口都只是针对 CVI AF 库,如果客户自己实现 AF 库,不需要关注这些接口,且无法使用这些接口。

6.4.1.1. CVI_AF_Register

【描述】

向 ISP 注册 AF 库。

【语法】

CVI_S32 CVI_AF_Register(VI_PIPE ViPipe, ALG_LIB_S *pstAfLib);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstAfLib

AF 算法库结构体指针

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.4.1.2. CVI_AF_UnRegister

【描述】

向 ISP 反注册 AF 库。

【语法】

CVI_S32 CVI_AF_UnRegister(VI_PIPE ViPipe, ALG_LIB_S *pstAfLib);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstAfLib

AF 算法库结构体指针

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.4.1.3. CVI_AF_MOTOR_Register

【描述】

注册马达控制回调函数。客户需要实现马达控制相关的回调函数,包括马达初始化、正转、反转、速度设置、镜头信息获取等。

【语法】

CVI_S32 CVI_AF_MOTOR_Register(VI_PIPE ViPipe, ISP_AF_MOTOR_FUNC_S *pstAfMotorCb);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstAfMotorCb

马达控制回调函数结构体指针

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 该函数必须在调用 AF 算法之前注册。

  • 客户需实现 ISP_AF_MOTOR_FUNC_S 中的所有回调函数,包括 pfn_af_motor_init、pfn_af_motor_deinit、pfn_af_set_focus_in、pfn_af_set_focus_out、pfn_af_set_focus_speed、pfn_af_set_zoom_in、pfn_af_set_zoom_out、pfn_af_set_zoom_speed、pfn_af_set_zoom_focus、pfn_af_get_len_info。

  • pfn_af_get_len_info 回调需正确返回镜头的硬件特性信息,包括对焦范围、变焦范围、齿隙值、最大速度等。

【相关主题】

6.4.1.4. CVI_AF_MOTOR_UnRegister

【描述】

反注册马达控制回调函数。

【语法】

CVI_S32 CVI_AF_MOTOR_UnRegister(VI_PIPE ViPipe, ISP_AF_MOTOR_FUNC_S *pstAfMotorCb);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstAfMotorCb

马达控制回调函数结构体指针

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.4.2. AF 控制模块

6.4.2.1. CVI_ISP_AFAutoFocus

【描述】

触发自动对焦。调用此函数后 AF 算法开始执行三段式对焦搜索(方向检测 → 粗搜索 → 精定位)。

【语法】

CVI_S32 CVI_ISP_AFAutoFocus(VI_PIPE ViPipe);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 调用前需确保 AF 已正确初始化并注册了马达回调。

  • 对焦过程中 AE 会被暂时挂起(锁定曝光),对焦完成后自动恢复。

【相关主题】

6.4.2.2. CVI_ISP_AFGetFv

【描述】

获取当前帧的 AF 清晰度值(Focus Value)。FV 值越大表示图像越清晰。

【语法】

CVI_S32 CVI_ISP_AFGetFv(VI_PIPE ViPipe, CVI_U32 *pFv);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pFv

指向 FV 值的指针

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • FV 值需要在垂直消隐期间获取,建议配合 CVI_ISP_GetVDTimeOut 使用以获取同步的统计值。

【相关主题】

6.4.2.3. CVI_ISP_SetAFAttr

【描述】

设置 AF 算法控制参数。包括使能开关、工作模式、搜索步长、追焦配置、比率阈值等。

【语法】

CVI_S32 CVI_ISP_SetAFAttr(VI_PIPE ViPipe, const ISP_FOCUS_ATTR_S *pstFocusAttr);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstFocusAttr

AF 属性结构体指针

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 修改 AF 属性时若 AF 正在运行,新参数将在当前对焦周期结束后生效。

  • u8RunInterval 取值范围为 [0x1, 0x10]。

  • 三个步长参数(u8InitStep/u8FindStep/u8LocateStep)取值范围均为 [0x1, 0xFF]。

  • 比率参数(DiffRatio 系列)基于 AF_RATIO_BASE (1024) 计算。

【相关主题】

6.4.2.4. CVI_ISP_GetAFAttr

【描述】

获取当前 AF 算法控制参数。

【语法】

CVI_S32 CVI_ISP_GetAFAttr(VI_PIPE ViPipe, ISP_FOCUS_ATTR_S *pstFocusAttr);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstFocusAttr

AF 属性结构体指针

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.4.2.5. CVI_ISP_SetAFVcmAttr

【描述】

设置 VCM 镜头标定属性,包括无限远位置、最近对焦位置和中点位置。

【语法】

CVI_S32 CVI_ISP_SetAFVcmAttr(VI_PIPE ViPipe, const ISP_AF_VCM_ATTR_S *pstVCMAttr);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstVCMAttr

VCM 属性结构体指针

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 这些值需要通过实际标定获得。建议使用 AF_ENTER_CAILB_FLOW 标定工具中的 AF_RANGE_OFFSET_CALIB 模式获取。

  • u32InfinitePos 表示无限远(远处物体清晰对焦)时的镜头位置。

  • u32MacroPos 表示最近对焦(微距)时的镜头位置。

  • u32MediumPos 表示中间位置的镜头位置。

【相关主题】

6.4.2.6. CVI_ISP_GetAFVcmAttr

【描述】

获取 VCM 镜头标定属性。

【语法】

CVI_S32 CVI_ISP_GetAFVcmAttr(VI_PIPE ViPipe, ISP_AF_VCM_ATTR_S *pstVCMAttr);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstVCMAttr

VCM 属性结构体指针

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.4.2.7. CVI_ISP_SetAFStatisticsConfig

【描述】

设置 AF 硬件统计信息配置,包括滤波器系数、窗口大小、裁剪区域、权重表等。

【语法】

CVI_S32 CVI_ISP_SetAFStatisticsConfig(VI_PIPE ViPipe, const ISP_FOCUS_STATISTICS_CFG_S *pstAfStatCfg);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstAfStatCfg

AF 统计信息配置结构体指针

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 统计区域大小建议设置为 17(水平)x 15(垂直)。

  • 裁剪区域的 X 坐标范围为 [0x8, 图像宽度-8],Y 坐标范围为 [0x2, 图像高度-2]。

  • 权重表大小为 15 x 17,每个权重值取值范围为 [0x0, 0xF]。

  • FIR 滤波器系数需要根据镜头光学特性进行调整。参考配置可参见 3A 开发用户指南 中的 FV 计算参考代码。

【相关主题】

6.4.2.8. CVI_ISP_GetAFStatisticsConfig

【描述】

获取 AF 硬件统计信息配置。

【语法】

CVI_S32 CVI_ISP_GetAFStatisticsConfig(VI_PIPE ViPipe, ISP_FOCUS_STATISTICS_CFG_S *pstAfStatCfg);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstAfStatCfg

AF 统计信息配置结构体指针

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.4.2.9. CVI_ISP_SetAFZoneFocusAttr

【描述】

设置 ROI 对焦区域属性。可指定对焦区域的坐标、大小和权重,用于局部区域对焦。

【语法】

CVI_S32 CVI_ISP_SetAFZoneFocusAttr(VI_PIPE ViPipe, const ISP_AF_ZONE_FOCUS_ATTR_S *pstAfZoneFocusAttr);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstAfZoneFocusAttr

ROI 对焦区域属性结构体指针

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • enable 为 CVI_FALSE 时使用全局权重表进行对焦。

  • u8ZoneWeight 取值范围为 [0, 255]。

【相关主题】

6.4.2.10. CVI_ISP_GetAFZoneFocusAttr

【描述】

获取 ROI 对焦区域属性。

【语法】

CVI_S32 CVI_ISP_GetAFZoneFocusAttr(VI_PIPE ViPipe, ISP_AF_ZONE_FOCUS_ATTR_S *pstAfZoneFocusAttr);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstAfZoneFocusAttr

ROI 对焦区域属性结构体指针

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.4.2.11. CVI_ISP_AFQueryFocusInfo

【描述】

查询 AF 算法运行状态信息,包括当前对焦状态、FV 值、马达位置和速度等。

【语法】

CVI_S32 CVI_ISP_AFQueryFocusInfo(VI_PIPE ViPipe, ISP_FOCUS_Q_INFO_S *pstFocusQInfo);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

pstFocusQInfo

对焦状态信息结构体指针

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 可用于调试和监控 AF 算法运行状态。

  • eStatus 字段反映当前 AF 状态机的状态。

【相关主题】

6.4.2.12. CVI_ISP_AFSetFocus

【描述】

设置对焦马达移动方向和步长,用于手动对焦模式。

【语法】

CVI_S32 CVI_ISP_AFSetFocus(VI_PIPE ViPipe, CVI_BOOL direct, CVI_U16 step);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

direct

移动方向,CVI_TRUE 为 FAR(远),CVI_FALSE 为 NEAR(近)

输入

step

移动步长

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 该函数在手动对焦模式下使用,自动对焦过程中不建议调用。

【相关主题】

6.4.2.13. CVI_ISP_AFSetFocusSpeed

【描述】

设置对焦马达移动速度。

【语法】

CVI_S32 CVI_ISP_AFSetFocusSpeed(VI_PIPE ViPipe, ISP_AF_MOTOR_SPEED_E eSpeed);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

eSpeed

马达速度: 4X / 2X / 1X / 半速

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.4.2.14. CVI_ISP_AFSetZoom

【描述】

设置变焦马达移动方向和步长。

【语法】

CVI_S32 CVI_ISP_AFSetZoom(VI_PIPE ViPipe, CVI_BOOL direct, CVI_U16 step);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

direct

移动方向

输入

step

移动步长

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 变焦操作可能触发追焦(若 bChasingFocus 已使能)。

【相关主题】

6.4.2.15. CVI_ISP_AFSetZoomSpeed

【描述】

设置变焦马达移动速度,一般不需要设置。

【语法】

CVI_S32 CVI_ISP_AFSetZoomSpeed(VI_PIPE ViPipe, ISP_AF_MOTOR_SPEED_E eSpeed);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

eSpeed

马达速度: 4X / 2X / 1X / 半速

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_af.h

【注意】

  • 该函数一般不需要调用,使用默认速度即可。

【相关主题】

6.4.2.16. CVI_AF_GetMotorCB

【描述】

获取马达控制回调函数指针。

【语法】

ISP_AF_MOTOR_FUNC_S *CVI_AF_GetMotorCB(VI_PIPE ViPipe);

【参数】

参数名称

描述

输入/输出

ViPipe

ViPipe 号

输入

【返回值】

返回值

描述

非 NULL

马达控制回调函数指针。

NULL

失败,未注册或 ViPipe 无效。

【需求】

  • 头文件:cvi_af.h

【注意】

无。

【相关主题】

6.5. 数据类型

6.5.1. 枚举类型

6.5.1.1. AF_STATUS

【说明】

定义 AF 算法状态机状态。

【定义】

typedef enum _AF_STATUS {
    AF_NOT_INIT,
    AF_INIT_POSITION,
    AF_INIT,
    AF_TRIGGER_FOCUS,
    AF_DETECT_DIRECTION,
    AF_SERACH_BEST_POS,
    AF_LOCATE_BEST_POS,
    AF_FOCUSED,
    AF_REVERSE_DIRECTION,
    AF_CHASING_FOCUS
} AF_STATUS;

【成员】

成员名称

描述

AF_NOT_INIT

未初始化状态。

AF_INIT_POSITION

初始位置,马达归位阶段。将对焦/变焦马达移动到物理边界进行复位。

AF_INIT

空闲状态。等待对焦触发,处理外部变焦/对焦命令。

AF_TRIGGER_FOCUS

触发对焦。挂起 AE,开始对焦搜索。

AF_DETECT_DIRECTION

方向检测。移动对焦镜头并监测 FV 值趋势以确定最佳搜索方向。

AF_SERACH_BEST_POS

粗搜索。以较大步长进行对焦搜索,跟踪最大 FV 值。

AF_LOCATE_BEST_POS

精定位。以较小步长进行精细搜索,确认峰值位置。

AF_FOCUSED

对焦完成。搜索结束,恢复 AE,更新稳定 FV 值。

AF_REVERSE_DIRECTION

方向反转。处理马达方向切换时的齿隙补偿。

AF_CHASING_FOCUS

追焦。变焦后根据 Zoom-Focus 查找表快速重新寻找焦点。

【注意事项】

  • AF_STATUS 主要用于 ISP_FOCUS_Q_INFO_S 的 eStatus 字段,反映 AF 当前运行状态。

【相关数据类型及接口】

6.5.1.2. AF_DIRECTION

【说明】

定义对焦马达移动方向。

【定义】

typedef enum _AF_DIRECTION {
    AF_DIR_NEAR,
    AF_DIR_FAR,
} AF_DIRECTION;

【成员】

成员名称

描述

AF_DIR_NEAR

近处方向。马达向近距离方向移动镜头。

AF_DIR_FAR

远处方向。马达向远距离方向移动镜头。

【注意事项】

无。

【相关数据类型及接口】

6.5.1.3. AF_CHASINGFOCUS_MODE

【说明】

定义追焦模式类型。

【定义】

typedef enum _AF_CHASINGFOCUS_MODE {
    AF_CHASINGFOCUS_FAST_MODE,
    AF_CHASINGFOCUS_NORMAL_MODE,
} AF_CHASINGFOCUS_MODE;

【成员】

成员名称

描述

AF_CHASINGFOCUS_FAST_MODE

快速追焦模式。以更快的速度重新对焦,适合动态场景。

AF_CHASINGFOCUS_NORMAL_MODE

普通追焦模式。标准速度重新对焦。

【注意事项】

无。

【相关数据类型及接口】

6.5.1.4. AF_MANUAL_TYPE

【说明】

定义手动操作类型。

【定义】

typedef enum _AF_MANUAL_TYPE {
    OP_TYPE_ZOOM,
    OP_TYPE_FOCUS,
    OP_TYPE_AUTO_FOCUS,
    OP_TYPE_ZOOM_POS,
    OP_TYPE_FOCUS_POS,
    OP_TYPE_AF_BUTT
} AF_MANUAL_TYPE;

【成员】

成员名称

描述

OP_TYPE_ZOOM

手动变焦操作。

OP_TYPE_FOCUS

手动对焦操作。

OP_TYPE_AUTO_FOCUS

自动对焦操作。

OP_TYPE_ZOOM_POS

设置变焦位置。

OP_TYPE_FOCUS_POS

设置对焦位置。

OP_TYPE_AF_BUTT

边界值,表示有效类型的数量。

【注意事项】

无。

【相关数据类型及接口】

6.5.1.5. ISP_AF_MOTOR_SPEED_E

【说明】

定义 AF 马达速度等级。

【定义】

typedef enum _ISP_AF_MOTOR_SPEED_E {
    AF_MOTOR_SPEED_4X,
    AF_MOTOR_SPEED_2X,
    AF_MOTOR_SPEED_1X,
    AF_MOTOR_SPEED_HALF,
} ISP_AF_MOTOR_SPEED_E;

【成员】

成员名称

描述

AF_MOTOR_SPEED_4X

4 倍速度。最高速度等级。

AF_MOTOR_SPEED_2X

2 倍速度。

AF_MOTOR_SPEED_1X

1 倍速度。标准速度。

AF_MOTOR_SPEED_HALF

半速。最低速度等级。

【注意事项】

无。

【相关数据类型及接口】

6.5.1.6. AF_MOTOR_TYPE

【说明】

定义马达类型。

【定义】

typedef enum _AF_MOTOR_TYPE {
    AF_MOTOR_STEPPER,
    AF_MOTOR_VCM,
} AF_MOTOR_TYPE;

【成员】

成员名称

描述

AF_MOTOR_STEPPER

步进马达。通过步进驱动,存在机械齿隙需补偿。

AF_MOTOR_VCM

音圈马达(Voice Coil Motor)。通过电流驱动,无机械齿隙。

【注意事项】

  • 马达类型通过 pfn_af_get_len_info 回调中的 ISP_AF_LEN_INFO_S 返回。

  • VCM 镜头齿隙补偿为 1 帧震动补偿,步进马达需根据实际测量设置 focus_backlash。

【相关数据类型及接口】

6.5.2. 结构体类型

6.5.2.1. ISP_FOCUS_ATTR_S

【说明】

定义 AF 主配置属性。包含 AF 使能、工作模式、搜索步长、追焦配置、比率阈值、手动对焦等参数。

【定义】

typedef struct _ISP_FOCUS_ATTR_S {
    CVI_BOOL bEnable;
    CVI_U8 u8DebugMode;
    ISP_OP_TYPE_E enOpType;
    CVI_U8 u8RunInterval;
    CVI_BOOL bRealTimeFocus;
    CVI_BOOL bChasingFocus;
    CVI_BOOL bReFocus;
    CVI_BOOL bMixHlc;
    CVI_U8 u8RtFocusStableFrm;
    CVI_U16 u16RtMaxDiffFvRatio;
    CVI_U16 u16MaxDiffFvRatio;
    CVI_U16 u16MaxDiffLumaRatio;
    CVI_U16 u16DetectDiffRatio;
    CVI_U16 u16SearchDiffRatio;
    CVI_U16 u16LocalDiffRatio;
    CVI_U8 u8InitStep;
    CVI_U8 u8FindStep;
    CVI_U8 u8LocateStep;
    AF_DIRECTION enInitDir;
    CVI_U16 u16MaxRotateCnt;
    AF_CHASINGFOCUS_MODE enChasingFocusMode;
    ISP_FOCUS_MANUAL_ATTR_S stManual;
} ISP_FOCUS_ATTR_S;

【成员】

成员名称

描述

bEnable

AF 使能。为 CVI_TRUE 时使能 AF,为 CVI_FALSE 时不使能。

u8DebugMode

调试模式。用于设置 AF 调试等级。

enOpType

操作类型。自动或手动对焦模式切换。

u8RunInterval

AF 算法运行帧间隔。取值范围为 [0x1, 0x10]。

bRealTimeFocus

实时对焦使能。为 CVI_TRUE 时开启实时追焦,检测到画面变化自动重新对焦。

bChasingFocus

追焦使能。为 CVI_TRUE 时开启变焦追焦,变焦后自动根据 Zoom-Focus 查找表调整对焦位置。

bReFocus

重新对焦使能。为 CVI_TRUE 时画面变化后自动重新对焦。

bMixHlc

混合高亮点掩码使能。使用 HlCnt 信息抑制光源对 FV 值的影响。

u8RtFocusStableFrm

实时对焦稳定帧数。FV 变化持续超过此帧数后触发追焦。取值范围为 [0x1, 0xFF],默认值为 5。

u16RtMaxDiffFvRatio

实时对焦最大 FV 差异比例。基于 AF_RATIO_BASE (1024)。取值范围为 [0x400, 0x1000]。

u16MaxDiffFvRatio

最大 FV 差异比例。用于检测画面是否发生显著变化。取值范围为 [0x400, 0x4000]。

u16MaxDiffLumaRatio

最大亮度差异比例。用于亮度变化检测。取值范围为 [0x400, 0x1000]。

u16DetectDiffRatio

方向检测差异比例。用于判断方向检测阶段 FV 变化是否显著。取值范围为 [0x400, 0x1000]。

u16SearchDiffRatio

搜索差异比例。用于粗搜索阶段判断是否已越过 FV 峰值。取值范围为 [0x400, 0x1000]。

u16LocalDiffRatio

定位差异比例。用于精定位阶段确认峰值。取值范围为 [0x400, 0x1000]。

u8InitStep

初始搜索步长。对焦搜索第一阶段使用的马达移动步长。取值范围为 [0x1, 0xFF]。

u8FindStep

精确搜索步长。对焦搜索第二阶段(粗搜索)使用的马达移动步长。取值范围为 [0x1, 0xFF]。

u8LocateStep

定位步长。对焦搜索第三阶段(精定位)使用的马达移动步长。取值范围为 [0x1, 0xFF]。

enInitDir

初始搜索方向。对焦搜索开始时的马达移动方向(NEAR 或 FAR)。

u16MaxRotateCnt

最大复位次数。马达复位(归位到物理边界)的最大重试次数。取值范围为 [0x400, 0x4000]。

enChasingFocusMode

追焦模式。快速模式或普通模式。

stManual

手动对焦属性。包含手动操作类型、方向、步长和位置。

【注意事项】

  • 所有比率参数均以 AF_RATIO_BASE (1024) 为基准。例如 u16DetectDiffRatio = 1024 表示 100% 的差异阈值。

  • 三个步长参数(InitStep/FindStep/LocateStep)应根据镜头特性调整。步进马达建议 InitStep=16, FindStep=8, LocateStep=2;VCM 镜头可适当减小。

【相关数据类型及接口】

6.5.2.2. ISP_FOCUS_Q_INFO_S

【说明】

定义 AF 查询信息/运行时状态。用于获取 AF 当前运行状态、FV 值、马达位置等信息。

【定义】

typedef struct _ISP_AF_Q_INFO_S {
    AF_STATUS eStatus;
    CVI_U32 u32PreFv;
    CVI_U32 u32CurFv;
    CVI_U32 u32MaxFv;
    CVI_U8 u8PreLuma;
    CVI_U8 u8CurLuma;
    AF_DIRECTION eZoomDir;
    CVI_U16 u16ZoomStep;
    CVI_U16 u16ZoomPos;
    AF_DIRECTION eFocusDir;
    CVI_U16 u16FocusStep;
    CVI_U16 u16FocusPos;
    CVI_U16 u16MaxFvPos;
    CVI_U16 u16ZoomMinPos;
    CVI_U16 u16ZoomMaxPos;
    CVI_U16 u16FocusMinPos;
    CVI_U16 u16FocusMaxPos;
    ISP_AF_MOTOR_SPEED_E eZoomSpeed;
    ISP_AF_MOTOR_SPEED_E eFocusSpeed;
} ISP_FOCUS_Q_INFO_S;

【成员】

成员名称

描述

eStatus

当前 AF 状态。反映 AF_STATUS 枚举值。

u32PreFv

上一帧 FV 值。

u32CurFv

当前帧 FV 值。

u32MaxFv

搜索过程中记录的最大 FV 值。

u8PreLuma

上一帧平均亮度。

u8CurLuma

当前帧平均亮度。

eZoomDir

当前变焦移动方向。

u16ZoomStep

当前变焦步长。

u16ZoomPos

当前变焦位置。

eFocusDir

当前对焦移动方向。

u16FocusStep

当前对焦步长。

u16FocusPos

当前对焦位置。

u16MaxFvPos

最大 FV 值对应的对焦位置(最佳对焦点)。

u16ZoomMinPos

变焦最小位置。

u16ZoomMaxPos

变焦最大位置。

u16FocusMinPos

对焦最小位置。

u16FocusMaxPos

对焦最大位置。

eZoomSpeed

当前变焦马达速度。

eFocusSpeed

当前对焦马达速度。

【注意事项】

无。

【相关数据类型及接口】

6.5.2.3. ISP_FOCUS_MANUAL_ATTR_S

【说明】

定义手动对焦属性。用于手动对焦模式下的参数配置。

【定义】

typedef struct _ISP_FOCUS_MANUAL_ATTR_S {
    AF_MANUAL_TYPE enManualOpType;
    AF_DIRECTION enManualDir;
    CVI_U16 u16ManualStep;
    CVI_U16 u16ManualPos;
} ISP_FOCUS_MANUAL_ATTR_S;

【成员】

成员名称

描述

enManualOpType

手动操作类型。变焦、对焦、自动对焦等。取值范围参见 AF_MANUAL_TYPE

enManualDir

手动操作方向。NEAR 或 FAR。取值范围参见 AF_DIRECTION

u16ManualStep

手动操作步长。取值范围为 [0x0, 0x400]。

u16ManualPos

手动操作目标位置。取值范围为 [0x0, 0x8000]。

【注意事项】

无。

【相关数据类型及接口】

6.5.2.4. ISP_AF_VCM_ATTR_S

【说明】

定义 VCM 镜头标定属性。用于记录镜头的无限远位置、最近对焦位置和中点位置。

【定义】

typedef struct _ISP_AF_VCM_ATTR_S {
    CVI_U32 u32InfinitePos;
    CVI_U32 u32MacroPos;
    CVI_U32 u32MediumPos;
} ISP_AF_VCM_ATTR_S;

【成员】

成员名称

描述

u32InfinitePos

无限远位置。远处物体清晰对焦时的镜头位置,单位为步(step)。

u32MacroPos

最近对焦位置。微距拍摄时的镜头位置,单位为步(step)。

u32MediumPos

中点位置。无限远和最近对焦之间的中间位置,单位为步(step)。

【注意事项】

  • 这些值需要通过实际标定获得。建议使用标定工具 AF_ENTER_CAILB_FLOW 中的 AF_RANGE_OFFSET_CALIB 模式。

  • 标定完成后,AF 算法利用这些值确定对焦搜索的合理范围。

【相关数据类型及接口】

6.5.2.5. ISP_AF_ZONE_FOCUS_ATTR_S

【说明】

定义 ROI 对焦区域属性。用于指定局部对焦区域的坐标、大小和权重。

【定义】

typedef struct _ISP_AF_ZONE_FOCUS_ATTR_S {
    CVI_BOOL enable;
    CVI_U8 u8ZoneWeight;
    CVI_U32 u32ZoneX;
    CVI_U32 u32ZoneY;
    CVI_U32 u32ZoneWidth;
    CVI_U32 u32ZoneHeight;
} ISP_AF_ZONE_FOCUS_ATTR_S;

【成员】

成员名称

描述

enable

使能开关。为 CVI_TRUE 时启用 ROI 对焦区域,为 CVI_FALSE 时使用全局权重表。

u8ZoneWeight

区域权重。取值范围为 [0, 255]。

u32ZoneX

区域 X 坐标(左上角)。

u32ZoneY

区域 Y 坐标(左上角)。

u32ZoneWidth

区域宽度。

u32ZoneHeight

区域高度。

【注意事项】

  • ROI 对焦区域可用于实现点击对焦等功能,用户指定画面中某区域后 AF 将优先对该区域进行对焦。

【相关数据类型及接口】

6.5.2.6. ISP_AF_ZOOM_FOCUS_TAB

【说明】

定义 Zoom-Focus 查找表单个表项。记录特定变焦位置对应的对焦位置范围。

【定义】

typedef struct _ISP_AF_ZOOM_FOCUS_TAB {
    CVI_U32 zoom_pos;
    CVI_U32 focus_pos_min;
    CVI_U32 focus_pos_max;
} ISP_AF_ZOOM_FOCUS_TAB;

【成员】

成员名称

描述

zoom_pos

变焦位置。

focus_pos_min

该变焦位置下对焦位置的最小值。

focus_pos_max

该变焦位置下对焦位置的最大值。

【注意事项】

  • Zoom-Focus 表共 ZOOM_FOCUS_TAB_SIZE (9) 个表项,覆盖整个变焦范围。

  • 该表通过标定工具 AF_ZOOM_FOCUS_TABLE_CALIB 模式生成,在不同变焦位置记录最佳对焦位置范围。

  • 追焦时使用线性插值在表项之间估算对焦位置。

【相关数据类型及接口】

6.5.2.7. ISP_AF_LEN_INFO_S

【说明】

定义镜头硬件特性信息。通过马达驱动回调 pfn_af_get_len_info 提供,包含镜头的机械和电气特性参数。

【定义】

typedef struct _ISP_AF_LEN_INFO_S {
    ISP_AF_ZOOM_FOCUS_TAB zoom_focus_table[ZOOM_FOCUS_TAB_SIZE];
    CVI_U32 focus_range;
    CVI_U32 zoom_range;
    CVI_U32 focus_offset;
    CVI_U32 zoom_offset;
    CVI_U32 focus_backlash;
    CVI_U32 zoom_backlash;
    CVI_U32 focus_max_speed;
    CVI_U32 zoom_max_speed;
    CVI_U32 focus_time_cost_one_step;
    CVI_U32 zoom_time_cost_one_step;
    CVI_U32 focus_max_step;
    CVI_U32 zoom_max_step;
    AF_MOTOR_TYPE motor_type;
} ISP_AF_LEN_INFO_S;

【成员】

成员名称

描述

zoom_focus_table

Zoom-Focus 查找表。共 9 个表项,记录变焦位置与对焦位置范围的映射关系。

focus_range

对焦移动范围,单位为步(step)。

zoom_range

变焦移动范围,单位为步(step)。

focus_offset

对焦偏移量,单位为步(step)。表示镜头到达边界后仍有模糊的距离。

zoom_offset

变焦偏移量,单位为步(step)。

focus_backlash

对焦齿隙值,硬件限制,单位为步(step)。马达反向运动时需预走的补偿步长。

zoom_backlash

变焦齿隙值,硬件限制,单位为步(step)。

focus_max_speed

对焦最大速度。该值作为 MOTOR_SPEED_4X 的实际速度。

zoom_max_speed

变焦最大速度。该值作为 MOTOR_SPEED_4X 的实际速度。

focus_time_cost_one_step

对焦单步时间成本,单位为微秒(us)。

zoom_time_cost_one_step

变焦单步时间成本,单位为微秒(us)。

focus_max_step

对焦最大步数。

zoom_max_step

变焦最大步数。

motor_type

马达类型。步进马达或 VCM。参见 AF_MOTOR_TYPE

【注意事项】

  • 该结构体由马达驱动回调函数 pfn_af_get_len_info 填充,客户需正确实现该回调。

  • focus_backlash 和 zoom_backlash 可通过标定工具 AF_BACK_LASH_CALIB 模式测量。

  • focus_time_cost_one_step 和 zoom_time_cost_one_step 可通过标定工具 AF_ONE_STEP_TIME_COST_CALIB 模式测量。

【相关数据类型及接口】

6.5.2.8. ISP_AF_MOTOR_FUNC_S

【说明】

定义马达控制回调函数集合。客户需实现所有回调函数以驱动对焦/变焦马达。

【定义】

typedef struct _ISP_AF_MOTOR_CTL_FUNC_S {
    CVI_S32 (*pfn_af_motor_init)(VI_PIPE ViPipe);
    CVI_S32 (*pfn_af_motor_deinit)(VI_PIPE ViPipe);
    CVI_S32 (*pfn_af_set_zoom_in)(VI_PIPE ViPipe, CVI_U8 step);
    CVI_S32 (*pfn_af_set_zoom_out)(VI_PIPE ViPipe, CVI_U8 step);
    CVI_S32 (*pfn_af_set_zoom_speed)(VI_PIPE ViPipe, CVI_U8 speed);
    CVI_S32 (*pfn_af_set_focus_in)(VI_PIPE ViPipe, CVI_U8 step);
    CVI_S32 (*pfn_af_set_focus_out)(VI_PIPE ViPipe, CVI_U8 step);
    CVI_S32 (*pfn_af_set_focus_speed)(VI_PIPE ViPipe, CVI_U8 speed);
    CVI_S32 (*pfn_af_set_zoom_focus)(VI_PIPE ViPipe, AF_DIRECTION eDirz, AF_DIRECTION eDirf, CVI_U8 zoomStep, CVI_U8 focusStep);
    CVI_S32 (*pfn_af_get_len_info)(VI_PIPE ViPipe, ISP_AF_LEN_INFO_S *info);
} ISP_AF_MOTOR_FUNC_S;

【成员】

成员名称

描述

pfn_af_motor_init

马达初始化回调。用于初始化马达硬件和状态。

pfn_af_motor_deinit

马达反初始化回调。用于释放马达资源。

pfn_af_set_zoom_in

设置变焦马达向内移动指定步长。

pfn_af_set_zoom_out

设置变焦马达向外移动指定步长。

pfn_af_set_zoom_speed

设置变焦马达速度等级。

pfn_af_set_focus_in

设置对焦马达向内移动指定步长。

pfn_af_set_focus_out

设置对焦马达向外移动指定步长。

pfn_af_set_focus_speed

设置对焦马达速度等级。

pfn_af_set_zoom_focus

同时设置变焦和对焦马达的移动方向和步长。用于实现变焦和对焦同时运动。

pfn_af_get_len_info

获取镜头硬件特性信息。需填充 ISP_AF_LEN_INFO_S 结构体。

【注意事项】

  • 所有回调函数都必须正确实现,否则 AF 算法无法正常工作。

  • 通过 CVI_AF_MOTOR_Register 注册到 AF 模块。

  • pfn_af_set_zoom_focus 回调用于实现变焦和对焦的联动,可在变焦过程中同时调整对焦位置。

【相关数据类型及接口】

6.5.2.9. ISP_FOCUS_STATISTICS_CFG_S

【说明】

定义 AF 硬件统计信息配置。包含滤波器配置、窗口大小、权重表等参数。

【定义】

#define AF_WEIGHT_ZONE_ROW    15
#define AF_WEIGHT_ZONE_COLUMN 17
#define FIR_H_GAIN_NUM (5)
#define FIR_V_GAIN_NUM (3)

typedef struct _ISP_FOCUS_STATISTICS_CFG_S {
    ISP_AF_CFG_S stConfig;
    ISP_AF_H_PARAM_S stHParam_FIR0;
    ISP_AF_H_PARAM_S stHParam_FIR1;
    ISP_AF_V_PARAM_S stVParam_FIR;
    CVI_U8 au8Weight[AF_WEIGHT_ZONE_ROW][AF_WEIGHT_ZONE_COLUMN];
} ISP_FOCUS_STATISTICS_CFG_S;

【成员】

成员名称

描述

stConfig

AF 基础配置。包含使能、窗口大小、低通滤波系数、裁剪区域、高通滤波 coting 值等。参见 ISP_AF_CFG_S

stHParam_FIR0

水平方向 FIR 滤波器 0 参数(高通滤波器)。5 抽头系数。参见 ISP_AF_H_PARAM_S

stHParam_FIR1

水平方向 FIR 滤波器 1 参数(高通滤波器)。5 抽头系数。参见 ISP_AF_H_PARAM_S

stVParam_FIR

垂直方向 FIR 滤波器参数(高通滤波器)。3 抽头系数。参见 ISP_AF_V_PARAM_S

au8Weight

区块权重表。大小为 15 x 17,每个权重取值范围为 [0x0, 0xF]。用于对不同区域的 FV 值进行加权。

【注意事项】

  • 统计区域大小建议设置为 17(水平)x 15(垂直),与权重表大小一致。

  • FIR 滤波器系数需要根据镜头光学特性调整。

  • 参考配置可参见 3A 开发用户指南 中的 FV 计算参考代码。

【相关数据类型及接口】

  • CVI_ISP_SetAFStatisticsConfig

  • CVI_ISP_GetAFStatisticsConfig

  • ISP_AF_CFG_S

6.5.2.10. ISP_AF_CFG_S

【说明】

定义 AF 统计基础配置。包含使能、窗口大小、滤波配置、裁剪区域、高亮点阈值等。

【定义】

typedef struct _ISP_AF_CFG_S {
    CVI_BOOL bEnable;
    CVI_U16 u16Hwnd;
    CVI_U16 u16Vwnd;
    CVI_U8 u8HFltShift;
    CVI_S8 s8HVFltLpCoeff[FIR_H_GAIN_NUM];
    ISP_AF_RAW_CFG_S stRawCfg;
    ISP_AF_PRE_FILTER_CFG_S stPreFltCfg;
    ISP_AF_CROP_S stCrop;
    CVI_U8 H0FltCoring;
    CVI_U8 H1FltCoring;
    CVI_U8 V0FltCoring;
    CVI_U16 u16HighLumaTh;
    CVI_U8 u8ThLow;
    CVI_U8 u8ThHigh;
    CVI_U8 u8GainLow;
    CVI_U8 u8GainHigh;
    CVI_U8 u8SlopLow;
    CVI_U8 u8SlopHigh;
} ISP_AF_CFG_S;

【成员】

成员名称

描述

bEnable

使能开关。为 CVI_TRUE 时使能 AF 统计。

u16Hwnd

水平方向区块窗口数量。取值范围为 [0x2, 0x11](即 2~17)。

u16Vwnd

垂直方向区块窗口数量。取值范围为 [0x2, 0xF](即 2~15)。

u8HFltShift

水平滤波移位量。取值范围为 [0x0, 0xF]。

s8HVFltLpCoeff

水平/垂直低通 FIR 滤波系数。5 抽头,取值范围为 [0x0, 0x1F]。

stRawCfg

RAW 域前处理配置。包含 PreGamma 使能和 256 项 Gamma 查找表。

stPreFltCfg

预滤波配置。用于消除椒盐噪声对统计值的影响。

stCrop

图像裁剪配置。用于限定 AF 统计的区域范围。参见 ISP_AF_CROP_S

H0FltCoring

H0 滤波器 Coring 值。用于去除小幅度噪声。取值范围为 [0x0, 0xFF]。

H1FltCoring

H1 滤波器 Coring 值。取值范围为 [0x0, 0xFF]。

V0FltCoring

V0 滤波器 Coring 值。取值范围为 [0x0, 0xFF]。

u16HighLumaTh

高亮点亮度阈值。用于抑制光源对 FV 值的影响。取值范围为 [0x0, 0xFF]。

u8ThLow

低阈值。用于增益和斜率计算。

u8ThHigh

高阈值。用于增益和斜率计算。

u8GainLow

低增益值。取值范围为 [0x0, 0xFE]。

u8GainHigh

高增益值。取值范围为 [0x0, 0xFE]。

u8SlopLow

低斜率值。取值范围为 [0x0, 0xF]。

u8SlopHigh

高斜率值。取值范围为 [0x0, 0xF]。

【注意事项】

  • AF 窗口 X 区域必须在 [0x8 ~ 图像 xsize - 8] 之间,Y 区域必须在 [0x2 ~ 图像 ysize - 2] 之间。

【相关数据类型及接口】

6.5.2.11. ISP_AF_CROP_S

【说明】

定义 AF 统计信息输入图像裁剪配置。用户可通过 X、Y、W、H 来限定 AF 统计区域。

【定义】

typedef struct _ISP_AF_CROP_S {
    CVI_BOOL bEnable;
    CVI_U16 u16X;
    CVI_U16 u16Y;
    CVI_U16 u16W;
    CVI_U16 u16H;
} ISP_AF_CROP_S;

【成员】

成员名称

描述

bEnable

使能开关。为 CVI_TRUE 时启用裁剪。

u16X

裁剪区域 X 起始坐标。取值范围为 [0x8, 0xFFF]。

u16Y

裁剪区域 Y 起始坐标。取值范围为 [0x2, 0xFFF]。

u16W

裁剪区域宽度。取值范围为 [0x110, 0xFFF]。

u16H

裁剪区域高度。取值范围为 [0xF0, 0xFFF]。

【注意事项】

  • X 坐标最小值为 0x8,Y 坐标最小值为 0x2,这是硬件限制。

  • 裁剪区域不能超出图像有效区域。

【相关数据类型及接口】

6.5.2.12. ISP_FOCUS_ZONE_S

【说明】

定义单个区块的 AF 统计信息输出。包含高通滤波值和高亮点计数。

【定义】

typedef struct _ISP_FOCUS_ZONE_S {
    CVI_U16 u16HlCnt;
    CVI_U64 u64h0;
    CVI_U64 u64h1;
    CVI_U32 u32v0;
} ISP_FOCUS_ZONE_S;

【成员】

成员名称

描述

u16HlCnt

高亮点像素计数。用于检测窗口中的过曝亮点数量,辅助判断光源对焦的影响。

u64h0

水平方向 FIR 滤波器 0 的输出累积值。

u64h1

水平方向 FIR 滤波器 1 的输出累积值。

u32v0

垂直方向 FIR 滤波器的输出累积值。

【注意事项】

无。

【相关数据类型及接口】

  • ISP_FE_FOCUS_STATISTICS_S

  • ISP_AF_STATISTICS_S

6.5.2.13. ISP_AF_STATISTICS_S

【说明】

定义 AF 统计信息数据结构。封装前端(FE)AF 统计输出。

【定义】

typedef struct _ISP_AF_STATISTICS_S {
    ISP_FE_FOCUS_STATISTICS_S stFEAFStat;
} ISP_AF_STATISTICS_S;

【成员】

成员名称

描述

stFEAFStat

前端 AF 统计信息。包含 15 x 17 区块的度量数据。参见 ISP_FE_FOCUS_STATISTICS_S

【注意事项】

  • 该数据结构在 ISP 运行时由硬件自动更新,用户通过 CVI_ISP_GetFocusStatistics 获取。

  • 目前 AF 只支持 Bayer 域的统计信息。

【相关数据类型及接口】

  • CVI_ISP_GetFocusStatistics

  • ISP_FOCUS_ZONE_S

  • ISP_FE_FOCUS_STATISTICS_S