统计信息¶
概述¶
ISP提供的3A统计信息及相关配置。
功能描述¶
AE统计信息¶
实现自动曝光信息的统计,软件根据统计信息调节sensor可实现自动曝光的功能。AE统计信息包含分区间的R/Gr/Gb/B均值统计、带权重的全局R/Gr/Gb/B均值、1024段直方图信息。
AE 区域统计信息¶
AE最大支持17×15分块,最小支持1×1分块,每个分块均可以输出16bit R,Gr,Gb,B均值(Average R/Gr/Gb/B)。以R、Gr为例,区块的统计信息读取地址与数据的对应关系如表1所示。m表示水平分区个数,n表示垂直分区个数。
表 1 AE区域统计信息
Memory address |
Zone |
Memory Read Data |
|
|---|---|---|---|
[31:16] |
[15:0] |
||
0 |
0 |
Average R |
Average Gr |
1 |
1 |
Average R |
Average Gr |
2 |
2 |
Average R |
Average Gr |
3 |
3 |
Average R |
Average Gr |
…………………… |
|||
m*n-3 |
m*n-3 |
Average R |
Average Gr |
m*n-2 |
m*n-2 |
Average R |
Average Gr |
m*n-1 |
m*n-1 |
Average R |
Average Gr |
带权重的AE全局统计信息¶
与AE的区域统计信息基本一致,对于整幅图像,AE也提供了4个全局统计信息。分别为OT_ISP_AE_TOTAL_R_AVER,OT_ISP_AE_TOTAL_GR_AVER,OT_ISP_AE_TOTAL_GB_AVER,OT_ISP_AE_TOTAL_B_AVER。其物理意义与分块统计一致。
带权重的AE直方图信息¶
AE提供1024阶直方图统计0-1023,直方图信息读取地址与数据的对应关系如表1所示。
表 1 AE直方图统计信息
Memory address |
Zone |
Memory Read Data |
|
|---|---|---|---|
[31:29] |
[28:0] |
||
0 |
0 |
0 |
Pixel Value为0的个数 |
1 |
1 |
0 |
Pixel Value为1的个数 |
2 |
2 |
0 |
Pixel Value为2的个数 |
3 |
3 |
0 |
Pixel Value为3的个数 |
…………………… |
|||
1022 |
1022 |
0 |
Pixel Value为1022的个数 |
1023 |
1023 |
0 |
Pixel Value为1023的个数 |
AE支持FourPlaneMode模式,在FourPlaneMode模式下,AE提供四通道256段直方图统计0~255,直方图信息读取地址与数据的对应关系如表2所示。
表 2 AE直方图统计信息
Memory address |
Zone |
Memory Read Data |
|
|---|---|---|---|
[31:29] |
[28:0] |
||
0 |
0 |
0 |
B通道Pixel Value为0的个数 |
1 |
1 |
0 |
B通道Pixel Value为1的个数 |
…………………… |
|||
255 |
255 |
0 |
B通道Pixel Value为255的个数 |
256 |
256 |
0 |
Gb通道Pixel Value为0的个数 |
…………………… |
|||
511 |
511 |
0 |
Gb通道Pixel Value为255的个数 |
512 |
512 |
0 |
Gr通道Pixel Value为0的个数 |
…………………… |
|||
767 |
767 |
0 |
Gr通道Pixel Value为255的个数 |
768 |
768 |
0 |
R通道Pixel Value为0的个数 |
…………………… |
|||
1022 |
1022 |
0 |
R通道Pixel Value为254的个数 |
1023 |
1023 |
0 |
R通道Pixel Value为255的个数 |
MG统计信息¶
MG模块统计DRC后分块均值,与AE统计分块均值相比,可以得出分块均值增益最大值。MG统计信息包含分区间R/Gr/Gb/B均值统计。
MG区域统计信息¶
MG最大支持17×15分块,最小支持1×1分块,每个分块均可以输出8bit R,Gr,Gb,B均值(Average R/Gr/Gb/B)。区块的统计信息读取地址与数据的对应关系如表1所示。m表示水平分区个数,n表示垂直分区个数。
表 1 MG区域统计信息
Memory address |
Zone |
Memory Read Data |
|||
|---|---|---|---|---|---|
[31:24] |
[23:16] |
[15:8] |
[7:0] |
||
0 |
0 |
Average R |
Average Gr |
Average Gb |
Average B |
1 |
1 |
Average R |
Average Gr |
Average Gb |
Average B |
2 |
2 |
Average R |
Average Gr |
Average Gb |
Average B |
3 |
3 |
Average R |
Average Gr |
Average Gb |
Average B |
…………………… |
|||||
m*n-3 |
m*n-3 |
Average R |
Average Gr |
Average Gb |
Average B |
m*n-2 |
m*n-2 |
Average R |
Average Gr |
Average Gb |
Average B |
m*n-1 |
m*n-1 |
Average R |
Average Gr |
Average Gb |
Average B |
AWB统计信息¶
AWB统计信息包含全局统计信息和区域统计信息。
全局统计信息:整幅图像的R,G,B均值,以及有效统计点的个数。
区域统计信息:最大支持图像的32x32分块,每个分块均可以输出R,G,B均值,以及有效统计点的个数。
AWB中统计的有效点,除了要满足配置的RGB上限与下限要求外(black_level,white_level),像素点颜色还需要满足配置的有效像素颜色空间,具体如图1所示,绿色区块内的为有效像素的颜色范围。
图 1 AWB有效像素颜色空间

AWB统计的有效像素区域是一个四边形,其中上下左右四个边界由cr_ref_min/max, cb_ref_min/max这4个参数决定,它们代表了允许的r/g, b/g的最大与最小值。
AWB区域统计信息¶
AWB中最大支持图像的32x32分块,每个分块均可以输出R、G、B均值(Average R/G/B)。其中统计的像素点均为16bit,分块内统计有效点个数Count All,点数统计值均已根据图像大小做了归一化处理,归一化到16bit。同时,每一个分块支持分亮度区间进行统计,最大支持分4个亮度区间。区块的统计信息读取地址与数据的对应关系如表1所示。
须知:
当分辨率较小,分块数较多时,如果每块的分辨率小于60x14,那么需要减少分块数,以免每块过小。建议在分辨率小的情况下,使用较少的分块数。
如果要输出低分辨率,需要在业务启动的时候设置一个比较小的AWB统计信息分块数。
表 1 AWB区域统计信息
Memory address |
Zone |
Memory Read Data |
|
|---|---|---|---|
[31:16] |
[15:0] |
||
0 |
0 |
Average G |
Average R |
1 |
0 |
Count All |
Average B |
2 |
1 |
Average G |
Average R |
3 |
1 |
Count All |
Average B |
... |
... |
||
2047 |
1023 |
Count All |
Average B |
AWB全局统计信息¶
与AWB的区域统计信息基本一致,对于整幅图像,AWB也提供了四个全局统计信息。分别为ISP_AWB_AVG_R/G/B,ISP_AWB_CNT_ALL。其物理意义与分块统计一致。
API参考¶
统计信息的API接口必须在调用ss_mpi_isp_init接口之后才能调用。
ss_mpi_isp_set_stats_cfg:设置ISP 3A统计信息配置。
ss_mpi_isp_get_stats_cfg:获取ISP 3A统计信息配置。
ss_mpi_isp_get_ae_stats:获取AE统计信息。
ss_mpi_isp_get_ae_stitch_stats:获取拼接模式AE统计信息。
ss_mpi_isp_get_mg_stats:获取MG统计信息。
ss_mpi_isp_get_wb_stats:获取AWB统计信息。
ss_mpi_isp_get_wb_stitch_stats:获取拼接模式AWB统计信息。
ss_mpi_isp_get_focus_stats:获取AF统计信息。
ss_mpi_isp_set_stats_cfg¶
【描述】
设置ISP 3A统计信息配置。
【语法】
td_s32 ss_mpi_isp_set_stats_cfg(ot_vi_pipe vi_pipe, const ot_isp_stats_cfg *stat_cfg);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI PIPE号。 |
输入 |
stat_cfg |
ISP统计信息配置。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
用户可以关闭不需要的统计信息,以提高系统性能。
【举例】
无
【相关主题】
ss_mpi_isp_get_stats_cfg¶
【描述】
获取ISP 3A统计信息配置。
【语法】
td_s32 ss_mpi_isp_get_stats_cfg(ot_vi_pipe vi_pipe, ot_isp_stats_cfg *stat_cfg);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI PIPE号。 |
输入 |
stat_cfg |
ISP统计信息配置。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_get_ae_stats¶
【描述】
获取AE统计信息。
【语法】
td_s32 ss_mpi_isp_get_ae_stats(ot_vi_pipe vi_pipe, ot_isp_ae_stats *ae_stat);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI PIPE号。 |
输入 |
ae_stat |
AE统计信息。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
ot_isp_ae_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
【举例】
无
【相关主题】
无
ss_mpi_isp_get_ae_stitch_stats¶
【描述】
获取拼接模式AE统计信息。
【语法】
td_s32 ss_mpi_isp_get_ae_stitch_stats(ot_vi_pipe vi_pipe, ot_isp_ae_stitch_stats *stitch_stat);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI PIPE号。 |
输入 |
stitch_stat |
拼接模式AE统计信息。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
ot_isp_ae_stitch_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
【举例】
无
【相关主题】
无
ss_mpi_isp_get_mg_stats¶
【描述】
获取MG统计信息。
【语法】
td_s32 ss_mpi_isp_get_mg_stats(ot_vi_pipe vi_pipe, ot_isp_mg_stats *mg_stat);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI PIPE号。 |
输入 |
mg_stat |
MG统计信息。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
ot_isp_mg_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
【举例】
无
【相关主题】
无
ss_mpi_isp_get_wb_stats¶
【描述】
获取AWB统计信息。
【语法】
td_s32 ss_mpi_isp_get_wb_stats(ot_vi_pipe vi_pipe, ot_isp_wb_stats *wb_stat);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI PIPE号。 |
输入 |
wb_stat |
WB统计信息。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
ot_isp_wb_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
【举例】
无
【相关主题】
无
ss_mpi_isp_get_wb_stitch_stats¶
【描述】
获取拼接模式下WB统计信息。
【语法】
td_s32 ss_mpi_isp_get_wb_stitch_stats (ot_vi_pipe vi_pipe, ot_isp_wb_stitch_stats *stitch_wb_stat);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI PIPE号。 |
输入 |
stitch_wb_stat |
拼接模式WB统计信息。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
ot_isp_wb_stitch_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
【举例】
无
【相关主题】
无
ss_mpi_isp_get_focus_stats¶
【描述】
获取AF统计信息。
【语法】
td_s32 ss_mpi_isp_get_focus_stats(ot_vi_pipe vi_pipe, ot_isp_af_stats *af_stat);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI PIPE号。 |
输入 |
af_stat |
AF统计信息。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
ot_isp_af_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
【举例】
无
【相关主题】
无
数据类型¶
ot_isp_stats_cfg:定义ISP 3A统计信息配置。
ot_isp_stats_ctrl:定义ISP 3A统计信息使能。
ot_isp_ae_stats_cfg:定义AE统计信息配置。
ot_isp_ae_switch:定义AE统计模块在ISP pipeline的位置。
ot_isp_ae_four_plane_mode:FourPlaneMode使能。
ot_isp_ae_hist_skip: 直方图统计时采样点设置。
ot_isp_ae_hist_offset_x:直方图统计时水平方向起始点设置。
ot_isp_ae_hist_offset_y:直方图统计时垂直方向起始点设置。
ot_isp_ae_hist_config:定义全局直方图统计时的采样点方式。
ot_isp_ae_stat_mode:定义统计模块的开方模式。
ot_isp_ae_crop:对AE模块输入图像进行裁剪。
ot_isp_awb_switch:定义ISP WB统计模块在ISP pipeline的位置。
ot_isp_awb_gain_switch:定义AWB增益的位置。
ot_isp_awb_crop:对AWB模块输入图像进行裁剪。
ot_isp_wb_stats_cfg:定义AWB统计信息配置。
ot_isp_ae_grid_info:定义AE分区间统计信息的坐标信息。
ot_isp_ae_stats:定义AE统计信息。
ot_isp_ae_stitch_stats:定义拼接模式AE统计信息。
ot_isp_mg_grid_info:定义MG分区间统计信息的坐标信息。
ot_isp_mg_stats:定义MG统计信息。
ot_isp_awb_grid_info:定义AWB分区间统计信息的坐标信息。
ot_isp_wb_stats:定义AWB统计信息。
ot_isp_wb_stitch_stats:定义拼接模式AWB统计信息。
OT_ISP_IIR_EN_NUM:定义AF IIR使能的个数。
OT_ISP_IIR_GAIN_NUM:定义AF IIR gain的个数。
OT_ISP_IIR_SHIFT_NUM:定义AF IIR shift的个数。
OT_ISP_ACC_SHIFT_H_NUM:定义AF IIR累加统计shift的个数。
OT_ISP_ACC_SHIFT_V_NUM:定义AF FIR累加统计shift的个数。
OT_ISP_AF_ZONE_ROW:定义AF水平方向的分块个数。
OT_ISP_AF_ZONE_COLUMN:定义AF垂直方向的分块个数。
ot_isp_focus_stats_cfg:定义AF统计信息配置。
ot_isp_af_cfg:定义AF统计信息配置参数。
ot_isp_af_peak_mode:统计模式。
ot_isp_af_square_mode:平方模式。
ot_isp_af_crop:AF输入图像的裁剪。
ot_isp_af_stats_pos:AF统计位置。
ot_isp_af_raw_cfg:AF RAW域统计配置。
ot_isp_af_pre_filter_cfg:AF预滤波器配置。
ot_isp_af_level_depend:AF Level Depend Gain配置。
ot_isp_af_coring:AF Coring 配置。
ot_isp_af_h_param:AF统计水平滤波器IIR参数设置。
ot_isp_af_v_param:AF统计水平滤波器IIR参数设置。
ot_isp_af_fv_param:AF统计结果输出格式参数。
ot_isp_focus_zone:定义AF统计信息参数。
ot_isp_fe_focus_stats:定义FE AF统计信息。
ot_isp_be_focus_stats:定义BE AF统计信息。
ot_isp_focus_grid_info:定义AF分区间统计信息的坐标信息。
ot_isp_af_stats:定义FE和BE的AF统计信息。
ot_isp_stats_cfg¶
【说明】
定义ISP 3A统计信息配置。
【定义】
typedef struct {
ot_isp_stats_ctrl key;
ot_isp_ae_stats_cfg ae_cfg;
ot_isp_wb_stats_cfg wb_cfg;
ot_isp_focus_stats_cfg focus_cfg;
} ot_isp_stats_cfg;
【成员】
成员名称 |
描述 |
|---|---|
key |
统计信息使能。 |
ae_cfg |
AE统计信息配置。 |
wb_cfg |
AWB统计信息配置。 |
focus_cfg |
AF统计信息配置。 |
【注意事项】
无。
【相关数据类型及接口】
无
ot_isp_stats_ctrl¶
【说明】
定义ISP 3A统计信息使能。
【定义】
typedef union {
td_u64 key;
struct {
td_u64 bit1_fe_ae_global_stat : 1 ; /* [0] */
td_u64 bit1_fe_ae_local_stat : 1 ; /* [1] */
td_u64 bit1_fe_ae_stitch_global_stat : 1 ; /* [2] */
td_u64 bit1_fe_ae_stitch_local_stat : 1 ; /* [3] */
td_u64 bit1_be_ae_global_stat : 1 ; /* [4] */
td_u64 bit1_be_ae_local_stat : 1 ; /* [5] */
td_u64 bit1_be_ae_stitch_global_stat : 1 ; /* [6] */
td_u64 bit1_be_ae_stitch_local_stat : 1 ; /* [7] */
td_u64 bit1_awb_stat1 : 1 ; /* [8] */
td_u64 bit1_awb_stat2 : 1 ; /* [9] */
td_u64 bit2_reserved0 : 2 ; /* [10:11] */
td_u64 bit1_fe_af_stat : 1 ; /* [12] */
td_u64 bit1_be_af_stat : 1 ; /* [13] */
td_u64 bit2_reserved1 : 2 ; /* [14:15] */
td_u64 bit1_dehaze : 1 ; /* [16] */
td_u64 bit1_mg_stat : 1 ; /* [17] */
td_u64 bit1_extend_stats : 1; /* [18] */
td_u64 bit13_reserved : 13; /* [19:31] */
td_u64 bit32_isr_access : 32; /* [32:63] */
};
} ot_isp_stats_ctrl;
【成员】
成员名称 |
描述 |
|---|---|
bit1_fe_ae_global_stat |
位于FE的AE全局统计信息使能。包括直方图和全局均值。 |
bit1_fe_ae_local_stat |
位于FE的AE分块均值统计信息使能。 |
bit1_fe_ae_stitch_global_stat |
拼接后位于FE的AE全局统计信息使能。包括直方图和全局均值。仅在拼接模式下生效。 |
bit1_fe_ae_stitch_local_stat |
拼接后位于FE的AE分块均值统计信息使能。仅在拼接模式下生效。 |
bit1_be_ae_global_stat |
位于BE的AE全局统计信息使能。包括直方图和全局均值。 |
bit1_be_ae_local_stat |
位于BE的AE分块均值统计信息使能。 |
bit1_be_ae_stitch_global_stat |
拼接后位于BE的 AE全局统计信息使能。包括直方图和全局均值。仅在拼接模式下生效。 |
bit1_be_ae_stitch_local_stat |
拼接后位于BE的 AE分块均值统计信息使能。仅在拼接模式下生效。 |
bit1_awb_stat1 |
Bayer域AWB全局统计信息使能。 |
bit1_awb_stat2 |
Bayer域AWB分区间统计信息使能。 |
bit2_reserved0 |
保留位。 |
bit1_fe_af_stat |
位于FE的AF统计信息使能。 |
bit1_be_af_stat |
位于BE的AF统计信息使能。 |
bit2_reserved1 |
保留位。 |
bit1_dehaze |
Dehaze统计信息使能。 |
bit1_mg_stat |
MG统计信息使能。 |
bit1_extend_stats |
扩展统计信息使能。 |
bit13_reserved |
保留位。 |
bit32_isr_access |
中断服务程序中更新统计信息开关。 |
【注意事项】
用户可以关闭不使用的统计信息,如此就不会读相应统计信息,从而提高系统性能。
bit1_fe_ae_global_stat~ bit13_reserved 32个bit为使用ss_mpi_isp_get_xx_stats接口(xx表示AE/AWB/AF)获取统计信息时相应的开关。isp firmware运转需要获取统计信息供相关算法使用。
如果用户使用ss_mpi_isp_get_xx_stats(xx表示AE/AWB/AF)实现自己的3A算法,可以通过disable bit32_isr_access中相应的bit来关掉中断服务程序中相关统计信息的更新以达到降低CPU占用率的目的。bit32_isr_access中bit顺序定义也是bit1_fe_ae_global_stat~ bit14_reserved。
例如:可以置零bit32_isr_access的bit0来停止更新fe_ae_global_stat统计信息。
如果用户需要使用FE统计信息估算出来的BE统计信息,则需要打开bit1_extend_stats扩展统计信息使能。
【相关数据类型及接口】
无
ot_isp_ae_stats_cfg¶
【说明】
定义AE统计信息配置。
【定义】
typedef struct {
ot_isp_ae_switch ae_switch;
ot_isp_ae_hist_config hist_config;
ot_isp_ae_four_plane_mode four_plane_mode;
ot_isp_ae_stat_mode hist_mode;
ot_isp_ae_stat_mode aver_mode;
ot_isp_ae_stat_mode max_gain_mode;
ot_isp_ae_crop crop;
ot_isp_ae_crop fe_crop;
td_u8 weight[OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN];
} ot_isp_ae_stats_cfg;
【成员】
成员名称 |
描述 |
|---|---|
ae_switch |
WDR合成后AE统计模块在ISP pipeline的位置,默认值为1 0:After ISP digital gain; 1:After static WB; 2:After DRC。 |
hist_config |
全局直方图统计时的采样点方式配置。 |
four_plane_mode |
four_plane_mode使能,默认值为0,使能时1024段直方图为BGGR四通道256段直方图。 0:不使能; 1:使能。 |
hist_mode |
全局1024段直方图开方模式。0为不开方,1为开方。仅影响BE直方图统计信息。 |
aver_mode |
均值开方模式。0为不开方,1为开方。仅影响BE均值统计信息。 |
max_gain_mode |
MG模块开方模式。0为不开方,1为开方。仅影响MG模块统计信息。为了与AE分块统计信息进行比较,建议与aver_mode配置为同一模式。 |
crop |
AE输入图像裁剪BE模块配置。 |
fe_crop |
AE输入图像裁剪FE模块配置。 |
weight |
15x17个区间的AE权重表,取值范围:[0, 15] |
【注意事项】
线性模式数据流走的是channel 1,默认使用全局1024段直方图进行AE控制,此时channel 2/3/4 WDR合成前全局1024段直方图全为0。
全局4分量统计平均值会受15*17权重表的影响,。
Channel 1/2/3/4全局1024段段直方图会受15*17权重表的影响,WDR模式可以使用这几路直方图信息进行AE控制。如2合1可使用channel 1/2,3合1可使用channel 1/2/3,4合1可使用channel 1/2/3/4等。
配置ae_switch/hist_config/four_plane_mode相关参数时,需要把AE的大面积单色判断功能关闭。
自动曝光的静态统计信息分为15*17个区域,可通过设定权重表改变每个区域的权重。如可使中心区域的权重加大,则中心区域的亮度变化会使图像的全局直方图统计信息产生更多的变化。该属性可调节感兴趣区域的曝光权重,可用于实现指定区域的背光补偿。若能确定具体产品形态感兴趣区域的位置,可将这些位置的权重加大。如对于运动DV和行车记录仪,感兴趣区域一般在画面的中下部分,那么可适当加大场景中下部分区域的权重,使得感兴趣区域得到合理曝光。
【相关数据类型及接口】
无
ot_isp_ae_switch¶
【说明】
定义AE统计模块在ISP pipeline的位置。
【定义】
typedef enum {
OT_ISP_AE_AFTER_DG = 0,
OT_ISP_AE_AFTER_WB,
OT_ISP_AE_AFTER_DRC,
OT_ISP_AE_SWITCH_BUTT
} ot_isp_ae_switch;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AE_AFTER_DG |
After ISP digital gain。 |
OT_ISP_AE_AFTER_WB |
After static WB。 |
OT_ISP_AE_AFTER_DRC |
After DRC。 |
【注意事项】
配置此参数时,需要把AE的大面积单色判断功能关闭。
【相关数据类型及接口】
ot_isp_ae_four_plane_mode¶
【说明】
FourPlaneMode使能。
【定义】
typedef enum {
OT_ISP_AE_FOUR_PLANE_MODE_DISABLE = 0,
OT_ISP_AE_FOUR_PLANE_MODE_ENABLE,
OT_ISP_AE_FOUR_PLANE_MODE_BUTT
} ot_isp_ae_four_plane_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AE_FOUR_PLANE_MODE_DISABLE |
1024段直方图。 |
OT_ISP_AE_FOUR_PLANE_MODE_ENABLE |
BGGR四通道256段直方图。 |
【注意事项】
配置此参数时,需要把AE的大面积单色判断功能关闭。
【相关数据类型及接口】
ot_isp_ae_hist_skip¶
【说明】
直方图统计时采样点设置。
【定义】
typedef enum {
OT_ISP_AE_HIST_SKIP_EVERY_PIXEL = 0,
OT_ISP_AE_HIST_SKIP_EVERY_2ND_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_3RD_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_4TH_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_5TH_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_8TH_PIXEL,
OT_ISP_AE_HIST_SKIP_EVERY_9TH_PIXEL,
OT_ISP_AE_HIST_SKIP_BUTT
} ot_isp_ae_hist_skip;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AE_HIST_SKIP_EVERY_PIXEL |
图像中每个点都统计。 |
OT_ISP_AE_HIST_SKIP_EVERY_2ND_PIXEL |
图像在水平或垂直方向上每两个点统计一次。 |
OT_ISP_AE_HIST_SKIP_EVERY_3RD_PIXEL |
图像在水平或垂直方向上每三个点统计一次。 |
OT_ISP_AE_HIST_SKIP_EVERY_4TH_PIXEL |
图像在水平或垂直方向上每四个点统计一次。 |
OT_ISP_AE_HIST_SKIP_EVERY_5TH_PIXEL |
图像在水平或垂直方向上每五个点统计一次。 |
OT_ISP_AE_HIST_SKIP_EVERY_8TH_PIXEL |
图像在水平或垂直方向上每八个点统计一次。 |
OT_ISP_AE_HIST_SKIP_EVERY_9TH_PIXEL |
图像在水平或垂直方向上每九个点统计一次。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_ae_hist_offset_x¶
【说明】
直方图统计时水平方向起始点设置。
【定义】
typedef enum {
OT_ISP_AE_HIST_START_FORM_FIRST_COLUMN = 0,
OT_ISP_AE_HIST_START_FORM_SECOND_COLUMN,
OT_ISP_AE_HIST_OFFSET_X_BUTT
} ot_isp_ae_hist_offset_x;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AE_HIST_START_FORM_FIRST_COLUMN |
从图像的第一列开始统计。 |
OT_ISP_AE_HIST_START_FORM_SECOND_COLUMN |
从图像的第二列开始统计。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_ae_hist_offset_y¶
【说明】
直方图统计时垂直方向起始点设置。
【定义】
typedef enum {
OT_ISP_AE_HIST_START_FORM_FIRST_ROW = 0,
OT_ISP_AE_HIST_START_FORM_SECOND_ROW,
OT_ISP_AE_HIST_OFFSET_Y_BUTT
} ot_isp_ae_hist_offset_y;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AE_HIST_START_FORM_FIRST_ROW |
从图像的第一行开始统计。 |
OT_ISP_AE_HIST_START_FORM_SECOND_ROW |
从图像的第二行开始统计。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_ae_hist_config¶
【说明】
定义全局直方图统计时的采样点方式。
【定义】
typedef struct {
ot_isp_ae_hist_skip hist_skip_x;
ot_isp_ae_hist_skip hist_skip_y;
ot_isp_ae_hist_offset_x hist_offset_x;
ot_isp_ae_hist_offset_y hist_offset_y;
} ot_isp_ae_hist_config;
【成员】
成员名称 |
描述 |
|---|---|
hist_skip_x |
直方图统计时水平方向采样点设置,0=every pixel; 1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel; 6=every 9th pixel。即取值为0时表示每1个像素采样一个进行统计,取值为1时表示每2个像素采样一个进行统计,以此类推。0仅支持FourPlaneMode使能时配置。 |
hist_skip_y |
直方图统计时垂直方向采样点设置,0=every pixel; 1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel; 6=every 9th pixel。 |
hist_offset_x |
直方图统计时水平方向起始点设置,0表示从第一列开始统计,1表示从第二列开始统计。 |
hist_offset_y |
直方图统计时垂直方向起始点设置,0表示从第一行开始统计,1表示从第二行开始统计。 |
【注意事项】
可根据Sensor输入的Bayer数据格式,合理配置该结构体,使得全局直方图统计时只计入某单个分量数据。
RGBIR模式推荐全局直方图统计时只计入G分量,可根据RGBIR Sensor的Bayer数据格式合理配置该结构体实现。
配置hist_config相关参数时,需要把AE的大面积单色判断功能关闭。
【相关数据类型及接口】
无
ot_isp_ae_stat_mode¶
【说明】
定义统计模块的开方模式。
【定义】
typedef enum {
OT_ISP_AE_NORMAL = 0,
OT_ISP_AE_ROOT,
OT_ISP_AE_STAT_MODE_BUTT
} ot_isp_ae_stat_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AE_NORMAL |
普通模式,不做处理。 |
OT_ISP_AE_ROOT |
开方模式。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_ae_crop¶
【说明】
对AE模块输入图像进行裁剪。
【定义】
typedef struct {
td_bool en;
td_u16 x;
td_u16 y;
td_u16 width;
td_u16 height;
} ot_isp_ae_crop;
【成员】
成员名称 |
描述 |
|---|---|
en |
使能Crop,0为Crop不使能,1为Crop使能。 |
x |
Crop X 起始位置 取值范围:[0, 图像宽度 – 256] |
y |
Crop Y 起始位置 取值范围:[0, 图像高度 – 120] |
width |
Crop 宽度。 取值范围:[256, 图像宽度] |
height |
Crop 高度 取值范围:[120, 图像高度] |
【注意事项】
默认分块数下,当裁剪图像宽小于820或高小于200时,AE统计信息仅全局直方图可用。
水平方向起始位置与Crop宽度之和应小于图像宽度,垂直方向起始位置与Crop高度之和应小于图像高度。
对于BE的AE统计信息,ISP BE分块场景下,不支持AE CROP(输入图像裁剪)功能。
AE CROP(输入图像裁剪)参数会同步对MG模块生效。
AE的FE1、FE2、FE3统计图像大小限制为4096X4096,如果图像大于4096X4096,需要将图像裁剪为小于4096X4096,WDR模式FE1同理。
【相关数据类型及接口】
ot_isp_awb_switch¶
【说明】
定义AWB统计模块在ISP pipeline的位置。
【定义】
typedef enum {
OT_ISP_AWB_AFTER_DG = 0,
OT_ISP_AWB_AFTER_EXPANDER,
OT_ISP_AWB_AFTER_DRC,
OT_ISP_AWB_SWITCH_BUTT
} ot_isp_awb_switch;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AWB_AFTER_DG |
AWB统计模块位置在Digital Gain后。 |
OT_ISP_AWB_AFTER_EXPANDER |
AWB统计模块位置在Expander后。 |
OT_ISP_AWB_AFTER_DRC |
AWB统计模块位置在DRC后。 |
【注意事项】
SS928V100不支持配置AWB统计模块位置在Expander后。
【相关数据类型及接口】
ot_isp_awb_gain_switch¶
【说明】
定义AWB增益的位置。
【定义】
typedef enum {
OT_ISP_AWB_GAIN_IN_ISP = 0,
OT_ISP_AWB_GAIN_IN_SENSOR,
OT_ISP_AWB_GAIN_IN_BUTT
} ot_isp_awb_gain_switch;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AWB_GAIN_IN_ISP |
AWB增益在ISP生效。 |
OT_ISP_AWB_GAIN_IN_SENSOR |
AWB增益在Sensor生效。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_awb_crop¶
【说明】
对AWB模块输入图像进行裁剪。
【定义】
typedef struct {
td_bool en;
td_u16 x;
td_u16 y;
td_u16 width;
td_u16 height;
} ot_isp_awb_crop;
【成员】
成员名称 |
描述 |
|---|---|
en |
使能Crop,0为Crop不使能,1为Crop使能。 |
x |
Crop X 起始位置 取值范围:[0, 图像宽度 – 60 * zone_col] |
y |
Crop Y 起始位置 取值范围:[0, 图像高度 – 14 * zone_row] |
width |
Crop 宽度 取值范围:[60 * zone_col, 图像宽度] |
height |
Crop 高度 取值范围:[14 * zone_row, 图像高度] |
【注意事项】
AWB要求每个分块的最小分辨率为60*14,当裁剪后的图像分辨率较小,分块数较多时,如果每块的分辨率小于60x14,那么需要减少分块数,以免每块过小。
水平方向起始位置与Crop宽度之和应小于图像宽度,垂直方向起始位置与Crop高度之和应小于图像高度。
ISP BE分块场景下,不支持AWB CROP(输入图像裁剪)功能。
【相关数据类型及接口】
ot_isp_wb_stats_cfg¶
【说明】
定义AWB统计信息配置。
【定义】
typedef struct {
ot_isp_awb_switch awb_switch;
td_u16 zone_row;
td_u16 zone_col;
td_u16 white_level;
td_u16 black_level;
td_u16 cb_max;
td_u16 cb_min;
td_u16 cr_max;
td_u16 cr_min;
ot_isp_awb_crop crop;
} ot_isp_wb_stats_cfg;
【成员】
成员名称 |
描述 |
|---|---|
awb_switch |
WB统计模块位置,默认值为0,在Digital Gain后。 |
zone_row |
WB统计垂直方向分块个数。取值范围:[0x1, min(0x20, ImageHeight / 14)]。 默认值与图像高度相关(保证每个分块的高度不小于14): 如果图像高度大于等于448,默认值为0x20 如果图像高度小于448,默认值为ImageHeight/14。 |
zone_col |
WB统计水平方向分块个数,取值范围:[BlkNum, min(0x20, ImageWidth/60)], BlkNum为ISP BE的分块数目。 默认值与图像的宽度相关(保证每个分块的宽度小于60): 如果图像宽度大于1920,默认值为0x20。 如果图像宽度小于1920,默认值为ImageWidth/60 |
white_level |
统计白点信息时,找白点的亮度上限。取值范围:[0x0, 0xFFFF],默认值0xFFFF。 |
black_level |
统计白点信息时,找白点的亮度下限。取值范围:[0x0, white_level],默认值0x0。 |
cb_max |
统计白点信息时,色差B/G的最大值,8bit精度,默认值512。取值范围:[0x0, 0xFFF] |
cb_min |
统计白点信息时,色差B/G的最小值,8bit精度,默认值128。取值范围:[0x0, 0xFFF] |
cr_max |
统计白点信息时,色差R/G的最大值,8bit精度,默认值512。取值范围:[0x0, 0xFFF] |
cr_min |
统计白点信息时,色差R/G的最小值,8bit精度,默认值128。取值范围:[0x0, 0xFFF] |
crop |
AWB输入图像裁剪配置。 |
【注意事项】
拼接模式下,每一路的参数是独立配置的。每一路的分块个数都需要配置,而且需要相同。即每一路的awb_switch,zone_row,zone_col需要相同。
【相关数据类型及接口】
无
ot_isp_ae_grid_info¶
【说明】
定义AE分区间统计信息的坐标信息。
【定义】
typedef struct {
td_u16 grid_y_pos[OT_ISP_AE_ZONE_ROW + 1];
td_u16 grid_x_pos[OT_ISP_AE_ZONE_COLUMN + 1];
td_u8 status;
} ot_isp_ae_grid_info;
【成员】
成员名称 |
描述 |
|---|---|
grid_y_pos |
AE每个分区Y方向坐标值。 |
grid_x_pos |
AE每个分区X方向坐标值。 |
status |
AE统计信息坐标更新状态。 |
【注意事项】
非分块场景下,AE分区间统计信息为15*17个均匀分区的统计信息。
BE分块场景下,AE分区间统计信息的分区大小是不均匀的,若按照均匀分区间的方式显示AE统计信息,会出现图像与统计信息不对应的情况,为避免这种问题,故提供每个分区的起始坐标信息。
【相关数据类型及接口】
无
ot_isp_ae_stats¶
【说明】
定义AE统计信息。
【定义】
typedef struct {
td_u32 fe_hist1024_value[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_HIST_NUM];
td_u16 fe_global_avg[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
td_u16 fe_zone_avg[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM];
td_u32 be_estimate_hist1024_value[OT_ISP_HIST_NUM];
td_u32 be_hist1024_value[OT_ISP_HIST_NUM];
td_u16 be_global_avg[OT_ISP_BAYER_CHN_NUM];
td_u16 be_zone_avg[OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM];
ot_isp_ae_grid_info fe_grid_info;
ot_isp_ae_grid_info be_grid_info;
td_u64 pts;
} ot_isp_ae_stats;
【成员】
成员名称 |
描述 |
|---|---|
fe_hist1024_value |
FE全局1024段直方图信息。 |
fe_global_avg |
FE全局统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
fe_zone_avg |
FE分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
be_estimate_hist1024_value |
根据FE直方图信息估算的BE全局1024段直方图信息。 |
be_hist1024_value |
BE全局1024段直方图信息。 |
be_global_avg |
BE全局统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
be_zone_avg |
BE分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
fe_grid_info |
FE 分区间统计信息的坐标信息。 |
be_grid_info |
BE 分区间统计信息的坐标信息。 |
pts |
AE统计信息对应的raw pts。 |
【注意事项】
WDR模式下只在主路即最短帧所在Pipe才可以获取所有长短帧的统计信息,以WDR2TO1为例,OT_ISP_WDR_MAX_FRAME_NUM对应下标为0时表示短帧统计信息,为1时表示长帧信息。
WDR合成前(FE)统计信息受到位于FE AE之前处理模块(FE AE之前的模块有DG/WB)增益影响,这些模块的FE增益值由算法内部保证与BE保持一致,无需单独配置。
当图像宽小于600或高小于200时,分区间统计信息不可用。
be_estimate_hist1024_value仅在2合1WDR模式下可使用,且仅支持估算DG后的统计信息,该直方图形式不支持FourPlaneMode。噪声会对BE统计信息有影响,在噪声大的场景,开启BNR之后,估算的统计信息不能接近真实的BE统计信息。另外DPC、CRB、LSC等模块也会影响统计信息的估算。
YUV模式不支持获取统计信息pts。
pts每帧都会覆盖更新,若需要获取到每一帧raw对应的统计信息pts,则需要以帧间隔调用此接口;否则,统计信息pts与raw pts可能不是一一对应的。
【相关数据类型及接口】
ot_isp_ae_stitch_stats¶
【说明】
定义拼接模式AE统计信息。
【定义】
typedef struct {
td_u32 fe_hist1024_value[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_HIST_NUM];
td_u16 fe_global_avg[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
td_u16 fe_zone_avg[OT_ISP_MAX_PIPE_NUM][OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM];
td_u32 be_hist1024_value[OT_ISP_HIST_NUM];
td_u16 be_global_avg[OT_ISP_BAYER_CHN_NUM];
td_u16 be_zone_avg[OT_ISP_MAX_PIPE_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM];
td_u64 pts;
} ot_isp_ae_stitch_stats;
【成员】
成员名称 |
描述 |
|---|---|
fe_hist1024_value |
FE全局1024段直方图信息。 |
fe_global_avg |
FE全局统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
fe_zone_avg |
FE分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
be_hist1024_value |
BE全局1024段直方图信息。 |
be_global_avg |
BE全局统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
be_zone_avg |
BE分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
pts |
AE拼接统计信息对应的主pipe raw pts。 |
【注意事项】
拼接后统计信息仅在拼接模式下生效,并且仅在拼接主路可以获取。
拼接后的分块均值只有参与拼接的Pipe分区间均值有效,其余Pipe的均值无效。如Pipe0和Pipe1进行拼接,则OT_ISP_MAX_PIPE_NUM对应下标为0,1时fe_zone_avg/be_zone_avg才有有效统计信息。
WDR模式下只在拼接主路即最短帧所在Pipe才可以获取所有长短帧的统计信息,以WDR2TO1为例,OT_ISP_WDR_MAX_FRAME_NUM对应下标为0时表示短帧统计信息,为1时表示长帧信息。
WDR合成前(FE)统计信息受到位于FE AE之前处理模块(FE AE之前的模块有DG/WB)增益影响,这些模块的FE增益值由算法内部保证与BE保持一致,无需单独配置。
YUV模式不支持获取统计信息pts。
pts每帧都会覆盖更新,若需要获取到每一帧raw对应的统计信息pts,则需要以帧间隔调用此接口;否则,统计信息pts与raw pts可能不是一一对应的。
【相关数据类型及接口】
无
ot_isp_mg_grid_info¶
【说明】
定义MG分区间统计信息的坐标信息。
【定义】
typedef struct {
td_u16 grid_y_pos[OT_ISP_MG_ZONE_ROW + 1];
td_u16 grid_x_pos[OT_ISP_MG_ZONE_COLUMN + 1];
td_u8 status;
} ot_isp_mg_grid_info;
【成员】
成员名称 |
描述 |
|---|---|
grid_y_pos |
MG每个分区Y方向坐标值。 |
grid_x_pos |
MG每个分区X方向坐标值。 |
status |
MG统计信息坐标更新状态。 |
【注意事项】
非分块场景下,MG分区间统计信息为15*17个均匀分区的统计信息。
BE分块场景下,MG分区间统计信息的分区大小是不均匀的,若按照均匀分区间的方式显示MG统计信息,会出现图像与统计信息不对应的情况,为避免这种问题,故提供每个分区的起始坐标信息。
【相关数据类型及接口】
无
ot_isp_mg_stats¶
【说明】
定义MG统计信息。
【定义】
typedef struct {
td_u16 zone_avg[OT_ISP_MG_ZONE_ROW][OT_ISP_MG_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM];
ot_isp_mg_grid_info grid_info;
} ot_isp_mg_stats;
【成员】
成员名称 |
描述 |
|---|---|
zone_avg |
分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。 |
grid_info |
MG分区间统计信息的坐标值。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_awb_grid_info¶
【说明】
定义AWB分区间统计信息的坐标信息。
【定义】
typedef struct {
td_u16 grid_y_pos[OT_ISP_AWB_ZONE_ORIG_ROW + 1];
td_u16 grid_x_pos[OT_ISP_AWB_ZONE_ORIG_COLUMN + 1];
td_u8 status;
} ot_isp_awb_grid_info;
【成员】
成员名称 |
描述 |
|---|---|
grid_y_pos |
AWB每个分区Y方向坐标值。 |
grid_x_pos |
AWB每个分区X方向坐标值。 |
status |
AWB统计信息坐标更新状态。 |
【注意事项】
非分块场景下,AWB分区间统计信息为zone_row* zone_col个均匀分区的统计信息。
BE分块场景下,AWB分区间统计信息的分区大小是不均匀的,若按照均匀分区间的方式显示AWB统计信息,会出现图像与统计信息不对应的情况,为避免这种问题,故提供每个分区的起始坐标信息。
【相关数据类型及接口】
无
ot_isp_wb_stats¶
【说明】
定义AWB统计信息。
【定义】
typedef struct {
td_u16 global_r;
td_u16 global_g;
td_u16 global_b;
td_u16 count_all;
td_u16 zone_avg_r[OT_ISP_AWB_ZONE_NUM];
td_u16 zone_avg_g[OT_ISP_AWB_ZONE_NUM];
td_u16 zone_avg_b[OT_ISP_AWB_ZONE_NUM];
td_u16 zone_count_all[OT_ISP_AWB_ZONE_NUM];
ot_isp_awb_grid_info grid_info;
td_u64 pts;
} ot_isp_wb_stats;
【成员】
成员名称 |
描述 |
|---|---|
global_r |
Bayer域全局统计的R分量平均值,取值范围:[0x0, 0xFFFF] |
global_g |
Bayer域全局统计的G分量平均值,取值范围:[0x0, 0xFFFF]。 |
global_b |
Bayer域全局统计的B分量平均值,取值范围:[0x0, 0xFFFF] |
count_all |
全局统计的正方形灰色区域的像素个数,已做归一化,取值范围:[0x0, 0xFFFF]。 |
zone_avg_r |
Bayer域分区间统计的R分量平均值,取值范围:[0x0, 0xFFFF] |
zone_avg_g |
Bayer域分区间统计的G分量平均值,取值范围:[0x0, 0xFFFF] |
zone_avg_b |
Bayer域分区间统计的B分量平均值,取值范围:[0x0, 0xFFFF]。 |
zone_count_all |
分区间统计的正方形灰色区域的像素个数,已做归一化,取值范围:[0x0, 0xFFFF] |
grid_info |
Awb分区间统计信息的坐标信息。 |
pts |
wb统计信息对应的raw pts。 |
【注意事项】
表 1 AWB区域统计信息(以zone_avg_r为例,zone_row=32,zone_col=32)
Index |
Zone |
Bin |
读取数据说明 |
|---|---|---|---|
0 |
0 |
0 |
第0个分块的Average R |
1 |
1 |
0 |
第1个分块的Average R |
2 |
2 |
0 |
第2个分块的Average R |
3 |
3 |
0 |
第3个分块的Average R |
4 |
4 |
0 |
第4个分块的Average R |
…………………… |
|||
1023 |
1023 |
0 |
第1023个分块的Average R |
zone_count_all做归一化是为了消除分辨率差异对灰点个数的影响。归一化公式:CountAll = (Count of Gray Pixels << 16) / (Count of All Pixels)。
YUV模式不支持获取统计信息pts。
pts每帧都会覆盖更新,若需要获取到每一帧raw对应的统计信息pts,则需要以帧间隔调用此接口;否则,统计信息pts与raw pts可能不是一一对应的。
【相关数据类型及接口】
无
ot_isp_wb_stitch_stats¶
【说明】
定义拼接模式WB统计信息。
【定义】
typedef struct {
td_u16 zone_row;
td_u16 zone_col;
td_u16 zone_avg_r[OT_ISP_AWB_ZONE_STITCH_MAX];
td_u16 zone_avg_g[OT_ISP_AWB_ZONE_STITCH_MAX];
td_u16 zone_avg_b[OT_ISP_AWB_ZONE_STITCH_MAX];
td_u16 zone_count_all[OT_ISP_AWB_ZONE_STITCH_MAX];
td_u64 pts;
} ot_isp_wb_stitch_stats;
【成员】
成员名称 |
描述 |
|---|---|
zone_row |
拼接统计分块行数,取值范围:[0x0, 0x20] |
zone_col |
拼接统计分块列数,取值范围:[0x0, 0x80] |
zone_avg_r |
Bayer域分区间统计的R分量平均值,取值范围:[0x0, 0xFFFF] |
zone_avg_g |
Bayer域分区间统计的G分量平均值,取值范围:[0x0, 0xFFFF] |
zone_avg_b |
Bayer域分区间统计的B分量平均值,取值范围:[0x0, 0xFFFF] |
zone_count_all |
分区间统计的正方形灰色区域的像素个数,已做归一化,取值范围:[0x0, 0xFFFF] |
pts |
wb拼接统计信息对应的主pipe raw pts。 |
【注意事项】
AWB统计信息的排列顺序请参考表1。
拼接后统计信息仅在拼接模式下生效,并且仅在拼接主路可以获取。
YUV模式不支持获取统计信息pts。
pts每帧都会覆盖更新,若需要获取到每一帧raw对应的统计信息pts,则需要以帧间隔调用此接口;否则,统计信息pts与raw pts可能不是一一对应的。
【相关数据类型及接口】
无
OT_ISP_IIR_EN_NUM¶
【说明】
定义AF IIR使能的个数。
【定义】
#define OT_ISP_IIR_EN_NUM 3
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_IIR_GAIN_NUM¶
【说明】
定义AF IIR gain的个数。
【定义】
#define OT_ISP_IIR_GAIN_NUM 7
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_IIR_SHIFT_NUM¶
【说明】
定义AF IIR shift的个数。
【定义】
#define OT_ISP_IIR_SHIFT_NUM 4
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_FIR_GAIN_NUM¶
【说明】
定义AF FIR gain的个数。
【定义】
#define OT_ISP_FIR_GAIN_NUM 5
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_ACC_SHIFT_H_NUM¶
【说明】
定义AF IIR累加统计shift的个数。
【定义】
#define OT_ISP_ACC_SHIFT_H_NUM 2
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_ACC_SHIFT_V_NUM¶
【说明】
定义AF FIR累加统计shift的个数。
【定义】
#define OT_ISP_ACC_SHIFT_V_NUM 2
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AF_ZONE_ROW¶
【说明】
定义AF水平方向的分块个数。
【定义】
#define OT_ISP_AF_ZONE_ROW 15
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AF_ZONE_COLUMN¶
【说明】
定义AF垂直方向的分块个数。
【定义】
#define OT_ISP_AF_ZONE_COLUMN 17
【注意事项】
无。
【相关数据类型及接口】
ot_isp_focus_stats_cfg¶
【说明】
定义AF统计信息配置。
【定义】
typedef struct {
ot_isp_af_cfg config;
ot_isp_af_h_param h_param_iir0;
ot_isp_af_h_param h_param_iir1;
ot_isp_af_v_param v_param_fir0;
ot_isp_af_v_param v_param_fir1;
ot_isp_af_fv_param fv_param;
} ot_isp_focus_stats_cfg;
【成员】
成员名称 |
描述 |
|---|---|
config |
AF全局配置参数。 |
h_param_iir0 |
奇数行水平滤波器IIR参数设置。 |
h_param_iir1 |
偶数行水平滤波器IIR参数设置。 |
v_param_fir0 |
奇数行垂直滤波器FIR参数设置。 |
v_param_fir1 |
偶数行垂直滤波器FIR参数设置。 |
fv_param |
统计结果输出格式参数配置。 |
【注意事项】
当分辨率较小,分块数较多时,如果每块的分辨率小于32x32,那么需要减少分块数,以免每块过小。建议在分辨率小的情况下,使用较少的分块数。
【相关数据类型及接口】
无
ot_isp_af_cfg¶
【说明】
定义AF统计信息配置参数。
【定义】
typedef struct {
td_bool af_en;
td_u16 zone_col;
td_u16 zone_row;
ot_isp_af_peak_mode peak_mode;
ot_isp_af_square_mode square_mode;
ot_isp_af_crop crop;
ot_isp_af_crop fe_crop;
ot_isp_af_stats_pos stats_pos;
ot_isp_af_raw_cfg raw_cfg;
ot_isp_af_pre_filter_cfg pre_flt_cfg;
td_u16 high_luma_threshold
} ot_isp_af_cfg;
【成员】
成员名称 |
描述 |
|---|---|
af_en |
AF使能。 |
zone_col |
AF统计水平方向窗口个数,取值范围:[1, 17] |
zone_row |
AF统计垂直方向窗口个数,取值范围:[1, 15] |
peak_mode |
PEAK模式,决定分区间统计值是否进行求峰值处理。与square_mode共同影响分区间统计值。 |
square_mode |
平方模式,决定分区间水平和垂直方向统计值是否进行平方处理。与peak_mode共同影响分区间统计值。 |
crop |
AF 输入图像的BE裁剪配置。 |
fe_crop |
AF 输入图像的FE裁剪配置。 |
stats_pos |
AF统计信息位置配置,决定是在Bayer还是YUV域统计。 |
raw_cfg |
AF Bayer域配置,如果用户选择将AF模块放在Bayer域,那么需要配置这里。 |
pre_flt_cfg |
AF模块预滤波配置,此模块可以帮助消除画面中的椒盐噪声。 |
high_luma_threshold |
AF 高亮点统计值Threshold设置,取值范围:[0,0xFF] |
【注意事项】
分区间统计值的计算方式为:
peak_mode为OT_ISP_AF_STA_NORM且square_mode为OT_ISP_AF_STA_SUM_NORM模式时,对分区间内每个像素的滤波器输出值求和即为分区间统计值;
peak_mode为OT_ISP_AF_STA_NORM且square_mode为OT_ISP_AF_STA_SUM_SQUARE模式时,对分区间内每个像素的滤波器输出值求平方和即为分区间统计值;
peak_mode为OT_ISP_AF_STA_PEAK且square_mode为OT_ISP_AF_STA_SUM_NORM模式时,先对分区间内一行中每个像素的滤波器输出值取最大值,再对多行的最大值求和即为分区间统计值;
peak_mode为OT_ISP_AF_STA_PEAK且square_mode为OT_ISP_AF_STA_SUM_SQUARE模式时,先对分区间内一行中每个像素的滤波器输出值取最大值,再对多行的最大值求平方和即为分区间统计值。
分区间亮度统计值(y)的计算方式为:
对分区间内每个像素的亮度求和即为分区间亮度统计值(y)。
当ISP BE处于分块方式时,AF统计信息的水平方向窗口个数最小为BlockNum(BlockNum可以参考ISP 的proc信息)分块的个数,此时取值范围为[BlockNum, 17]。
【相关数据类型及接口】
无
ot_isp_af_peak_mode¶
【说明】
PEAK模式,决定分区间统计值是否进行求峰值处理。
【定义】
typedef enum {
OT_ISP_AF_STA_NORM = 0,
OT_ISP_AF_STA_PEAK ,
OT_ISP_AF_STA_BUTT
} ot_isp_af_peak_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AF_STA_NORM |
|
OT_ISP_AF_STA_PEAK |
|
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_af_square_mode¶
【说明】
平方模式,决定分区间统计值是否进行平方处理。
【定义】
typedef enum {
OT_ISP_AF_STA_SUM_NORM = 0,
OT_ISP_AF_STA_SUM_SQUARE,
OT_ISP_AF_STA_SUM_BUTT
} ot_isp_af_square_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AF_STA_SUM_NORM |
|
OT_ISP_AF_STA_SUM_SQUARE |
|
【注意事项】
采用Square模式,会对滤波器输出归一化后平方再做统计,如图1所示,input为滤波后输出像素值,output为处理后输出值,相比normal模式,在临近焦点附近可以得到比较陡峭的FV曲线,并且对幅值较小的噪声信号有一定的抑制作用,但也会使FV曲线平坦区域更加平坦,用户应该根据实际的场景需求来设定这个参数。
图 1 Square模式

【相关数据类型及接口】
无
ot_isp_af_crop¶
【说明】
对AF模块输入图像进行裁剪。
【定义】
typedef struct {
td_bool en;
td_u16 x;
td_u16 y;
td_u16 width;
td_u16 height;
} ot_isp_af_crop;
【成员】
成员名称 |
描述 |
|---|---|
en |
使能Crop,取值范围:[0, 1] |
x |
Crop X 起始位置,取值范围:[0, ImageWidth - 256] |
y |
Crop Y 起始位置,取值范围:[0, ImageHeight - 120] |
width |
Crop 宽度,8对齐,取值范围:[256, ImageWidth] |
height |
Crop 高度,2对齐,取值范围:[120, ImageHeight] |
【注意事项】
水平方向起始位置与Crop宽度之和应小于图像宽度,垂直方向起始位置与Crop高度之和应小于图像高度。
对于BE的AF统计信息,ISP BE 分块场景下,不支持AF CROP(输入图像裁剪)功能。
【相关数据类型及接口】
无
ot_isp_af_stats_pos¶
【说明】
配置AF模块统计位置。
【定义】
typedef enum {
OT_ISP_AF_STATS_AFTER_DGAIN = 0,
OT_ISP_AF_STATS_AFTER_DRC,
OT_ISP_AF_STATS_AFTER_CSC,
OT_ISP_AF_STATS_BUTT
} ot_isp_af_stats_pos;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_AF_STATS_AFTER_DGAIN |
将AF模块放在DGain后进行统计,属于RAW域。 |
OT_ISP_AF_STATS_AFTER_DRC |
将AF模块放在DRC及Dither后进行统计,属于RAW域。 |
OT_ISP_AF_STATS_AFTER_CSC |
将AF模块放在CSC后进行统计,属于YUV域。 |
【注意事项】
WDR模式下,非宽动态场景的Bayer域(即RAW域)统计信息无明显变化趋势,推荐使用YUV域统计信息。
AF的FE统计信息只支持DGain之后进行统计,而BE统计信息支持DGain、DRC和CSC之后进行统计,详见《ISP 图像调优指南》文档的ISP功能框图章节。
【相关数据类型及接口】
无
ot_isp_af_raw_cfg¶
【说明】
AF模块Bayer域配置。
【定义】
typedef struct {
td_u8 gamma_gain_limit;
td_u8 gamma_value;
ot_isp_bayer_format bayer_format;
} ot_isp_af_raw_cfg;
【成员】
成员名称 |
描述 |
|---|---|
gamma_gain_limit |
AF模块gamma限制。 取值范围:[0x0, 0x5] |
gamma_value |
AF模块gamma类型。 取值范围:[0x0, 0x6] |
bayer_format |
设置Bayer pattern,支持BAYER_RGGB,BAYER_GRBG,BAYER_GBRG,BAYER_BGGR四种。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_af_pre_filter_cfg¶
【说明】
AF模块预滤波器配置。
【定义】
typedef struct {
td_bool en;
td_u16 strength;
} ot_isp_af_pre_filter_cfg;
【成员】
成员名称 |
描述 |
|---|---|
en |
使能AF 预滤波模块。 |
strength |
设置滤波强度,取值范围:[0x0, 0xFFFF] |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_af_level_depend¶
【说明】
AF Level Depend Gain 模块配置。
【定义】
typedef struct {
td_bool en;
td_u16 threshold_low;
td_u16 gain_low;
td_u16 slope_low;
td_u16 threshold_high;
td_u16 gain_high;
td_u16 slope_high;
} ot_isp_af_level_depend;
【成员】
成员名称 |
描述 |
|---|---|
en |
使能Level Depend Gain模块。 |
threshold_low |
设置Dark Side Threshold,取值范围:[0x0, 0xFF] |
gain_low |
设置Dark Side Minimum Gain,取值范围:[0x0, 0xFF] |
slope_low |
设置Dark Side Slope,取值范围:[0x0, 0xF]。 |
threshold_high |
设置Bright Side Threshold,取值范围:[0x0, 0xFF] |
gain_high |
设置Bright Side Minimum Gain,取值范围:[0x0, 0xFF] |
slope_high |
设置Bright Side Slope,取值范围:[0x0, 0xF] |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_af_coring¶
【说明】
AF Coring 模块配置。
【定义】
typedef struct {
td_u16 threshold;
td_u16 slope;
td_u16 limit;
} ot_isp_af_coring;
【成员】
成员名称 |
描述 |
|---|---|
threshold |
设置Coring Threshold,取值范围:[0x0, 0x7FF] |
slope |
设置Coring Slope,取值范围:[0x0, 0xF] |
limit |
设置Coring Maximum Output,取值范围:[0x0, 0x7FF] |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_af_h_param¶
【说明】
AF统计水平滤波器IIR参数设置。
【定义】
typedef struct {
td_bool narrow_band_en;
td_bool iir_en[OT_ISP_IIR_EN_NUM];
td_u8 iir_shift;
td_s16 iir_gain[OT_ISP_IIR_GAIN_NUM];
td_u16 iir_shift_lut[OT_ISP_IIR_SHIFT_NUM];
ot_isp_af_level_depend level_depend;
ot_isp_af_coring coring;
} ot_isp_af_h_param;
【成员】
成员名称 |
描述 |
|---|---|
narrow_band_en |
IIR滤波器窄带宽使能。 |
iir_en[OT_ISP_IIR_EN_NUM] |
IIR级联中IIR的使能。 |
iir_shift |
IIR滤波器整体位移量,取值范围:[0, 63] |
iir_gain[OT_ISP_IIR_GAIN_NUM] |
IIR滤波器系数,用于控制IIR滤波器的频率响应。 取值范围:Gain0:[0, 255];Others:[-511, 511] |
iir_shift_lut[OT_ISP_IIR_SHIFT_NUM] |
IIR滤波器移位调整,取值范围:[0, 0x7] |
level_depend |
IIR滤波器Level Depend Gain模块配置。 |
coring |
IIR滤波器Coring模块配置。 |
【注意事项】
iir_gain[0]为无符号8bit数,其他iir_gain[1]-[6]为有符号10bit数,且不能等于-512。IIR使能、narrow_band_en使能、滤波器系数以及iir_shift通过PQ Tools可以生成,用户可以根据实际需要调节LDG和Coring模块以获取最优FV统计值输出。
【相关数据类型及接口】
无
ot_isp_af_v_param¶
【说明】
AF统计垂直滤波器FIR参数设置。
【定义】
typedef struct {
td_s16 fir_gain[OT_ISP_FIR_GAIN_NUM];
ot_isp_af_level_depend level_depend;
ot_isp_af_coring coring;
} ot_isp_af_v_param;
【成员】
成员名称 |
描述 |
|---|---|
fir_gain[OT_ISP_FIR_GAIN_NUM] |
FIR滤波器系数,取值范围:[-31, 31]。用于控制FIR滤波器的频率响应。 |
level_depend |
FIR滤波器Level Depend Gain模块配置。 |
coring |
FIR 滤波器Coring模块配置。 |
【注意事项】
FIR滤波器系数通过PQ Tools可以生成,用户可以根据实际需要调节LDG和Coring模块以获取最优垂直FV统计值输出。
【相关数据类型及接口】
无
ot_isp_af_fv_param¶
【说明】
AF统计结果输出格式参数。
【定义】
typedef struct {
td_u16 acc_shift_y;
td_u16 acc_shift_h[OT_ISP_ACC_SHIFT_H_NUM];
td_u16 acc_shift_v[OT_ISP_ACC_SHIFT_V_NUM];
td_u16 hl_cnt_shift;
} ot_isp_af_fv_param;
【成员】
成员名称 |
描述 |
|---|---|
acc_shift_y |
亮度Y统计值移位寄存器值,取值范围:[0, 0xF] |
acc_shift_h[OT_ISP_ACC_SHIFT_H_NUM] |
水平IIR滤波值统计值移位寄存器值,取值范围:[0, 0xF] |
acc_shift_v[OT_ISP_ACC_SHIFT_V_NUM] |
垂直FIR滤波值统计值移位寄存器值,取值范围:[0, 0xF] |
hl_cnt_shift |
高亮计数器统计值移位寄存器值,取值范围:[0, 0xF] |
【注意事项】
FV值用unsigned 16bit表示,当场景细节较多或噪声较多时,FV值可能会溢出,这就需要对输出进行向右移位以保证输出在合理范围。用户根据自己的需求对相应的shift值进行调节。
【相关数据类型及接口】
无
ot_isp_focus_zone¶
【说明】
定义AF统计信息参数。
【定义】
typedef struct {
td_u16 v1;
td_u16 h1;
td_u16 v2;
td_u16 h2;
td_u16 y;
td_u16 hl_cnt;
} ot_isp_focus_zone;
【成员】
成员名称 |
描述 |
|---|---|
v1 |
分区间统计的AF垂直方向奇数列FIR滤波器的统计值。 |
h1 |
分区间统计的AF水平方向奇数行IIR滤波器的统计值。 |
v2 |
分区间统计的AF垂直方向偶数列FIR滤波器的统计值。 |
h2 |
分区间统计的AF水平方向偶数行IIR滤波器的统计值。 |
y |
分区间统计的AF亮度统计值,区块中每个像素点的亮度累加值。 |
hl_cnt |
分区间统计的AF亮度超阈值计数器值。 |
【注意事项】
y为每个块的Y分量累加值,用户可以用此值辅助AF算法,比如某些块中含有高亮光源,容易对FV值产生干扰,可根据亮度情况降低块FV对全局FV的影响,亦可用这些块实现一个移动侦测算法,用于检测聚焦过程中的一些运动干扰,用户可以根据自己AF算法的需求使用这个字段的统计信息。
【相关数据类型及接口】
无
ot_isp_fe_focus_stats¶
【说明】
定义FE AF统计信息。
【定义】
typedef struct {
ot_isp_focus_zone zone_metrics[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_AF_ZONE_ROW][OT_ISP_AF_ZONE_COLUMN];
} ot_isp_fe_focus_stats;
【成员】
成员名称 |
描述 |
|---|---|
zone_metrics |
ISP AF FE分块统计信息。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_be_focus_stats¶
【说明】
定义BE AF统计信息。
【定义】
typedef struct {
ot_isp_focus_zone zone_metrics[OT_ISP_AF_ZONE_ROW][OT_ISP_AF_ZONE_COLUMN];
} ot_isp_be_focus_stats;
【成员】
成员名称 |
描述 |
|---|---|
zone_metrics |
ISP AF BE分块统计信息。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_focus_grid_info¶
【说明】
定义AF分区间统计信息的坐标信息。
【定义】
typedef struct {
td_u16 grid_y_pos[OT_ISP_AF_ZONE_ROW + 1];
td_u16 grid_x_pos[OT_ISP_AF_ZONE_COLUMN + 1];
td_u8 status;
} ot_isp_focus_grid_info;
【成员】
成员名称 |
描述 |
|---|---|
grid_y_pos |
AF每个分区Y方向坐标值。 |
grid_x_pos |
AF每个分区X方向坐标值。 |
status |
AF统计信息坐标更新状态。 |
【注意事项】
非分块场景下,AF分区间统计信息为zone_col * zone_row个均匀分区的统计信息。
BE分块场景下,AF分区间统计信息的分区大小是不均匀的,若按照均匀分区间的方式显示AF统计信息,会出现图像与统计信息不对应的情况,为避免这种问题,故提供每个分区的起始坐标信息。
【相关数据类型及接口】
无
ot_isp_af_stats¶
【说明】
定义FE和BE的AF统计信息。
【定义】
typedef struct {
ot_isp_fe_focus_stats fe_af_stat;
ot_isp_be_focus_stats be_af_stat;
ot_isp_focus_grid_info fe_af_grid_info;
ot_isp_focus_grid_info be_af_grid_info;
td_u64 pts;
} ot_isp_af_stats;
【成员】
成员名称 |
描述 |
|---|---|
fe_af_stat |
ISP FE的AF统计信息。 |
be_af_stat |
ISP BE的AF统计信息。 |
fe_af_grid_info |
ISP FE 的AF分区间统计信息的坐标。 |
be_af_grid_info |
ISP BE 的AF分区间统计的信息坐标。 |
pts |
AF统计信息对应的raw pts。 |
【注意事项】
线性模式下离线模式推荐使用FE的统计信息(实时性更佳)。
WDR模式下推荐使用BE DRC后的统计信息(参考ot_isp_af_stats_pos)。
SS928V100中AF支持从FE0获取统计信息,不支持从其他FE通道获取统计信息。请参考《ISP 图像调优指南》第2章关于ISP FE的说明。
YUV模式不支持获取统计信息pts。
pts每帧都会覆盖更新,若需要获取到每一帧raw对应的统计信息pts,则需要以帧间隔调用此接口;否则,统计信息pts与raw pts可能不是一一对应的。
VI离线时,如果需要获取到AF pts对应帧的AF BE统计信息,使用ss_mpi_isp_get_vd_time_out接口获取到帧起始中断后马上调用接口获取AF统计信息。
VI离线时,如果需要减少一帧AF BE统计信息获取延时(获取同一帧的AF FE、BE统计信息),使用ss_mpi_isp_get_vd_time_out接口获取到帧结束中断后马上调用接口获取AF统计信息。
AF统计信息中的宏定义OT_ISP_WDR_MAX_FRAME_NUM,表示当前统计信息所在的帧索引。默认情况下,只有索引0有统计信息。但是当pipe reverse之后,AF统计信息的索引也要相应调整。
【相关数据类型及接口】
无
Debug¶
概述¶
ISP提供Debug MPI供客户调用,以方便客户定位相关图像质量问题。
功能描述¶
Debug提供记录ISP在运行过程中的状态信息,以方便记录在ISP运行过程中出现的异常状态,需要记录的帧数可以由用户自己指定。
API参考¶
ss_mpi_isp_set_debug:设置ISP调试接口。
ss_mpi_isp_get_debug:获取ISP调试接口。
ss_mpi_isp_set_debug¶
【描述】
设置ISP调试信息属性。
【语法】
td_s32 ss_mpi_isp_set_debug(ot_vi_pipe vi_pipe, const ot_isp_debug_info *isp_debug);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
isp_debug |
调试信息。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
调试信息的成员变量为SYS,可以设置使能开关。
需要用户来分配内存以存储相应的调试信息,且需要将分配的内存地址作为输入传入。
调用该接口的进程需要与isp主进程是不同进程。
【举例】
td_s32 ret = 0;
td_u32 depth = 10;
td_u32 size = 0;
ot_isp_debug_info debug_ifo;
ot_void *virt_aAddr = OT_NULL; /* virt addr malloc memory */
td_u64 phys_Addr;
size = sizeof(ot_isp_debug_attr) + sizeof(ot_isp_debug_status) * depth;
ret = ss_mpi_sys_mmz_alloc(&phys_Addr, &virt_aAddr, OT_NULL, OT_NULL, size);
if (ret != TD_SUCCESS) {
printf("Buf not enough!\n");
return TD_FAILURE;
}
debug_ifo.debug_en = TD_TRUE;
debug_ifo.depth = depth;
debug_ifo.phys_addr = phys_Addr;
ret = ss_mpi_isp_set_debug(vi_pipe, &debug_ifo);
if (ret != TD_SUCCESS) {
printf("ss_mpi_isp_set_debug failed 0x%x!\n", ret);
return TD_FAILURE;
}
【相关主题】
无
ss_mpi_isp_get_debug¶
【描述】
获取ISP调试信息属性。
【语法】
td_s32 ss_mpi_isp_get_debug(ot_vi_pipe vi_pipe, ot_isp_debug_info * isp_debug);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
isp_debug |
调试信息。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libot_isp.a、libss_isp.a
【注意】
无
【举例】
无
数据类型¶
ot_isp_debug_info:定义ISP调试信息属性。
ot_isp_debug_info¶
【说明】
定义ISP调试信息属性。
【定义】
typedef struct {
td_bool debug_en;
td_u64 phys_addr;
td_u32 depth;
} ot_isp_debug_info;
【成员】
成员名称 |
描述 |
|---|---|
debug_en |
使能调试。 |
phys_addr |
调试信息的物理地址。 |
depth |
调试深度,即需要获取调试信息的帧数。 |
【注意事项】
无
【相关数据类型及接口】
无
错误码¶
ISP API错误码如下所示。
表 1 ISP API错误码
错误代码 |
宏定义 |
描述 |
|---|---|---|
0xa01c800a |
OT_ERR_ISP_NULL_PTR |
空指针错误 |
0xa01c8007 |
OT_ERR_ISP_ILLEGAL_PARAM |
输入参数无效 |
0xa01c800c |
OT_ERR_ISP_NOT_SUPPORT |
当前ISP不支持 |
0xa01c8020 |
OT_ERR_ISP_TIME_OUT |
等待超时 |
0xa01C8043 |
OT_ERR_ISP_SNS_UNREGISTER |
Sensor未注册 |
0xa01c8041 |
OT_ERR_ISP_MEM_NOT_INIT |
外部寄存器没有初始化 |
0xa01c8040 |
OT_ERR_ISP_NOT_INIT |
ISP没有初始化 |
0xa01c8044 |
OT_ERR_ISP_INVALID_ADDR |
无效地址 |
0xa01c8042 |
OT_ERR_ISP_ATTR_NOT_CFG |
属性未配置 |
0xa01c8045 |
OT_ERR_ISP_NOMEM |
内存不足 |
0xa01c8046 |
OT_ERR_ISP_NO_INT |
ISP无中断 |
0xa01c8047 |
OT_ERR_ISP_ALG_NOT_INIT |
ISP算法没有初始化 |
Proc 调试信息说明¶
概述¶
调试信息采用了proc文件系统,可实时反映当前系统的运行状态,所记录的信息可供问题定位及分析时使用。
【文件目录】
/proc/umap/isp
【开启方法】
调用ss_mpi_isp_set_ctrl_param设置ISP控制参数proc_param = n,其中n=0关闭proc,非0表示每隔n帧更新一次proc。
调用ss_mpi_isp_set_ctrl_param设置update_pos = 0或update_pos = 1,默认值为0
update_pos =0表示ISP中断配置寄存器的位置是使用帧起始中断update_pos =1表示ISP中断配置寄存器的位置是使用帧结束中断
调用ss_mpi_isp_set_mod_param设置interrupt_bottom_half中断底半部,默认值为0
interrupt_bottom_half =0表示ISP内核态处理(读统计信息和配置sensor和ISP同步寄存器)在中断服务程序中完成
interrupt_bottom_half =1表示ISP内核态处理(读统计信息和配置sensor和ISP同步寄存器)在中断下半部完成
注意:
开启Proc信息会消耗CPU资源。推荐设为30帧更新一次,或仅Debug时开启。
拼接sync模式时,拼接组内的PIPE共同使用拼接组内主pipe对应ISP的配置,proc以主pipe为准。
【信息查看方法】
在控制台上可以使用cat命令查看信息,例如cat /proc/umap/isp;也可以使用其他常用的文件操作命令,例如cp /proc/umap/isp ./ -f,将ISP的proc文件拷贝到当前目录。
在应用程序中可以将上述文件当作普通只读文件进行读操作,例如fopen、fread等。
说明: 参数在描述时有以下2种情况需要注意:
取值为{0, 1}的参数,如未列出具体取值和含义的对应关系,则参数为1时表示肯定,为0时表示否定。
取值为{aaa, bbb, ccc}的参数,未列出具体取值和含义的对应关系,但可直接根据取值aaa、bbb或ccc判断参数含义。
ISP¶
【调试信息】
[ISP] Version: [V1.0.0.0 B00 Release], Build Time[Jun 2 2021, 19:57:53]
------------------------------------------------------------------------------
------------------------------ isp proc pipe[0] -----------------------------
------------------------------------------------------------------------------
-----------------------------module/control param-----------------------------------------------------
proc_param stat_intvl update_pos int_bothalf int_timeout pwm_number run_wakeup
30 1 0 0 200 3 0
port_int_delay quick_start ldci_tprflten long_frm_int_en be_buf_num ob_update_pos alg_run_sel
0 0 0 0 8 frame end normal
-----------------------------isp mode------------------------------------------------------------------
stitch_mode running_mode block_num
normal online 1
-----------------------------sensor info----------------------------------------------------------------
sensor_type dev
i2c 2
-----------------------------drv info-------------------------------------------------------------------
vi_pipe int_cnt int_t max_int_t int_gap_t max_gap_t int_rat reset_cnt be_stat_lost
0 214 157 171 33296 33305 31 2 0
int_type pt_int_cnt pt_int_t pt_max_int_t pt_int_gap_t pt_max_gap_t pt_int_rat sensor_cfg_t sensor_max_t
start 0 0 0 0 0 0 3 35
sync_cfg_gap sync_cfg_gap_max sync_cfg_gap_min ldci_comp_err_cnt
33301 33309 33285 0
-----------------------------be_cfg phy addr--------------------------------------------------------------
be_cfg[0] be_cfg[1] be_cfg[2] be_cfg[3]
0x1064b0000 0x106536100 0x1065bc200 0x106642300
be_cfg[4] be_cfg[5] be_cfg[6] be_cfg[7]
0x1066c8400 0x10674e500 0x1067d4600 0x10685a700
-----------------------------pubattr info--------------------------------------------------------------
wnd_x wnd_y wnd_w wnd_h sns_w sns_h sns_mode flip
0 24 3840 2160 3840 2160 0 0
mirror crop_en crop_x crop_y crop_w crop_h bayer
0 0 0 0 3840 2180 bggr
----------------------------------------send raw isp frame info---------------------------------------------------------
fe_id exp_time isp_dg again dgain vi_send_raw_cnt
0 0 1036 9667 1024 283
1 0 0 0 0 283
2 0 0 0 0 283
fswdr mode
normal
----------------------------------------share mem info------------------------------------------------------
share_all_en share[0] share[1] share[2] share[3] share[4]
0 1623
[AE] Version: [SS928V100V1.0.0.0 B010 Release], Build Time[Feb 21 2022, 19:04:13]
-----ae info-------------------------------------------------------------------
sys_gain line ae_inter in_crmnt exp 1st_time
5272 2248 1 256 162234 466666
comp ev_bias ori_ave offset speed tole error fps real_fps b_delay w_delay
56 1024 45 13 64 2 -2 30.00 3000 8 0
max_line max_linet max_agt max_dgt max_idgt max_sgt manu_en ma_line ma_ag ma_dg ma_ispdg
2248 65535 62416 1024 261120 15916080 0 0 0 0 0
wdr_mode anflick slow_mod gain_th au_ir_en ir_type ma_ir_en dbg_ir_st
linear 0 1 15916080 0 dc_iris 0 0
node_id int_time sys_gain iris_ape up_stgy dw_stgy mltply
0 2 1024 1 0 4 2048
1 2248 1024 1 1 0 2301952
2 2248 15916080 1 4 1 35779347840
-----isp ae info----------------------------------------------------------------
again dgain isp_dg iso
5191 1024 260 514
int_time[0] int_time[1] int_time[2] int_time[3] ae_inter sns_ratio
532859 0 0 0 1 64
piris_valid piris_pos piris_gain hmax_times vmax
0 0 1 14814 2250
[AWB] Version: [SS928V100V1.0.0.0 B010 Release], Build Time[Feb 21 2022, 19:04:17]
-----awb info------------------------------------------------------------------
manuen sat zones speed
0 128 32 256
-----isp awb info---------------------------------------------------------------
gain0 gain1 gain2 gain3 cotemp
0x205 0x100 0x100 0x16d 6802
color00 color01 color02 color10 color11 color12 color20 color21 color22
0x241 0x8128 0x8019 0x8068 0x1a9 0x8041 0x5 0x8127 0x222
-----------------------------dpc info-----------------------------------
enable strength blend_ratio
1 12 0
-----------------------------crosstalk info-------------------------------------------------------------
enable np_offset threshold strength
1 1108 300 128
-----------------------------framewdr info------------------------------------------------
mdt_en long_thr short_thr md_thr_low_gain md_thr_high_gain
1 3008 4032 0 0
-----------------------------fpn correct info--------------------------------------------
en op_type strength offset
0 -- -- --
-----------------------------black level actual info--------------------------------------
mode user_en isp_blc_r isp_blc_gr isp_blc_gb isp_blc_b sns_blc_r sns_blc_gr sns_blc_gb sns_blc_b
auto 0 1024 1024 1024 1024 1024 1024 1024 1024
offset ob_x ob_y ob_width ob_height blc_clamp_info
0 0 0 3840 20 1
-----------------------------bayernr info------------------------------------------------------------------------
enable tnr_enable nr_lsc_enable coarse_str0 coarse_str1 coarse_str2 coarse_str3
1 1 0 108 108 108 108
sfm0_ex_str sfm_threshold bnr_sfm0_mode sfm0_ex_de_prot sfm0_norm_ede_str sfm1_de_prot sfm1_coarse_str
13 255 1 16 0 16 32
fine_strength coring_wgt coring_mot_thresh tss tfr tfs
128 50 0 0 255 255
md_mode md_anti_fli md_static_ratio sfr_r sfr_g sfr_b md_static_fine_str
0 64 32 26 32 26 32
user_define_md user_define_slope user_define_dark user_define_color
0 0 90 16
-----------------------------acs info------------------------------------------------------------------
enable y_strength run_interval lock_enable
0 256 2 0
-----------------drc info------------------------------------------------------------------
en manu_en strength
0 0 0
-----------------------------lcac info-----------------------------------
enable cr_str cb_str
1 0 3
-----------------------------acac info-----------------------------------
enable edge_thr[0] edge_thr[1] edge_gain purple_upper purple_lower
0 0 0 0 0 0
purple_sat_thr purple_alpha edge_alpha fcc_y_str fcc_rb_str
0 0 0 0 0
-----------------------------bayershp info------------------------------------------
enable edge_filt_str texture_max edge_max overshoot undershoot g_chn_gain
1 0 150 150 80 100 50
luma_wgt 0--15:
23 23 23 23 23 29 29 30 30 30 31 31 31 31 31 31
luma_wgt 16--31:
31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
edge_mf_strength 0--15:
75 75 75 76 77 78 79 80 82 86 90 94 98 101 102 104
edge_mf_strength 16--31:
105 107 108 109 111 112 114 115 117 118 120 120 120 120 120 120
texture_mf_strength 0--15:
84 84 84 82 78 74 70 69 68 68 68 67 67 67 67 67
texture_mf_strength 16--31:
66 66 65 65 63 61 59 57 55 53 51 49 47 45 43 41
edge_hf_strength 0--15:
86 86 86 86 85 85 85 85 84 84 83 90 96 103 110 116
edge_hf_strength 16--31:
123 130 135 139 143 147 151 155 159 162 166 167 167 167 167 167
texture_hf_strength 0--15:
84 84 84 80 72 64 56 53 53 52 51 50 49 49 48 47
texture_hf_strength 16--31:
46 45 45 44 44 43 42 42 42 41 40 40 40 39 38 38
-----------------------------demosaic info------------------------------------------------
enable nondir_str nondir_mf_str nondir_hf_str de_smth_range
1 48 68 1 1
color_noise_thdf color_noise_strf color_noise_thdy color_noise_stry
0 8 1 10
----------------------------anti false color info----------------------------------------
en threshold strength
1 12 12
-----------------------------sharpen info-------------------------------------------------
sharpen_en
1
luma_wgt 0--7:
20 20 20 20 20 20 20 23
luma_wgt 8--15:
25 28 31 31 31 31 31 31
luma_wgt 16--23:
31 31 31 31 31 31 31 31
luma_wgt 24--31:
31 31 31 31 31 31 31 31
texture_strength 0--7:
158 188 217 251 271 281 278 274
texture_strength 8--15:
270 265 260 260 255 250 245 240
texture_strength 16--23:
235 230 225 224 219 219 214 213
texture_strength 24--31:
208 199 193 184 174 169 159 150
edge_strength 0--7:
195 200 220 230 240 250 260 270
edge_strength 8--15:
280 280 285 290 290 295 295 295
edge_strength 16--23:
295 295 295 290 285 280 275 265
edge_strength 24--31:
250 240 220 200 180 160 140 125
motion_texture_strength 0--7:
158 188 217 251 271 281 278 274
motion_texture_strength 8--15:
270 265 260 260 255 250 245 240
motion_texture_strength 16--23:
235 230 225 224 219 219 214 213
motion_texture_strength 24--31:
208 199 193 184 174 169 159 150
motion_edge_strength 0--7:
195 200 220 230 240 250 260 270
motion_edge_strength 8--15:
280 280 285 290 290 295 295 295
motion_edge_strength 16--23:
295 295 295 290 285 280 275 265
motion_edge_strength 24--31:
250 240 220 200 180 160 140 125
texture_freq edge_freq over_shoot under_shoot shoot_sup_str detail_ctrl
188 100 62 62 7 128
motion_texture_freq motion_edge_freq motion_over_shoot motion_under_shoot
188 100 62 62
edge_filt_str edge_filt_max_cap r_gain g_gain b_gain skin_gain
60 18 20 32 24 31
shoot_sup_adj detail_ctrl_thr max_sharp_gain skin_umax skin_umin skin_vmax skin_vmin
8 160 30 128 100 150 135
-----------------------------ldci info------------------------------------------------------------------------------
enable manual gauss_lpf_sigma he_pos_wgt he_pos_sigma he_pos_mean he_neg_wgt he_neg_sigma he_neg_mean blc_ctrl
1 0 36 42 70 0 45 80 118 20
-----------------ca info-----------------------------------
enable iso_ratio
1 1024
-----------------crb info-----------------------------------
enable r_gain b_gain
0 1024 1024
-----------------------------pregamma info-----------------------------------------------
enable
0
----------------------------------- isp proc end[0] ------------------------
-----------------------------------------------------------------------------
【调试信息分析】
记录当前ISP模块的使用情况。
【参数说明】
参数 |
描述 |
|
|---|---|---|
module/control param |
proc_param |
表示ISP Proc信息更新的次数,proc_param为n表示每隔n帧更新一次ISP的PROC信息。 |
stat_intvl |
表示统计信息更新频率,值为n表示每隔n帧更新一次统计信息。 |
|
update_pos |
表示中断更新位置是用帧起始中断还是在帧结束中断。 |
|
int_bothalf |
表示统计信息读取是否在中断执行。 |
|
int_timeout |
表示获取ISP中断超时的最大时间,单位ms。 |
|
pwm_number |
表示pwm使用情况。 |
|
run_wakeup |
表示唤醒ISP的中断类型。 |
|
port_int_delay |
表示Port中断延时时间。单位详见ot_isp_ctrl_param结构体的换算介绍 |
|
quick_start |
表示ISP是否采用快速启动 |
|
ldci_tprflten |
表示LDCI是否使能时域滤波 |
|
long_frm_int_en |
表示WDR 时,ISP是否响应长帧中断 |
|
be_buf_num |
表示离线模式下,BE config buffer的个数。仅离线模式有效。 |
|
ob_update_pos |
表示读取ob区统计信息的位置。 |
|
alg_run_sel |
表示ISP算法运行的选择。 |
|
isp mode |
stitch_mode |
ISP拼接模式。 |
running_mode |
ISP运行模式。 |
|
block_num |
ISP BE的分块数目 |
|
sensor info |
sensor_type |
Sensor与ISP使用的接口通信类型 |
dev |
Sensor绑定的I2C/SPI设备号,其值为-1时,表示当前vi_pipe的AE不配置sensor |
|
drv info |
vi_pipe |
vi_pipe号。 |
int_cnt |
ISP通道中断次数。 |
|
int_t |
ISP中断占用时间。单位:us |
|
max_int_t |
ISP中断的最大占用时间。单位:us |
|
int_gap_t |
ISP相邻两中断之间的时间间隔。单位:us |
|
max_gap_t |
ISP相邻两中断之间的最大时间间隔。单位:us |
|
int_rat |
每秒ISP中断个数。 |
|
reset_cnt |
ISP复位的次数。 |
|
be_stat_lost |
BE统计信息不及时次数。 |
|
int_type |
中断类型。 |
|
pt_int_cnt |
Port通道的中断次数。 |
|
pt_int_t |
Port中断占用时间。单位:us |
|
pt_max_int_t |
Port中断的最大占用时间。单位:us |
|
pt_int_gap_t |
Port相邻两中断之间的时间间隔。单位:us |
|
pt_max_gap_t |
Port相邻两中断之间的最大时间间隔。单位:us |
|
pt_int_rat |
每秒Port中断个数。 |
|
sensor_cfg_t |
Sensor配置耗时。单位:us |
|
sensor_max_t |
Sensor配置的最大时间,单位:us |
|
sync_cfg_gap |
同步节点配置时间间隔。单位:us |
|
sync_cfg_gap_max |
同步节点配置时间最大间隔。单位:us |
|
sync_cfg_gap_min |
同步节点配置时间最小间隔。单位:us |
|
ldci_comp_err_cnt |
LDCI曝光补偿参数异常次数。 |
|
becfg phy addr |
be_cfg |
离线模式下,ISP BE寄存器配置buffer的物理地址。 |
pubattr info |
wnd_x |
水平方向起始位置。 |
wnd_y |
垂直方向起始位置。 |
|
wnd_w |
图像宽度。 |
|
wnd_h |
图像高度。 |
|
sns_w |
Sensor图像宽度。 |
|
sns_h |
Sensor图像高度。 |
|
sns_mode |
Sensor初始化序列选择值。 |
|
flip |
flip使能值。 |
|
mirror |
mirror使能值。 |
|
crop_en |
mipi裁剪使能值。 |
|
crop_x |
mipi裁剪水平方向起始位置。 |
|
crop_y |
mipi裁剪垂直方向起始位置。 |
|
crop_w |
mipi裁剪宽度。 |
|
crop_h |
mipi裁剪高度。 |
|
bayer |
输入Bayer图像数据格式。 |
|
send raw isp frame info |
fe_id |
fe通道号。 |
exp_time |
fe通道raw绑定的曝光时间。单位:us |
|
isp_dg |
fe通道raw绑定的isp_dg。 |
|
again |
fe通道raw绑定的again。 |
|
dgain |
fe通道raw绑定的dgain。 |
|
vi_send_raw_cnt |
送帧的帧数。 |
|
fswdr mode |
frame switch wdr模式。 |
|
share mem info |
share_all_en |
share all使能。 |
share[ ] |
ISP share 的进程id。 |
|
ae info |
sys_gain |
系统增益,10bit精度。 |
line |
Sensor曝光时间,以行为单位。 |
|
line_ss |
Sensor短帧曝光时间,以行为单位,仅在WDR模式支持。 |
|
line_s |
Sensor次短帧曝光时间,以行为单位,仅在WDR模式支持。 |
|
line_l |
Sensor次长帧曝光时间,以行为单位,仅在WDR模式支持。 |
|
line_ll |
Sensor长帧曝光时间,以行为单位,仅在WDR模式支持。 |
|
ae_inter |
AE算法的运行间隔,2表示每2帧运行一次AE。 |
|
in_crmnt |
当前曝光量相比上帧曝光量增加的比例(8bit精度)。 |
|
exp |
当前曝光量,为快门、增益、光圈值的乘积。 |
|
1sttime |
AE第一次稳定的时间,以us为单位。 |
|
wdr_exp_coef |
基于原始亮度目标值调整的曝光系数,仅在使能advance ae时有效,值越小,图像整体亮度越低。 |
|
comp |
自动曝光调整时对曝光补偿量。 |
|
ev_bias |
自动曝光调整时的曝光偏差值。 |
|
ori_ave |
根据256段直方图计算出来的画面平均亮度。 |
|
offset |
AE根据统计信息对平均亮度的偏移。 |
|
speed |
自动曝光调整时的初始步长。 |
|
tole |
自动曝光调整时对曝光量的容忍偏差。 |
|
error |
自动曝光调整时平均亮度的偏差。 |
|
fps |
基准帧率。 |
|
real_fps |
实际帧率。 |
|
b_delay |
图像亮度低于目标亮度时,AE调节的等待时间(单位:帧) |
|
w_delay |
图像亮度高于目标亮度时,AE调节的等待时间(单位:帧) |
|
max_line |
Sensor支持的最大曝光时间,以行为单位。 |
|
max_linet |
用户配置的最大曝光时间,以行为单位 |
|
max_agt |
用户配置的最大Sensor模拟增益。 |
|
max_dgt |
用户配置的最大Sensor数字增益。 |
|
max_idgt |
用户配置的最大Isp数字增益。 |
|
max_sgt |
用户配置的最大系统增益。 |
|
manu_en |
手动曝光开关。 |
|
ma_line |
手动曝光时间开关。 |
|
ma_ag |
手动曝光的Sensor模拟增益开关。 |
|
ma_dg |
手动曝光的Sensor数字增益开关。 |
|
ma_ispdg |
手动曝光的Isp数字增益开关。 |
|
wdr_mode |
WDR模式。 |
|
anflick |
自动抗闪开关。 |
|
slow_mod |
自动降帧模式。 |
|
gain_th |
进入自动降帧时(SLOW_SHUTTER mode)的系统增益。 |
|
au_ir_en |
自动光圈使能开关。 |
|
ir_type |
光圈类型。 |
|
ma_ir_en |
手动光圈使能开关。 |
|
dbg_ir_st |
光圈调试状态,0为Keep,1为Open,2为Close。 |
|
exp_ratio0 |
短帧/次短帧的曝光比。 |
|
exp_ratio1 |
次长帧/次短帧的曝光比。 |
|
exp_ratio2 |
长帧/次长帧的曝光比。 |
|
node_id |
节点Id号。 |
|
int_time |
节点曝光时间,以行为单位。 |
|
sys_gain |
节点增益,包括Sensor模拟、数字与ISP增益。 |
|
iris_ape |
节点光圈大小,仅支持P-Iris模式。 |
|
up_stgy |
AE上行路线的分配策略。 |
|
dw_stgy |
AE下行路线的分配策略。 |
|
mltply |
分配节点快门、增益、光圈值的乘积。 |
|
node_idsf |
短帧节点Id号。 |
|
int_time_sf |
短帧节点曝光时间,以行为单位。 |
|
sys_gain_sf |
短帧节点增益,包括Sensor模拟、数字与ISP增益。 |
|
iris_ape_sf |
短帧节点光圈大小,仅支持P-Iris模式。 |
|
up_stgy_sf |
短帧AE上行路线的分配策略。 |
|
dw_stgy_sf |
短帧AE下行路线的分配策略。 |
|
mltply_sf |
短帧分配节点快门、增益、光圈值的乘积。 |
|
isp ae info |
again |
Sensor模拟增益,10bit精度。 |
dgain |
Sensor数字增益,10bit精度。 |
|
again_sf |
Sensord短帧模拟增益,10bit精度。仅在WDR模式支持。 |
|
dgain_sf |
Sensor短帧数字增益,10bit精度。仅在WDR模式支持。 |
|
isp_dg |
ISP数字增益,10bit精度。 |
|
isp_dg_sf |
短帧ISP数字增益,10bit精度。 |
|
iso |
ISO值,表示系统增益,以常数100乘以倍数为单位,例如系统中sensor的增益为2倍,ISP的增益为1倍,那么整个系统的ISO值计算方式为:2*1*100=200,即系统ISO为200,本文档中涉及到的ISO都是采用这种计算方法。 |
|
iso_sf |
短帧ISO值,表示短帧的系统增益。仅在WDR模式支持。 |
|
int_time |
节点曝光时间,以行为单位。 |
|
ae_inter |
AE算法的运行间隔,2表示每2帧运行一次AE。 |
|
sns_ratio |
lhcg模式下sensor内部的基准曝光比,根据相应sensor手册来配置。 |
|
wdr_gain[0] |
短帧WdrGain。 |
|
wdr_gain[1] |
次短帧WdrGain。 |
|
wdr_gain[2] |
次长帧WdrGain。 |
|
wdr_gain[3] |
长帧WdrGain。 |
|
fswdr_mode |
frame switch wdr 模式 |
|
piris_valid |
p光圈使能。 |
|
piris_pos |
p光圈位置。 |
|
piris_gain |
p光圈打开大小对应的gain值。 |
|
hmax_times |
sensor一行曝光对应的时间,单位:ns |
|
vmax |
sensor的最大曝光行数。 |
|
awb info |
manuen |
手动白平衡开关。 |
sat |
饱和度值。 |
|
zones |
自动白平衡算法选择。 |
|
speed |
自动白平衡收敛速度。 |
|
isp awb info |
gain0 |
白平衡R通道增益。 |
gain1 |
白平衡Gr通道增益。 |
|
gain2 |
白平衡Gb通道增益。 |
|
gain3 |
白平衡B通道增益。 |
|
cotemp |
当前检测的色温。 |
|
color00 |
色彩还原矩阵RR值。 |
|
color01 |
色彩还原矩阵RG值。 |
|
color02 |
色彩还原矩阵RB值。 |
|
color10 |
色彩还原矩阵GR值。 |
|
color11 |
色彩还原矩阵GG值。 |
|
color12 |
色彩还原矩阵GB值。 |
|
color20 |
色彩还原矩阵BR值。 |
|
color21 |
色彩还原矩阵BG值。 |
|
color22 |
色彩还原矩阵BB值。 |
|
dpc info |
enable |
DPC动态坏点校正使能。 |
strength |
DPC动态坏点处理强度。 |
|
blend_ratio |
坏点校正过程所需的融合比率。 |
|
crosstalk info |
enable |
使能Crosstalk 功能。 |
np_offset |
设置Noise Profile值。值越大,表示抗噪能力越大。 |
|
threshold |
设置Crosstalk门限值。值越大,表示整体处理的强度越大。 |
|
strength |
设置Crosstalk强度值。值越大,处理强度越大。 |
|
framewdr info |
mdt_en |
运动检测使能。 |
long_thr |
长曝光门限值,低于门限值的图像数据只选择长曝光数据。 |
|
short_thr |
短曝光门限值,超过门限值的图像数据只选择短曝光数据。 |
|
md_thr_low_gain |
手动模式下判断是否运动的低阈值系数。值越大,运动程度越小。 |
|
md_thr_high_gain |
手动模式下判断是否运动的高阈值系数。值越大,运动程度越小。 |
|
black level actual info |
mode |
黑电平的工作模式 |
user_en |
自定义黑电平的使能 |
|
isp_blc_r |
实际生效的R通道的黑电平值 |
|
isp_blc_gr |
实际生效的Gr通道的黑电平值 |
|
isp_blc_gb |
实际生效的Gb通道的黑电平值 |
|
isp_blc_b |
实际生效的B通道的黑电平值 |
|
sns_blc_r |
R通道的sensor黑电平值 |
|
sns_blc_gr |
Gr通道的sensor黑电平值 |
|
sns_blc_gb |
Gb通道的sensor黑电平值 |
|
sns_blc_b |
B通道的sensor黑电平值 |
|
offset |
Dynamic blc模式下的黑电平补偿 |
|
ob_x |
ob区实际生效统计范围的起始点坐标x |
|
ob_y |
ob区实际生效统计范围的起始点坐标y |
|
ob_width |
ob区实际生效统计范围的宽度 |
|
ob_height |
ob区实际生效统计范围的高度 |
|
blc_clamp_info |
sensor_clamp开关的信息 |
|
bayernr info |
enable |
NR使能的开关。 |
tnr_enable |
NR时域使能开关 |
|
nr_lsc_enable |
NR参考LSC使能开关。 |
|
coarse_str0 |
控制亮度噪声整体去噪强度,R通道。 |
|
coarse_str1 |
控制亮度噪声整体去噪强度,Gr通道。 |
|
coarse_str2 |
控制亮度噪声整体去噪强度,Gb通道。 |
|
coarse_str3 |
控制亮度噪声整体去噪强度,B通道。 |
|
sfm0_ex_str |
sfm0滤波器在ext模式下的精细强度控制 |
|
sfm_threshold |
空域滤波模式: 255:选择sfm0滤波器。 0:选择sfm1滤波器。 0~255: sfm0滤波器和sfm1滤波器融合 |
|
bnr_sfm0_mode |
sfm0滤波模式: EXT:扩展模式适用于噪声水平较大的场景 NORMAL:normal模式适用于噪声水平一般的场景 |
|
sfm0_ex_de_prot |
sfm0在ex模式下,细节保留的比例 |
|
sfm0_norm_ede_str |
sfm0在normal模式下,边缘滤波的强度 |
|
sfm1_de_prot |
sfm1边缘纹理保留的比例 |
|
sfm1_coarse_str |
sfm1滤波器整体强度控制 |
|
fine_strength |
原始像素和去噪结果加权,值越大,去噪效果越强。 |
|
coring_wgt |
原始像素回叠,值越大,回叠噪声越大,去噪效果越弱。 |
|
coring_mot_thresh |
运动区域回叠阈值,值越大,运动回叠区域越少 |
|
tss |
静止区域的空域混入比例,值越大,混入的空域比例越多。 |
|
tfr |
根据纹理细节强度控制时域强度,值越大,时域越强。 |
|
tfs |
整体时域强度控制,值越大,时域越强。 |
|
md_mode |
运动检测类型: 0:运动检测对小运动更敏感。 1:运动检测对大运动判断更加准确。 |
|
md_anti_fli |
运动检测抗光线变化参数 |
|
md_static_ratio |
运动检测,静止和运动区域的比例调节 |
|
sfr_r |
R分量的空域混入比例 |
|
sfr_g |
G分量的空域混入比例 |
|
sfr_b |
B分量的空域混入比例 |
|
md_static_fine_str |
运动检测,静止和运动区域的精细比例调节 |
|
user_define_md |
用户自定义模式下的运动检测模式 |
|
user_define_slope |
用户自定义模式下,运动检测阈值随亮度变化率 |
|
user_define_dark |
用户自定义模式下,暗区的运动检测阈值。 |
|
user_define_color |
用户自定义模式下,颜色区域的运动检测阈值。 |
|
acs info |
enable |
ACS模块使能 |
y_strength |
控制ACS算法Luma Shading也就是Y Shading的校正强度 |
|
run_interval |
表示ACS算法多少帧运行一次 |
|
lock_enable |
表示是否固定ACS产生的Lut表保持当前的LSC校正表 |
|
drc info |
en |
DRC 使能开关 |
manu_en |
DRC手动使能开关 |
|
strength |
DRC强度值 |
|
lcac info |
enable |
Lcac使能 |
cr_str |
R通道的校正强度 |
|
cb_str |
B通道的校正强度 |
|
acac info |
enable |
acac使能 |
edge_thr |
acac的边缘检测阈值。两个阈值分别代表高低阈值,小于edge_thr[0]的为平坦区域,大于edge_thr[1]的是强边缘 |
|
edge_gain |
acac的边缘检测强度,该值越大,检测的边缘越多 |
|
purple_upper |
acac的紫色检测范围上限 |
|
purple_lower |
acac的紫色检测范围下限 |
|
purple_sat_thr |
acac的紫色检测饱和度阈值,大于该阈值的方为紫色的区域。 |
|
purple_alpha |
acac参考紫色的权重。该值越大,表示ACAC参考紫色进行校正色差的越多。 |
|
edge_alpha |
acac参考边缘的权重。该值越大,表示ACAC参考边缘进行校正色差的越多。 |
|
fcc_y_str |
acac根据亮度进行校正的强度,该值越大,表示校正越强 |
|
fcc_rb_str |
acac根据R,B通道强弱进行校正的强度,该值越大,表示校正越强 |
|
bayershp info |
enable |
Bayer sharpen使能的开关 |
edge_filt_str |
边缘平滑强度。该参数值越大,边缘越平滑干净,但也会出现细节连成线条的可能。 |
|
texture_max |
纹理增强限制阈值,它会限制住纹理增强的强度,不让纹理太锐显得不自然。值越小,纹理增强被限制的越大。 |
|
edge_max |
边缘增强限制阈值,它会限制住边缘增强的强度,不让边缘太锐显得不自然。值越小,边缘增强被限制的越大。 |
|
overshoot |
整体图像增强的白边控制强度。值越大,白边越重。 |
|
undershoot |
整体图像增强的黑边控制强度。值越大,黑边越重。 |
|
g_chn_gain |
对G通道比例小的区域增强的强度。值越大,G通道比例小的区域锐化强度越大。 |
|
luma_wgt |
根据亮度锐化强度。亮度分为32段。每一段可以分别配置不同的强度实现差异化锐化。 |
|
edge_mf_strength |
边缘中频增强强度,分为32段。每一段可以分别配置不同的强度实现差异化锐化。 |
|
texture_mf_strength |
纹理中频增强强度,分为32段。每一段可以分别配置不同的强度实现差异化锐化。 |
|
edge_hf_strength |
边缘高频增强强度,分为32段。每一段可以分别配置不同的强度实现差异化锐化。 |
|
texture_hf_strength |
纹理高频增强强度,分为32段。每一段可以分别配置不同的强度实现差异化锐化。 |
|
demosaic info |
enable |
Demosaic使能的开关。 |
nondir_str |
无方向插值强度,值越大,无方向插值所占比重越大 |
|
nondir_mf_str |
无方向中频纹理增强强度,值越大,无方向中频纹理细节增强越强,对噪声同样有增强 |
|
nondir_hf_str |
无方向高频纹理增强强度,值越大,无方向高频纹理细节增强越强,对噪声均匀性有提升 |
|
de_smth_range |
细节平滑范围,值越大,做平滑处理的细节范围越大,能够抑制更多伪细节 |
|
color_noise_thdf |
根据画面高频程度降低颜色噪声,值越大,则越容易在平坦区域进行去色噪功能。值越小,则影响的像素越少 |
|
color_noise_strf |
根据画面高频程度降低颜色噪声的强度,值越大,则降饱和度强度越高 |
|
color_noise_thdy |
根据亮度和饱和度降低颜色噪声,值越大,对暗处影响越大,对饱和度高的像素影响越大。值越小,影响的像素越少 |
|
color_noise_stry |
根据亮度和饱和度降低颜色噪声的强度,值越大,对影响的像素降饱和度越多,值越小,降饱和度程度越少 |
|
anti false color info |
en |
ANTIFALSECOLOR模块使能。 |
threshold |
去伪彩阈值,值越大,伪彩去除的区域越多 |
|
strength |
去伪彩强度,值越大,去伪彩强度越大,伪彩现象消除越好,但可能导致正常颜色的改变 |
|
fpn correct info |
en |
FPN使能开关 |
op_type |
FPN模式类型 |
|
strength |
FPN强度值 |
|
offset |
FPN强度偏移 |
|
sharpen info |
sharpen_en |
Sharpen使能 |
luma_wgt |
亮度锐化权重。 |
|
texture_strength |
无方向的纹理锐化强度。 |
|
edge_strength |
边缘锐化强度。 |
|
motion_texture_strength |
无方向的细节纹理的锐化强度,设置运动区域图像无方向的细节纹理的锐度。 |
|
motion_edge_strength |
带方向的边缘的锐化强度,设置运动区域图像带方向的边缘的锐度。 |
|
texture_freq |
纹理的细碎度调节强度。 |
|
edge_freq |
边缘锐化后的纤薄度调节。 |
|
over_shoot |
锐化后的白边白点强度。 |
|
under_shoot |
锐化后的黑边黑点强度。 |
|
shoot_sup_str |
黑白边宽窄的单独调节强度。 |
|
detail_ctrl |
图像的细节纹理区的shoot强度的控制。 |
|
motion_texture_freq |
图像的无方向细节纹理的增强频段控制。设置运动区域图像的细节纹理增强的频率。 |
|
motion_edge_freq |
图像的带方向的边缘的增强频段控制。设置运动区域图像边缘增强的频率。 |
|
motion_over_shoot |
设置运动区域图像的overshoot(锐化后的白边白点)的强度。 |
|
motion_under_shoot |
设置运动区域图像的undershoot(锐化后的黑边黑点)的强度。 |
|
edge_filt_str |
边缘滤波强度的控制参数。 |
|
edge_filt_max_cap |
边缘滤波强度范围的控制参数。 |
|
r_gain |
深红色锐化增益控制。 |
|
g_gain |
绿色区域的锐化增益控制。 |
|
b_gain |
深蓝色锐化增益控制。 |
|
skin_gain |
肤色锐化增益控制。 |
|
shoot_sup_adj |
图像锐化后的shoot抑制调节。 |
|
detail_ctrl_thr |
细节纹理区的shoot控制阈值。 |
|
max_sharp_gain |
图像锐化的最大增益的限制值。 |
|
skin_umax |
肤色矩形窗的右上最大坐标的U值。 |
|
skin_umin |
肤色矩形窗的左下最小坐标的U值。 |
|
skin_vmax |
肤色矩形窗的右上最大坐标的V值。 |
|
skin_vmin |
肤色矩形窗的左下最小坐标的V值。 |
|
ldci info |
enable |
LDCI功能使能。 |
manual |
LDCI工作类型。 0:自动模式; 1:手动模式。 |
|
gauss_lpf_sigma |
LDCI滤波局域程度,其值越小说明LDCI作用越局域。 |
|
he_pos_wgt |
局域直方图均衡结果与原图融合权重曲线,根据亮度控制提亮程度,曲线呈GAUSS分布,该参数为GAUSS分布最大值。 |
|
he_pos_sigma |
局域直方图均衡结果与原图融合权重曲线,根据亮度控制提亮程度,曲线呈GAUSS分布,该参数为GAUSS分布均方差。 |
|
he_pos_mean |
局域直方图均衡结果与原图融合权重曲线,根据亮度控制提亮程度,曲线呈GAUSS分布,该参数为GAUSS分布数学期望。 |
|
he_neg_wgt |
局域直方图均衡结果与原图融合权重曲线,根据亮度控制变暗程度,曲线呈GAUSS分布,该参数为GAUSS分布最大值。 |
|
he_neg_sigma |
局域直方图均衡结果与原图融合权重曲线,根据亮度控制变暗程度,曲线呈GAUSS分布,该参数为GAUSS分布均方差。 |
|
he_neg_mean |
局域直方图均衡结果与原图融合权重曲线,根据亮度控制变暗程度,曲线呈GAUSS分布,该参数为GAUSS分布数学期望。 |
|
blc_ctrl |
暗区增益控制强度,用于抑制暗区噪声。 |
|
ca info |
enable |
CA模块使能 |
iso_ratio |
当前ISO下实际生效的UV增益 |
|
crb info |
enable |
CRB模块使能 |
r_gain |
当前生效的红色通道增益 |
|
b_gain |
当前生效的蓝色通道增益 |
|
pregamma info |
enable |
PreGamma 使能开关 |
【注意事项】
用户通过PQTools手动配置PubAttr修改画面帧率时,sensor的最大曝光时间会发生修改。绝大部分修改帧率时,帧率越高则最大曝光时间越低。
3A开发指南概述¶
概述¶
ISP 3A版本依赖于相应的SDK大版本,通过一系列数字图像处理算法完成对数字图像的效果处理。主要包含Firmware框架及SDK提供的3A库,Firmware提供算法的基本框架,处理统计信息,驱动数字图像处理算法,并包含坏点校正、去噪、色彩增强、镜头阴影校正等处理。3A库以注册的方式,添加到Firmware中,完成曝光、白平衡、色彩还原等处理。
功能描述¶
ISP的Firmware架构及Firmware工作流程及文件组织结构请参考本文档“功能描述”小节,本小节不再赘述。
3A开发使用者指南¶
软件流程¶
ISP 软件流程请参考“软件流程”小节,本小节不再赘述。
Sensor对接¶
Sensor库主要是为了提供差异化的sensor适配,里面的内容可以分为两部分:Sensor向ISP库注册的差异化适配,这些差异化适配主要由Firmware中的基础算法单元决定;Sensor向3A库注册的差异化适配。Sensor的适配包括算法的初始化默认值,及sensor控制接口,sensor的适配是通过接口回调的形式注册给ISP库和3A算法库。图1表示了Sensor与ISP库和3A算法库之间的关系。
图 1 Sensor适配示意图

关于sensor注册ISP库,sensor注册3A算法库部分详细请参考《sensor 调试指南》
开发者指南¶
概述¶
用户可以基于Firmware框架开发定制3A库,并注册到Firmware中,Firmware将会在中断的驱动下,获取每帧的统计信息,运行算法库,配置ISP寄存器。
Sensor注册到ISP库,以实现差异化适配Firmware中的基础算法单元的部分,仍需要参考使用者指南部分的内容实现,以保证Firmware中的坏点校正、去噪、色彩增强、镜头阴影校正等处理算法正常运行。Sensor注册到3A算法库的部分,请用户根据自己开发定制的3A库,自行定义数据结构,实现Sensor曝光控制等。
如果用户只是使用3A算法库,并不自己开发3A算法库,可以忽略此章节内容。
AE算法注册ISP库¶
AE算法注册ISP库调用ss_mpi_isp_ae_lib_reg_callback,如图1所示。
图 1 AE算法向ISP库注册的回调函数

AE算法实现了一个ss_mpi_ae_register的注册函数,在这个函数中调用ISP提供的ss_mpi_isp_ae_lib_reg_callback回调接口,用户调用注册函数以实现向ISP注册AE算法,示例如下:
【举例】
/* 实现注册函数 */
ot_isp_ae_register ae_register;
td_s32 ret = TD_SUCCESS;
ae_check_pointer_return(ae_lib);
ae_check_handle_id_return(ae_lib->id);
ae_check_lib_name_return(ae_lib->lib_name);
/* 调用钩子函数 */
ae_register.ae_exp_func.pfn_ae_init = ae_init;
ae_register.ae_exp_func.pfn_ae_run = ae_run;
ae_register.ae_exp_func.pfn_ae_ctrl = ae_ctrl;
ae_register.ae_exp_func.pfn_ae_exit = ae_exit;
ret = ss_mpi_isp_ae_lib_reg_callback(vi_pipe, ae_lib, &ae_register);
if (ret != TD_SUCCESS) {
printf("Ot_ae register failed!\n");
}
用户需要在自开发定制的AE库中实现以下回调函数:
表 1 AE算法向ISP库注册的回调函数
成员名称 |
描述 |
|---|---|
pfn_ae_init |
初始化AE的回调函数指针。 |
pfn_ae_run |
运行AE的回调函数指针。 |
pfn_ae_ctrl |
控制AE内部状态的回调函数指针。 |
pfn_ae_exit |
销毁AE的回调函数指针。 |
说明:
调用ss_mpi_isp_init时将调用pfn_ae_init回调函数,以初始化AE算法库。
调用ss_mpi_isp_run时将调用pfn_ae_run回调函数,以运行AE算法库,计算得到sensor的曝光时间和增益、ISP的数字增益。
pfn_ae_ctrl回调函数的目的是改变算法库内部状态。运行时Firmware会隐式调用pfn_ae_ctrl回调函数,通知AE算法库切换WDR和线性模式、设置FPS。
当前Firmware定义的ctrl命令详参ot_isp_ctrl_cmd。 调用ss_mpi_isp_exit时将调用pfn_ae_exit回调函数,以销毁AE算法库。
结构体ot_isp_ae_param,ot_isp_ae_info,ot_isp_ae_result的成员变量请参看"数据类型"小节相应的数据类型。
AWB算法注册ISP库¶
AWB算法注册ISP库调用ss_mpi_isp_awb_lib_reg_callback,如图1所示:
图 1 AWB算法向ISP库注册的回调函数

AWB算法实现了一个ss_mpi_awb_register的注册函数,在这个函数中调用ISP提供的ss_mpi_isp_awb_lib_reg_callback回调接口,用户调用注册函数以实现向ISP注册AWB算法,示例和AE算法库注册类似。
用户需要在自开发定制的AWB库中实现以下回调函数:
表 1 AWB算法向ISP库注册的回调函数
成员名称 |
描述 |
|---|---|
pfn_awb_init |
初始化AWB的回调函数指针。 |
pfn_awb_run |
运行AWB的回调函数指针。 |
pfn_awb_ctrl |
控制AWB内部状态的回调函数指针。 |
pfn_awb_exit |
销毁AWB的回调函数指针。 |
说明:
调用ss_mpi_isp_init时将调用pfn_awb_init回调函数,以初始化AWB算法库。
调用ss_mpi_isp_run时将调用pfn_awb_run回调函数,以运行AWB算法库,计算得到白平衡增益、色彩校正矩阵。
pfn_awb_ctrl回调函数的目的是改变算法库内部状态。运行时Firmware会隐式调用pfn_awb_ctrl回调函数,通知AWB算法库切换WDR和线性模式、设置ISO和曝光时间。设置ISO的目的是为了实现ISO与饱和度的联动,增益大时色度噪声也会比较大,所以需要调节饱和度。设置曝光时间是为了awb算法判断环境照度,优化场景效果。当前Firmware定义的ctrl命令详参ot_isp_ctrl_cmd。
调用ss_mpi_isp_exit时将调用pfn_awb_exit回调函数,以销毁AWB算法库。
结构体ot_isp_awb_param,ot_isp_awb_info,ot_isp_awb_result的成员变量请参看“数据类型”小节相应的数据类型。
开发用户AF算法¶
说明: ss_mpi_isp_get_vd_time_out和ss_mpi_isp_get_focus_stats请参考前面章节。
用户开发的AF算法可以参考图1所示的结构,AF算法在一个thread内运行,使用ss_mpi_isp_get_vd_time_out接口将算法同步在VD下运行。通过调用ss_mpi_isp_get_focus_stats来获取AF相关的统计信息,相关算法参考统计信息完成目标zoom和focus位置的计算,AF算法输出result,包括lens的位置信息和速度。调用Lens Driver将镜头镜片驱动到设定的位置即完成当前帧的操作。AF Alg向上提供控制接口和查询接口,方便用户完成一键聚焦,变焦,手动聚焦,查询算法状态等操作。
图 1 AF算法结构图

【举例】
如果用户使用的是Linux系统,推荐将算法放在user space完成,lens driver放在kernel space,ISP驱动提供同步回调功能,参考“AF同步回调”章节。
while (1)
{
ret = ss_mpi_isp_get_vd_time_out(vi_pipe, OT_ISP_VD_FE_START, 5000);
ret |= ss_mpi_isp_get_focus_stats(vi_pipe, &af_stat);
if (TD_SUCCESS != ret) {
printf("ss_mpi_isp_get_focus_stats error!(ret = 0x%x)\n", ret);
return TD_FAILURE;
}
// User Auto Focus Alg Source
UsrAfAlgRun();
// Update Lens Position
LensDrv_ZoomToDestPos(pos, pps);
LensDrv_FocusToDestPos(pos, pps);
}
AF统计信息使用说明¶
概述¶
被动式自动对焦一般是通过分析图像特征得出图像清晰度值FV(Focus Value), 通过驱动对焦马达调节焦点到最佳位置,如图1所示,图像越清晰FV值越大,Peak点对应聚焦清晰点。获取图像清晰度算法有多种,如灰度梯度法,高频分量法等,SS928V100采用高频分量法来计算FV,即图像越清晰的时候高频部分幅值越大,将图像通过高通滤波器便可以得到高频分量,SS928V100一共提供四个滤波器和亮度信息,分别为水平方向滤波H1,H2,垂直方向滤波V1,V2,以及Y和高亮计数器HlCnt。SS928V100提供FE(Front End)及BE(Back End)两个独立的AF统计信息获取模块。AF模块支持的最小分辨率为256*120,低于该分辨率AF逻辑功能无法支持。
图 1 FV曲线

SS928V100提供Bayer域或者YUV域进行统计,配置MPI中的stats_pos字段即可以进行统计位置的调整。WDR模式下,非宽动态场景的Bayer域(即RAW域)统计信息无明显变化趋势,推荐使用YUV域统计信息。首先对图像进行预处理滤波,去除椒盐噪声对统计值的干扰,用户可以设置pre_flt_cfg.en来使能PreFilter。配置pre_flt_cfg.strength来控制图3滤波强度。在经过水平垂直四组滤波器后会对输出做Level Depend Gain和Coring,关于这两个模块将在后面的章节详述。模块框图2所示。
图 2 AF统计模块框图

水平垂直滤波器分别采用IIR和FIR实现如图3所示。
图 3 AF 4组滤波器

输入图像的裁剪¶
AF模块支持对输入图像的裁剪,如下如图1用户可以根据实际需求配置crop中X,Y,W,H四个参数对指定区域进行统计。
图 1 AF 输入图像裁剪

Bayer域配置¶
如果用户将统计位置调整到Bayer域则需要配置以下几点。
配置bayer_format来指定bayer数据的pattern。支持如图1所示的4种pattern。
配置AF 模块Gamma使能,raw上的线性数据需要做Gamma处理。
图 1 Bayer域统计预处理

图 2 关于Gamma配置的说明

须知: 图中的GAMMA_EN与ot_isp_af_raw_cfg中的gamma_value等效,GAIN_LMT与ot_isp_af_raw_cfg中的gamma_gain_limit等效。
抑制光源对FV值的影响¶
因为FV值容易受到SpotLight的影响,在聚焦模糊的时候因为光晕扩散,图像中低频分量会增加,会出现图像模糊反而FV值变大的现象。为了抑制这一现象,提供以下方法。
Coring¶
将滤波器输出通过Coring模块可以提高FV曲线的抗噪声能力,如图1所示,设置图中3个参数便可以确定coring曲线的形状,通过设置合理的参数便可以实现不统计噪声,以及增加有效信号对统计信息的贡献,从而提升统计信息在低照度场景中的性能。
图 1 Coring 曲线

统计模式配置¶
统计模块支持以下两种模式:
峰值配置模式
设置为peak模式block的统计值为滤波后图像每行最大值之和,否则直接将每个点的值求和。求和模式适用于噪声较大场景。
平方配置模式,有以下两种选择。
0:Linear mode
1:Square mode
设置为Square模式后,会先对滤波器输出进行归一化后进行平方再做统计。
Square模式的FV曲线在焦点附近会更加陡峭,相应的映射曲线如图1所示。
图 1 平方配置模式映射曲线图

同时也支持以下配置:
输出shift
对输出值right shift缩小,防止值溢出。
Block大小
对通过滤波器后的图像可以进行分块统计,如图2所示,块的大小可以设置,最大支持17*15个blocks,最终块的统计值是对每个pixel的累加或者对每行最大值累加。以水平方向为例,因为累加器的宽度为unsigned 29bits,滤波器输出pixel宽度为unsigned 11bits,所以当块内输出值都为2047的时候,最大支持累加的pixel个数为2^18,否则会发生溢出,用户设置大小时应该注意。
图 2 滤波器后的图像

统计信息配置注意事项¶
表 1 统计信息配置注意事项
类型 |
描述 |
|---|---|
分块大小 |
最大17乘以15 |
统计模块工作域 |
RAW/YUV |
Bayer统计模块位置 |
Raw在DG后、DRC后 |
YUV统计模块位置 |
CSC后 |
Bayer统计参数是否减去黑电平 |
已减去 |
统计输出YUV是否减去黑电平 |
已减去 |
是否支持IIR滤波器filterShift补偿 |
支持 |
是否支持IIR滤波器narrowband |
支持 |
WDR模式下特殊配置 |
YUV输入时gamma_value(参考 ot_isp_af_raw_cfg)设置为0。 RAW需要配置在DRC之后 |
统计值的获取¶
当一帧图像最后一个pixel通过AF模块后, 统计值即更新,推荐用户通过ss_mpi_isp_get_vd_time_out同步获取统计值,然后AutoFocus和ZoomTracking算法完成目标focus和zoom position的计算,需要注意的是因为LINUX user space任务调度不能保证一致的实时性,建议将需要保证实时性的驱动配置放在kernel space完成。
FV值计算¶
一般的推荐最终生成如图1所示的两条曲线,我们将low BandPass filter生成的FV命名为FV1,High BandPass filter生成的命名为FV2,“FV计算参考代码”中变量stFocusCfg的值为默认推荐使用的AF滤波器参数,FV1使用在低照度场合,FV2使用在正常照度场合。对于每一个block,FV1,FV2的计算方式为:

H1,H2,V1,V2分别为水平垂直四组滤波器的统计值,可设置适当的权重对水平和垂直方向的滤波器输出统计值进行混合。
最终的FV值还需要对每个block进行加权,即FV1,FV2采用如下公式计算。

FV计算参考代码¶
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ot_type.h"
#include "ss_mpi_isp.h"
#define BLEND_SHIFT 6
#define ALPHA 64 // 1
#define BELTA 54 // 0.85
#define FEINFO
static int af_weight[15][17] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
int main(int argc, char *argv[])
{
td_s32 ret = TD_SUCCESS;
td_u8 wdr_chn;
td_u32 frm_cnt = 0;
td_u32 i, j, k;
td_u16 stat_data;
ot_vi_pipe vi_pipe;
ot_isp_af_stats af_stats;
ot_isp_stats_cfg stats_cfg;
ot_isp_focus_zone zone_metrics[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_AF_ZONE_ROW][OT_ISP_AF_ZONE_COLUMN] = { 0 };
ot_isp_focus_stats_cfg focus_cfg = {
{1, 17, 15, 1, 0, {0, 0, 0, 1920, 1080}, {0, 0, 0, 1920, 1080}, 0, {0x2, 0x4, 0}, {1, 0x9bff}, 0xf0},
{1, {1, 1, 1}, 15, {188, 414, -330, 486, -461, 400, -328}, {7, 0, 3, 1}, {1, 0, 255, 0, 240, 8, 14},
{127, 12, 2047}
},
{0, {1, 1, 0}, 2, {200, 200, -110, 461, -415, 0, 0}, {6, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0},
{ 15, 12, 2047}
},
{{ 20, 16, 0, -16, -20}, {1, 0, 255, 0, 220, 8, 14}, {38, 12, 1800}},
{{ -12, -24, 0, 24, 12}, {1, 0, 255, 0, 220, 8, 14}, {15, 12, 2047}},
{4, {0, 0}, {1, 1}, 0}
};
char param1, param2;
if (argc < 3) {
printf("use like. ./sample_af isp_Pipe c -> Fv curve\n");
printf("......... ./sample_af isp_Pipe h 0 -> h0 blocks\n");
printf("......... ./sample_af isp_Pipe h 1 -> h1 blocks\n");
printf("......... ./sample_af isp_Pipe v 0 -> v0 blocks\n");
printf("......... ./sample_af isp_Pipe v 1 -> v1 blocks\n");
printf("......... ./sample_af isp_Pipe y 0 -> y blocks\n");
printf("......... ./sample_af isp_Pipe y 1 -> hlcnt blocks\n");
return -1;
}
if ((param1 = *argv[2]) != 'c' && !argv[3]) {
printf("args was too less!, should be %c + X\n", *argv[1]);
return -1;
} else if (argv[3]) {
param2 = *argv[3];
}
if ('0' != *argv[1] && '1' != *argv[1]) {
printf("vi_pipe num Err!\n");
return -1;
}
vi_pipe = atoi(argv[1]);
ret = ss_mpi_isp_get_stats_cfg(vi_pipe, &stats_cfg);
if (TD_SUCCESS != ret) {
printf("ss_mpi_isp_get_stats_cfg error!(ret = 0x%x)\n", ret);
return TD_FAILURE;
}
memcpy(&stats_cfg.focus_cfg, &focus_cfg, sizeof(ot_isp_focus_stats_cfg));
ret = ss_mpi_isp_set_stats_cfg(vi_pipe, &stats_cfg);
if (TD_SUCCESS != ret) {
printf("ss_mpi_isp_set_stats_cfg error!(ret = 0x%x)\n", ret);
return TD_FAILURE;
}
#if 1
while (1) {
ret = ss_mpi_isp_get_vd_time_out(vi_pipe, OT_ISP_VD_FE_START, 5000);
ret |= ss_mpi_isp_get_focus_stats(vi_pipe, &af_stats);
if (ret != TD_SUCCESS) {
printf("ss_mpi_isp_get_focus_stats error!(ret = 0x%x)\n", ret);
return TD_FAILURE;
}
#ifdef FEINFO
memcpy(zone_metrics, &af_stats.fe_af_stat, sizeof(ot_isp_focus_zone) * OT_ISP_WDR_MAX_FRAME_NUM * OT_ISP_AF_ZONE_ROW * OT_ISP_AF_ZONE_COLUMN);
#else
memcpy(zone_metrics[0], &af_stats.be_af_stat, sizeof(ot_isp_focus_zone) * OT_ISP_AF_ZONE_ROW * OT_ISP_AF_ZONE_COLUMN);
#endif
if (param1 != 'c') {
if ((++frm_cnt % 30)) {
continue;
}
wdr_chn = 1;
for (k = 0; k < wdr_chn; k++) {
for (i = 0; i < 15; i++) {
for (j = 0; j < 17; j++) {
if (param1 == 'h' && param2 == '0') {
stat_data = zone_metrics[k][i][j].h1;
} else if (param1 == 'h' && param2 == '1') {
stat_data = zone_metrics[k][i][j].h2;
} else if (param1 == 'v' && param2 == '0') {
stat_data = zone_metrics[k][i][j].v1;
} else if (param1 == 'v' && param2 == '1') {
stat_data = zone_metrics[k][i][j].v2;
} else if (param1 == 'y' && param2 == '0') {
stat_data = zone_metrics[k][i][j].y;
} else {
stat_data = zone_metrics[k][i][j].hl_cnt;
}
printf("%6d", stat_data);
}
printf("\n");
}
}
printf("------------------------------------------------%c-%c----------------------------------------------\n\n\n\n\n", param1, param2);
continue;
}
td_u32 sum_fv1 = 0;
td_u32 sum_fv2 = 0;
td_u32 wgt_sum = 0;
td_u32 fv1_n, fv2_n, fv1, fv2;
if ((++frm_cnt % 2)) {
continue;
}
wdr_chn = 1;
for (k = 0; k < wdr_chn; k++) {
for ( i = 0 ; i < focus_cfg.config.zone_row; i++ ) {
for ( j = 0 ; j < focus_cfg.config.zone_col; j++ ) {
td_u32 h1 = zone_metrics[k][i][j].h1;
td_u32 h2 = zone_metrics[k][i][j].h2;
td_u32 v1 = zone_metrics[k][i][j].v1;
td_u32 v2 = zone_metrics[k][i][j].v2;
fv1_n = (h1 * ALPHA + v1 * ((1 << BLEND_SHIFT) - ALPHA)) >> BLEND_SHIFT;
fv2_n = (h2 * BELTA + v2 * ((1 << BLEND_SHIFT) - BELTA)) >> BLEND_SHIFT;
sum_fv1 += af_weight[i][j] * fv1_n;
sum_fv2 += af_weight[i][j] * fv2_n;
wgt_sum += af_weight[i][j];
}
}
}
fv1 = sum_fv1 / wgt_sum;
fv2 = sum_fv2 / wgt_sum;
printf("%4d %4d\n", fv1, fv2);
}
#endif
return TD_SUCCESS;
}
PQTools 滤波器设计工具使用说明¶
OtPQ工具提供了自动对焦参数仿真插件,使图像质量调试人员可以:
根据截止频率自动获取较适合的AF参数,并查看对应的频率响应曲线;
自行配置AF参数,并查看对应的频率响应曲线。
目前版本的插件可用于图像质量调测,使用该工具之前,用户需要安装Matlab运行时的2012a(32位)版本。
工具界面¶
从OtPQ工具主界面工具栏的外挂插件下拉框中选择“OtPQ Auto Focus Simulator”,可以打开自动对焦参数仿真工具,如图1所示。
图 1 自动对焦参数仿真工具

工具分为For Horizontal filters 和For Vertical filters两个页签,相互独立,分别对应水平和垂直方向的滤波器参数仿真。下面叙述的内容对两个页签均有效。
AF水平滤波器具备以下两种模式:
窄带模式(Narrow Band):此种模式下,AF水平滤波器将在一个较小的频率范围内进行对焦。当用户设置的截止频率的低频小于0.04时,工具将推荐用户使用窄带模式。这个模式下,截止频率高频最大值为0.25。
宽带模式(Wide Band):此种模式下,AF水平滤波器将在一个较大的频率范围内进行对焦。当截止频率的低频大于或等于0.04时,工具将推荐用户使用宽带模式。这个模式下,截止频率高频最大值为0.5。
用户可以在PQ工具主界面(已经加载调试表)上找到StatisticsConfig -> AFConfig_HParam_IIR0的寄存器分组来对模式和滤波系数进行设置。
通过截止频率获取AF滤波系数¶
在每个页签中,用户均可以用截止频率来生成滤波系数。在Generate from Frequences处输入截止频率的低频和高频后,点击“Generate AF Parameters”,即可生成截止频率对应的滤波系数,显示在Parameters adjustment下方的各个文本框中,并在右侧的坐标图上显示对应该组滤波系数的频率响应曲线,曲线以红色表示,如图1和图2所示。
图 1 通过截止频率获取滤波系数(窄带)

图 2 通过截止频率获取滤波系数(宽带)

须知: 截止频率在工具中会自动适配精度。水平滤波器的截止频率取小数点后两位,垂直滤波器的截止频率取小数点后一位。取精度时,多余的小数位数直接舍弃。
手动配置滤波系数¶
除了通过截止频率获取对应的滤波系数,用户还可以手动进行每个滤波系数项进行设置。在Parameters adjustment处,找到对应的参数并进行修改后,工具将自动计算这组参数的频率响应曲线并绘制在右侧。曲线以红色表示。
设置参考组¶
如果用户想要在不同组的滤波系数间对比,可以使用参考组功能。当用户需要将某一组滤波系数列为参考组时,点击“Add to Reference List”按钮,工具即会在右下角的列表中添加一行,列出该参考组的参数项,如图1所示。
图 1 参考组列表

对于每一个参考组,工具还将在上方的坐标图上生成一条曲线,以灰色表示,如图2所示:
图 2 参考组的曲线显示

用户还可以将某一参考组的曲线高亮显示出来。在列表中点击需要高亮显示的参考组,此时对应的曲线会在上方的坐标图中变成蓝色,如图3所示。
图 3 选中参考组曲线高亮显示

通过这样的方式,用户可以在不同的参考组间进行频率响应曲线对比,从而发现更优的方案。
须知:
在坐标图上,红色的当前参数曲线和蓝色的参考组高亮曲线相对其他的灰色参考组曲线处于更上方的位置。因此,会出现刚刚添加参考组时看不到灰色曲线的状况。此时只要修改滤波系数,使红色曲线重新绘制,就能看到灰色的参考曲线。
每个页签上最多只能添加6组参考组。如果需要添加更多参考组,请先点击Clear Reference List删除所有参考组。
AF同步回调¶
当一帧图像最后一个pixel通过AF模块后,统计值即更新,推荐用户通过ss_mpi_isp_get_vd_time_out同步获取统计值,AutoFocus和ZoomTracking算法完成目标focus和zoom position的计算,如果用户使用的是LINUX系统,因为user space任务调度不能保证一致的实时性,建议将需要保证实时性的驱动配置放在kernel space完成。ISP提供同步回调接口的注册,可以实现与VD同步。在本章有相应的接口使用描述,用户可以将实时性要求较高的任务放在同步回调里面,底层提供HwIRQ,Workqueue两种方式实现,可以选择相应的实现方式以确定实时级别。HwIRQ是指任务放在中断服务中实现,实时性最高;Workqueue的实时性取决于linux系统调用。
图 1 AF同步回调

API参考¶
ot_isp_sync_task_register:向ISP注册同步回调接口。
ot_isp_sync_task_unregister:向ISP反注册同步回调接口。
ot_isp_sync_task_register¶
【描述】
向ISP注册同步回调接口。
【语法】
td_s32 ot_isp_sync_task_register(ot_vi_pipe vi_pipe, ot_isp_sync_task_node *new_node);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
new_node |
新插入的同步回调节点。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败。 |
【需求】
头文件:isp_ext.h.
【注意】
使用前需要确保ISP驱动已加载。
因为ISP同步回调内部实现不保存用户传入的new_node指向的实体,所以要求使用ot_isp_sync_task_node定义实体时不能为局部变量。
【举例】
无
【相关主题】
ot_isp_sync_task_unregister¶
【描述】
向ISP反注册同步回调接口。
【语法】
td_s32 ot_isp_sync_task_unregister(ot_vi_pipe vi_pipe, ot_isp_sync_task_node *del_node)
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
del_node |
需要删除的同步回调节点。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败。 |
【需求】
头文件:isp_ext.h.
【注意】
使用前需要确保ISP驱动已加载。
【举例】
无
【相关主题】
数据类型¶
ot_isp_sync_tsk_method:定义同步回调方法,决定实时性。
ot_isp_drv_focus_zone:AF分区间统计信息。
ot_isp_drv_fe_focus_statistics:AF FE统计信息
ot_isp_drv_be_focus_statistics:AF BE统计信息
ot_isp_drv_af_statistics:AF模块统计信息。
ot_isp_sync_task_node:定义同步回调节点信息。
ot_isp_sync_tsk_method¶
【说明】
定义同步回调方法,决定实时性。
【定义】
typedef enum {
ISP_SYNC_TSK_METHOD_HW_IRQ = 0,
ISP_SYNC_TSK_METHOD_WORKQUE,
ISP_SYNC_TSK_METHOD_BUTT
} ot_isp_sync_tsk_method;
【成员】
成员名称 |
描述 |
|---|---|
ISP_SYNC_TSK_METHOD_HW_IRQ |
使用硬件中断方式回调。 |
ISP_SYNC_TSK_METHOD_WORKQUE |
使用工作队列方式回调。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_drv_focus_zone¶
【说明】
AF分区间统计信息。
【定义】
typedef struct {
td_u16 v1;
td_u16 h1;
td_u16 v2;
td_u16 h2;
td_u16 y;
td_u16 hl_cnt;
} ot_isp_drv_focus_zone;
【成员】
成员名称 |
描述 |
|---|---|
v1 |
分区间统计的AF垂直方向奇数列FIR滤波器的统计值。 |
h1 |
分区间统计的AF水平方向奇数行IIR滤波器的统计值。 |
v2 |
分区间统计的AF垂直方向偶数列FIR滤波器的统计值。 |
h2 |
分区间统计的AF水平方向偶数行IIR滤波器的统计值。 |
y |
分区间统计的AF亮度统计值,区块中每个像素点的亮度累加值。 |
hl_cnt |
分区间统计的AF亮度超阈值计数器值。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_drv_fe_focus_statistics¶
【说明】
AF FE分块统计信息。
【定义】
typedef struct {
ot_isp_drv_focus_zone zone_metrics[4][15][17];
} ot_isp_drv_fe_focus_statistics;
【成员】
成员名称 |
描述 |
|---|---|
zone_metrics |
分区间AF FE统计信息结构体 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_drv_be_focus_statistics¶
【说明】
AF BE分块统计信息。
【定义】
typedef struct {
ot_isp_drv_focus_zone zone_metrics[15][17];
} ot_isp_drv_be_focus_statistics;
【成员】
成员名称 |
描述 |
|---|---|
zone_metrics |
分区间AF BE统计信息结构体。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_drv_af_statistics¶
【说明】
AF模块统计信息。
【定义】
typedef struct {
ot_isp_drv_fe_focus_statistics fe_af_stat;
ot_isp_drv_be_focus_statistics be_af_stat;
} ot_isp_drv_af_statistics;
【成员】
成员名称 |
描述 |
|---|---|
fe_af_stat |
FE模块AF统计信息结构体。 |
be_af_stat |
BE模块AF统计信息结构体。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_sync_task_node¶
【说明】
定义同步回调节点信息。
【定义】
typedef struct {
ot_isp_sync_tsk_method method;
td_s32 (*isp_sync_tsk_callback)(td_u64 data);
td_u64 data;
const char *sz_id;
struct osal_list_head list;
ot_isp_drv_af_statistics *focus_stat;
} ot_isp_sync_task_node;
【成员】
成员名称 |
描述 |
|---|---|
method |
回调方式。 |
isp_sync_tsk_callback |
回调函数,用户注册时传入。 |
data |
回调函数参数,用户注册时传入。 |
sz_id |
节点ID |
list |
list节点,用于管理多个回调节点,无需关注。 |
focus_stat |
AF统计信息结构体。 |
【举例】
ot_isp_sync_task_node sync_node= {
.method = ISP_SYNC_TSK_METHOD_HW_IRQ,
.isp_sync_tsk_callback = usr_task_callback,
.data = 0,
.sz_id= "HardwareInterrupt "
};
【注意事项】
无
【相关数据类型及接口】
不带光敏AE快速收敛模式(无光敏快启)使用说明¶
概述¶
无光敏快启是在没有光敏传感器反馈当前亮度的情况下,AE算法在启动后以最快速收敛到目标亮度范围的功能。此功能目前在大部分场景下可以在10帧内收敛到目标亮度范围。其中目标亮度范围为[目标亮度-目标亮度*10%,目标亮度+目标亮度*10%]。例如,当目标量亮度为50,则目标亮度范围为[45,55]。在使用此功能时,Sensor的驱动要进行相应的适配。
适配不带光敏AE快速收敛模式(无光敏快启)¶
适配Sensor的写寄存器方式。无光敏快启要求对配置给Sensor的曝光参数的延迟生效要求为3帧。即AE算法在第1帧对Sensor配置曝光参数,在第4帧时能够获取到相应曝光参数生效的亮度统计信息(即Raw)。如果Sensor的延迟生效帧数不符合3帧,则需要对Sensor的驱动进行修改适配。一般来说,目前大部分的Sensor在平台上,总体的延迟生效帧数为4帧。可将Sensor驱动适配为调用I2C接口直接写Sensor寄存器的方式设定曝光参数(包括曝光行数、Sensor模拟增益、Sensor数字增益)。这样的方式可以使Sensor提前1帧生效曝光参数。具体可参考F37 Sensor的驱动代码进行适配。
需要注意将Sensor改为用I2C接口直接写寄存器的方式后,相应的曝光行数、Sensor模拟增益、Sensor数字增益和ISP 数字增益的生效延迟帧数也要同保证同步,以确保曝光的同步。
配置pfn_cmos_ae_quick_start_status_set回调函数。无光敏快启收敛后,会调用此回调函数同时设定quick_start_status为TD_TRUE。此时通过此参数状态,将步骤1中的直接调用I2C接口方式配置寄存器的方式更改回普通方式。
设定无光敏快启相关参数:
ae_sns_dft->quick_start.quick_start_enable设置为TD_TRUE打开无光敏快启功能。
ae_sns_dft->quick_start.black_frame_num设定初始坏帧数。因部分Sensor在启动时,会输出若干坏帧,为了确保AE算法能够及时获取到有效的统计数据。需要填入正确的坏帧数,没有坏帧则填入0。
ae_sns_dft->quick_start.ir_mode_en 设置无光敏快启下是否支持红外模式。如果是需要支持带有IR CUT和IR LED无光敏快启,则需要打开此模式。
ae_sns_dft->quick_start.init_exposure_ir 设置无光敏快启红外模式下的初始曝光量。
ae_sns_dft->quick_start.iso_thr_ir 设置无光敏快启普通模式切换到红外模式的ISO阈值。上层根据获取到的ISO值是否大于iso_thr_ir判定是否要打开IR CUT和IR LED进入红外模式。同时AE快速收敛算法内部也会根据此参数判定是否要切换到快速收敛的红外模式进行继续收敛。
ae_sns_dft->quick_start.ir_cut_delay_time 设置无光敏快启IR CUT打开需要的物理时间。单位为ms。
以上变量值均可通过Sensor驱动中的sensor_set_init()函数由外部传入进行灵活设定。
标定初始曝光量。在相同的曝光参数下,由于不同Sensor具有不同的光电敏感度。同时不同大小的光圈和不同的滤光片的选择都会对Sensor的最终曝光亮度有不同影响。当前的无光敏快启的初始曝光量需要进行标定。标定步骤和方法如下:
将辉度箱设定为EV8亮度。
将max_hist_offset设置为0,同时将AE算法设定为手动模式。
将相机镜头对着辉度箱。调节曝光量,同时查看Proc调试信息的OriAve值(不带权重的画面平均亮度),当OriAve值为80时,此时对应的曝光量作为初始曝光量。
初始曝光量微调。对于不同的产品形态有不同的亮度使用范围,可以对步骤4的初始曝光量进行微调,加快无光敏快启AE算法收敛的速度,以适应不同产品需求。
注意事项¶
在13.6.2小节的2中,将Sensor 配置为用I2C接口直接写Sensor寄存器的方式设定曝光量。在无光敏快启收敛完成后,需要进行相应的配置将Sensor的配置方式设定回普通方式。
初始亮度80为推荐值,用户可以根据产品形态和适应的亮度范围在此基础上进行上下调节以达到最佳收敛速度。如果没有辉度箱标定环境。可以使用曝光时间24ms,ISO100,光圈1.6相应的等曝光量曝光参数组合作为初始曝光量的进行调试。
带IR CUT无光敏快启基本流程¶

须知:
在确定长时间处于低照度环境下,为了减少IR CUT的切换次数,可以不进行IR CUT复位操作,即省略如上红色字体部分操作。
蓝框内的流程为上层应用操作。
附录¶
注册函数的关系¶
ss_mpi_isp_awb_lib_reg_callback和ss_mpi_isp_awb_lib_reg_callback这两个接口是ISP firmware库提供的钩子函数,用于开发3A算法库时实现注册动作。例如SDK 提供的3A算法库的ss_mpi_ae_register和ss_mpi_awb_register接口,在实现时调用了相应的钩子函数,所以调用ss_mpi_ae_register能实现AE算法库向ISP firmware库注册。
同样的,3A算法库同样也提供了钩子函数,用于Sensor库实现向3A算法库注册的动作。例如ss_mpi_ae_sensor_reg_callback和ss_mpi_awb_sensor_reg_callback,在xxx_cmos.c中可以看到调用了这些钩子函数的函数sensor_register_callback。用户在开发3A算法库时,也可以通过提供钩子函数的方式,实现Sensor库向3A算法库的注册。
当然,ISP firmware库也提供了钩子函数,用于Sensor库实现向ISP firmware库注册的动作。例如ss_mpi_isp_sensor_reg_callback,在xxx_cmos.c中可以看到调用了该钩子函数的函数sensor_register_callback。
所以,当用户调用ss_mpi_ae_register、ss_mpi_awb_register和sensor_register_callback就完成了3A算法库向ISP firmware库注册、Sensor库向3A算法库和ISP firmware库注册。
说明: 用户开发3A算法库时,请自行实现ss_mpi_axx_register接口。同时也请自行实现ss_mpi_axx_sensor_reg_callback钩子函数,并在sensor_register_callback中增加调用该钩子函数的代码,相关代码可以参考ISP firmware库的开源代码。
扩展性的设计考虑¶
在代码中有ot_vi_pipe、ot_isp_3a_alg_lib、ot_sensor_id这样一些概念,这些概念是出于架构扩展性的考虑。
ot_vi_pipe主要考虑的是支持多个ISP单元的情形。无论是多个ISP硬件单元,或是一个ISP硬件单元分时复用,从软件意义上讲,需要预留出扩展性。
ot_isp_3a_alg_lib主要考虑的是支持多个算法库,并动态切换的情形。例如用户实现了一套AE算法代码,但注册两个库,分别用于正常场景和抓拍场景,那么这时候需要用结构体中的handle来进行区分。例如用户实现了一套AWB算法代码,同时又想在某些场景下使用AWB算法库,那么这时候可以用结构体中的lib_name进行区分。当用户注册多个AE库,或AWB库时,ISP firmware将会全部对它们进行初始化,但是在运行时,仅会调用有效的库,设置有效库的接口是ss_mpi_isp_set_bind_attr,通过此接口可以快速切换运算的库。
ot_sensor_id仅起一个校验作用,确认注册给ISP firmware库和3A算法库的是同一款sensor。
这些概念仅是设计时预留的冗余,如果完全不需要这些概念,可以在开发时去掉这些概念。
3A架构的设计思路¶
设计思路基本是这样,ISP firmware初始化并销毁各个算法单元;在运行时,提供前一帧的统计信息,并根据返回值配置寄存器,其他内容,均由用户开发。所以当用户替换自己的3A算法后,当前的AE/AWB的MPI不可复用,cmos.c中的AE/AWB相关的内容不可复用,对于AE的权重配置和AWB的找白点配置的内容不可复用,这几个配置理论上是由3A算法配置,而不是从ISP firmware获取,ISP firmware中仅有简单的初始化值。
3A算法并不需要显式地去配置ISP寄存器,只需将需要配置的ISP寄存器值写到ot_isp_ae_result和ot_isp_awb_result结构体中即可;也不需要显式地去读取ISP寄存器,只需从ot_isp_ae_info和ot_isp_awb_info结构体中读取即可。
外部寄存器的说明¶
在_录像机_的应用中,通常除了业务主程序进程外,板端还会有另外的进程去支持PC端的工具来调节图像质量。ISP的各个算法的许多状态、参数均驻留于全局变量中,不足以支持多进程的访问,所以引入外部寄存器的概念,用以支持多进程的业务场景。用户通过PC端工具与板端进程通信,调用SDK提供的MPI,实际是改变外部寄存器中的内容,从而改变业务主程序中的ISP的各个算法的状态和参数。
外部寄存器还能与实际的硬件寄存器通过统一的接口读写,形式上与实际的硬件寄存器无差别。
用户如果使用外部寄存器的话,有这些已封装好的接口可以使用,当然用户也可以有其他方案实现多进程的支持。外部寄存器的地址空间是自定义的,只要不冲突即可。详细请参考开源代码,接口定义在isp_vreg.h文件中。
工频闪类型自适应Sample用例处理流程¶
图 1 工频闪类型自适应Sample用例处理流程

以上为工频闪类型自适应Sample用例的处理流程(calcflicker sample用例0)。此用例使用多次检测的结果进行确认后自动适配相应的抗闪参数。此用例作为使用Auto Flicker Type Detection(自动工频闪类型检测)接口进行自适应抗闪的参考。
检测结果为OT_ISP_FLICKER_TYPE_UNKNOW(有未知类型的工频闪)的原因有几种情况:
Camera摇晃导致检测不稳定。
图像中存在大面积的运动物体。
环境光源为同时存在50Hz和60Hz的混合光源。
环境光源为既不是50Hz也不是60Hz频率的非通用频率光源。以上这几种情况可根据实际情况灵活处理。
缩略语¶
3A |
AE, AWB and AF |
A |
|
ACM |
auto color management |
ACS |
auto color shading |
AE |
auto exposure |
AEB |
automatic exposure bracketing |
AF |
auto focus |
AG |
analog gain |
AGC |
auto gain control |
API |
application programming interface |
AWB |
auto WB correction |
C |
|
CAC |
chromatic aberration correction |
CA |
chroma adjust |
CSC |
color space conversion |
CCM |
color correction matrix |
CPU |
central processing unit |
D |
|
DG |
digital gain |
DPC |
defect pixel correction |
DRC |
dynamic range compression |
F |
|
FPN |
fixed pattern noise |
FW |
firmware |
H |
|
HDR |
high dynamic range |
I |
|
IMP |
image processing |
ISO |
ISO standard 12232:2006. A measure of photograpotc sensitivity to light |
ISP |
image signal processor |
L |
|
LUT |
lookup table |
N |
|
NP |
noise profile |
NR |
noise reduction |
W |
|
WB |
white balance |
WDR |
wide dynamic range |
Y |
|
YCbCr |
Method of encoding RGB colorspace according to the ITU-R BT.601 or ITU- R BT 709 standards |
YUV |
A method of encoding RGB colorspace in practice equivalent to YCbCr |

