统计信息

概述

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

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_set_stats_cfg

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_stats_cfg

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_stats_cfg

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_config

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_config

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

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_stats_cfg

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_ae_stats_cfg

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_wb_stats_cfg

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

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_stats_ctrl

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_af_h_param

OT_ISP_IIR_GAIN_NUM

【说明】

定义AF IIR gain的个数。

【定义】

#define OT_ISP_IIR_GAIN_NUM                              7

【注意事项】

无。

【相关数据类型及接口】

ot_isp_af_h_param

OT_ISP_IIR_SHIFT_NUM

【说明】

定义AF IIR shift的个数。

【定义】

#define OT_ISP_IIR_SHIFT_NUM                               4

【注意事项】

无。

【相关数据类型及接口】

ot_isp_af_h_param

OT_ISP_FIR_GAIN_NUM

【说明】

定义AF FIR gain的个数。

【定义】

#define OT_ISP_FIR_GAIN_NUM                              5

【注意事项】

无。

【相关数据类型及接口】

ot_isp_af_v_param

OT_ISP_ACC_SHIFT_H_NUM

【说明】

定义AF IIR累加统计shift的个数。

【定义】

#define OT_ISP_ACC_SHIFT_H_NUM                           2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_af_fv_param

OT_ISP_ACC_SHIFT_V_NUM

【说明】

定义AF FIR累加统计shift的个数。

【定义】

#define OT_ISP_ACC_SHIFT_V_NUM                             2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_af_fv_param

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

  • square_modeOT_ISP_AF_STA_SUM_NORM模式时,对分区间内每个像素的输出值求和即为分区间统计值
  • square_modeOT_ISP_AF_STA_SUM_SQUARE模式时,对分区间内每个像素的滤波器输出值求平方和即为分区间统计值。

OT_ISP_AF_STA_PEAK

  • 当square_modeOT_ISP_AF_STA_SUM_NORM模式时,先对分区间内一行中每个像素的滤波器输出值取最大值,再对多行的最大值求和即为分区间统计值
  • 当square_modeOT_ISP_AF_STA_SUM_SQUARE模式时,先对分区间内一行中每个像素的滤波器输出值取最大值,再对多行的最大值求平方和即为分区间统计值。

【注意事项】

【相关数据类型及接口】

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

  • peak_mode为OT_ISP_AF_STA_NORM模式时,对分区间内每个像素的滤波器输出值求和即为分区间统计值
  • 当peak_mode为OT_ISP_AF_STA_PEAK模式时,先对分区间内一行中每个像素的滤波器输出值取最大值,再对多行的最大值求和即为分区间IIR统计值。

OT_ISP_AF_STA_SUM_SQUARE

  • peak_mode为OT_ISP_AF_STA_NORM模式时,对分区间内每个像素的滤波器输出值求平方和即为分区间统计值
  • peak_mode为OT_ISP_AF_STA_PEAK模式时,先对分区间内一行中每个像素的滤波器输出值取最大值,再对多行的最大值求平方和即为分区间统计值。

【注意事项】

采用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域则需要配置以下几点。

  1. 配置bayer_format来指定bayer数据的pattern。支持如图1所示的4种pattern。

  2. 配置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值变大的现象。为了抑制这一现象,提供以下方法。

  • 高亮计数器

    图1,在聚焦模糊的时候因为光晕扩大画面中高亮点的个数增加,清晰的时候高亮点的个数最小,通过配置合适的高亮点判断门限high_luma_threshold即可以辅助实现SpotLight场景聚焦。

    图 1 高亮统计值

  • Level Depend Gain

    LDG的主要原理为通过参考画面像素亮度来衰减滤波器的输出,从而抑制SpotLight对FV值的影响。如图2横坐标为像素亮度值,纵坐标为对滤波器输出的Gain,此处的Gain为8bit定点小数Q8。用户可以通过调整图中6个参数控制曲线的形状。

    图 2 Level Depend Gain 曲线

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

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_task_register

数据类型

  • 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 "
};

【注意事项】

【相关数据类型及接口】

ot_isp_sync_tsk_method

不带光敏AE快速收敛模式(无光敏快启)使用说明

概述

无光敏快启是在没有光敏传感器反馈当前亮度的情况下,AE算法在启动后以最快速收敛到目标亮度范围的功能。此功能目前在大部分场景下可以在10帧内收敛到目标亮度范围。其中目标亮度范围为[目标亮度-目标亮度*10%,目标亮度+目标亮度*10%]。例如,当目标量亮度为50,则目标亮度范围为[45,55]。在使用此功能时,Sensor的驱动要进行相应的适配。

适配不带光敏AE快速收敛模式(无光敏快启)

  1. 适配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 数字增益的生效延迟帧数也要同保证同步,以确保曝光的同步。

  2. 配置pfn_cmos_ae_quick_start_status_set回调函数。无光敏快启收敛后,会调用此回调函数同时设定quick_start_status为TD_TRUE。此时通过此参数状态,将步骤1中的直接调用I2C接口方式配置寄存器的方式更改回普通方式。

  3. 设定无光敏快启相关参数:

    1. ae_sns_dft->quick_start.quick_start_enable设置为TD_TRUE打开无光敏快启功能。

    2. ae_sns_dft->quick_start.black_frame_num设定初始坏帧数。因部分Sensor在启动时,会输出若干坏帧,为了确保AE算法能够及时获取到有效的统计数据。需要填入正确的坏帧数,没有坏帧则填入0。

    3. ae_sns_dft->quick_start.ir_mode_en 设置无光敏快启下是否支持红外模式。如果是需要支持带有IR CUT和IR LED无光敏快启,则需要打开此模式。

    4. ae_sns_dft->quick_start.init_exposure_ir 设置无光敏快启红外模式下的初始曝光量。

    5. ae_sns_dft->quick_start.iso_thr_ir 设置无光敏快启普通模式切换到红外模式的ISO阈值。上层根据获取到的ISO值是否大于iso_thr_ir判定是否要打开IR CUT和IR LED进入红外模式。同时AE快速收敛算法内部也会根据此参数判定是否要切换到快速收敛的红外模式进行继续收敛。

    6. ae_sns_dft->quick_start.ir_cut_delay_time 设置无光敏快启IR CUT打开需要的物理时间。单位为ms。

    以上变量值均可通过Sensor驱动中的sensor_set_init()函数由外部传入进行灵活设定。

  4. 标定初始曝光量。在相同的曝光参数下,由于不同Sensor具有不同的光电敏感度。同时不同大小的光圈和不同的滤光片的选择都会对Sensor的最终曝光亮度有不同影响。当前的无光敏快启的初始曝光量需要进行标定。标定步骤和方法如下:

    1. 将辉度箱设定为EV8亮度。

    2. 将max_hist_offset设置为0,同时将AE算法设定为手动模式。

    3. 将相机镜头对着辉度箱。调节曝光量,同时查看Proc调试信息的OriAve值(不带权重的画面平均亮度),当OriAve值为80时,此时对应的曝光量作为初始曝光量。

  5. 初始曝光量微调。对于不同的产品形态有不同的亮度使用范围,可以对步骤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(有未知类型的工频闪)的原因有几种情况:

  1. Camera摇晃导致检测不稳定。

  2. 图像中存在大面积的运动物体。

  3. 环境光源为同时存在50Hz和60Hz的混合光源。

  4. 环境光源为既不是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