跳转至

ISP 开发参考(6~end)

IMP

IMP是指影响图像效果的模块,对应API接口必须在调用ss_mpi_isp_init接口之后才能调用。

Sharpen

功能描述

Sharpen模块用于增强图像的清晰度,包括调节图像边缘的锐化属性和增强图像的细节和纹理的清晰度,同时还能分别控制图像的带方向的边缘和无方向的细节纹理的锐化强度。此外,还能控制锐化后图像的overshoot(白边白点)和undershoot(黑边黑点),以及抑制噪声的增强。

API参考

ss_mpi_isp_set_sharpen_attr

【描述】

设定图像锐化属性。

【语法】

td_s32 ss_mpi_isp_set_sharpen_attr(ot_vi_pipe vi_pipe, const ot_isp_sharpen_attr *shp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

shp_attr

图像锐化属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_sharpen_attr

ss_mpi_isp_get_sharpen_attr

【描述】

获取图像锐化属性。

【语法】

td_s32 ss_mpi_isp_get_sharpen_attr(ot_vi_pipe vi_pipe, ot_isp_sharpen_attr *shp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

shp_attr

图像锐化属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_sharpen_attr

数据类型

OT_ISP_SHARPEN_LUMA_NUM

【说明】

亮度锐化权重区间数。

【定义】

#define OT_ISP_SHARPEN_LUMA_NUM         32

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_SHARPEN_GAIN_NUM

【说明】

细节锐化权重区间数。

【定义】

#define OT_ISP_SHARPEN_GAIN_NUM         32

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_SHARPEN_MOT_NUM

【说明】

运动区域锐化区间数。

【定义】

#define OT_ISP_SHARPEN_MOT_NUM          16

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

OT_ISP_SHARPEN_RLYWGT_NUM

【说明】

边缘锐化权重区间数。

【定义】

#define OT_ISP_SHARPEN_RLYWGT_NUM       16

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

OT_ISP_SHARPEN_STDGAIN_NUM

【说明】

边缘检测分数增益区间数。

【定义】

#define OT_ISP_SHARPEN_STDGAIN_NUM      16

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_sharpen_manual_shoot_threshold_attr

【说明】

定义亮区和暗区的shoot阈值抑制手动属性。

【定义】

typedef struct {
    td_u16 shoot_inner_threshold;
    td_u16 shoot_outer_threshold;
    td_u16 shoot_protect_threshold; 
} ot_isp_sharpen_manual_shoot_threshold_attr;

【成员】

成员名称

描述

shoot_inner_threshold

过亮和过暗区域的范围阈值。需要配合shoot_outer_threshold一起调试,该值越大,则越多过亮和过暗区域的shoot强度会被抑制,该值过大会导致过多的亮暗区的shoot被抑制,从而导致图像对比度降低。

取值范围:[0, 511],建议值100。

shoot_outer_threshold

过亮和过暗区域shoot被抑制的强度。需要配合shoot_inner_threshold一起调试,该值越大则由shoot_inner_threshold决定的过亮和过暗区域的shoot被抑制得越厉害,shoot越弱, 该值过大会导致亮区和暗区的shoot被过度抑制,从而导致图像对比度降低。

取值范围:[0, 511],建议值150

shoot_protect_threshold

不受shoot_inner_threshold和shoot_outer_threshold参数影响的区域阈值。该值越大,越多的过亮和过暗区域的shoot不受shoot_inner_threshold以及shoot_outer_threshold参数抑制。

取值范围:[0, 511],建议值100

【注意事项】

Hi3519DV500不支持。

ot_isp_sharpen_manual_edge_rly_attr

【说明】

定义边缘锐化手动属性。

【定义】

typedef struct {
    td_u16 edge_rly_fine_threshold;   
    td_u16 edge_rly_coarse_threshold;    
    td_u8  edge_overshoot;    
    td_u8  edge_undershoot;  
    td_u8  edge_gain_by_rly[OT_ISP_SHARPEN_RLYWGT_NUM];
    td_u8  edge_rly_by_mot[OT_ISP_SHARPEN_STDGAIN_NUM];
    td_u8  edge_rly_by_luma[OT_ISP_SHARPEN_STDGAIN_NUM];
} ot_isp_sharpen_manual_edge_rly_attr;

【成员】

成员名称

描述

edge_rly_fine_threshold

边缘检测阈值精调。对边缘检测进行更细致的调节,值越大判别为边缘的区域越少。

取值范围:[0, 1023],建议值:100

edge_rly_coarse_threshold

边缘检测阈值粗调。粗略地筛选噪声以及纹理区域,不让其进入边缘检测,值越大判别为边缘的区域越少。

取值范围:[0, 1023],建议值:200

edge_overshoot

边缘的overshoot强度。

该值越小,锐化后的白边越弱,边缘清晰度也会下降。

取值范围:[0, 127],建议值100。

edge_undershoot

边缘的undershoot强度。

该值越小,锐化后的黑边越弱,边缘清晰度也会下降。

取值范围:[0, 127],建议值127。

edge_gain_by_rly

边缘置信度锐化增益。将边缘按照置信度分成16个等级,等级越高边缘越强越明显,每个边缘等级对应一个边缘锐化增益,值越大相应的边缘区域锐化越强。

取值范围:[0, 255],建议值32。

edge_rly_by_mot

运动边缘置信度。将运动指数分成16个等级,等级越高,运动越明显。每个等级对应一个边缘置信度,该值越大,相应等级的运动区域的边缘置信度越高,越容易被检测为边缘。

取值范围:[0, 63],建议值16。

edge_rly_by_luma

亮度边缘置信度。将0-255的亮度平均分为16段亮度区间,每一段亮度区间对应一个边缘置信度,该值越大,相应的亮度区域的边缘置信度越高,越容易被检测为边缘。

取值范围:[0, 63],建议值16。

【注意事项】

Hi3519DV500不支持。

ot_isp_sharpen_manual_gain_by_mot_attr

【说明】

定义运动区域锐化增益手动属性。

【定义】

typedef struct {
    td_u8  mf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM];
    td_u8  hf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM];
    td_u8  lmf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM];
} ot_isp_sharpen_manual_gain_by_mot_attr;

【成员】

成员名称

描述

mf_gain_by_mot

运动区域中频锐化增益。将运动指数分成16个等级,每个等级对应一个中频锐化增益,该值越大相应等级的运动区域越锐利。

取值范围:[0, 32],建议值32。

hf_gain_by_mot

运动区域高频锐化增益。将运动指数分成16个等级,每个等级对应一个高频锐化增益,该值越大相应等级的运动区域越细碎。

取值范围:[0, 32],建议值32。

lmf_gain_by_mot

运动区域中低频锐化增益。将运动指数分成16个等级,每个等级对应一个中低频锐化增益,该值越大相应等级的运动区域细节越平滑。

取值范围:[0, 255],建议值16。

【注意事项】

Hi3519DV500不支持。

ot_isp_sharpen_manual_attr

【说明】

定义ISP Sharpen手动属性。

【定义】

typedef struct {
    td_u8  luma_wgt[OT_ISP_SHARPEN_LUMA_NUM];
    td_u16 texture_strength[OT_ISP_SHARPEN_GAIN_NUM];
    td_u16 edge_strength[OT_ISP_SHARPEN_GAIN_NUM];
    td_u16 texture_freq;
    td_u16 edge_freq;
    td_u8  over_shoot;
    td_u8  under_shoot;
    td_u16 motion_texture_strength[OT_ISP_SHARPEN_GAIN_NUM];
    td_u16 motion_edge_strength[OT_ISP_SHARPEN_GAIN_NUM];
    td_u16 motion_texture_freq;
    td_u16 motion_edge_freq;
    td_u8  motion_over_shoot;
    td_u8  motion_under_shoot;
    td_u8  shoot_sup_strength;
    td_u8  shoot_sup_adj;
    td_u8  detail_ctrl;
    td_u8  detail_ctrl_threshold;
    td_u8  edge_filt_strength;
    td_u8  edge_filt_max_cap;
    td_u8  r_gain;
    td_u8  g_gain;
    td_u8  b_gain;
    td_u8  skin_gain;
    td_u16 max_sharp_gain;
    ot_isp_sharpen_manual_shoot_threshold_attr shoot_threshold_attr;
    ot_isp_sharpen_manual_edge_rly_attr edge_rly_attr;
    ot_isp_sharpen_manual_gain_by_mot_attr gain_by_mot_attr;
} ot_isp_sharpen_manual_attr;

【成员】

成员名称

描述

luma_wgt

亮度锐化权重。该参数是一个32的数组,将0-255的亮度平均分为32段亮度区间,每一段亮度区间对应一个亮度权重。该值越大,对应的亮度区间的锐化越强;反之,越弱。

比如0-7的亮度区间的权重是luma_wgt[0],8-15的亮度区间的权重是luma_wgt[1],依次类推。如图1所示。

取值范围:[0, 31],建议值31。

texture_strength

无方向的细节纹理的锐化强度。

该值越大,无方向的细节纹理的清晰度越高。该参数是一个OT_ISP_SHARPEN_GAIN_NUM=32的数组,是一个32段的连续的强度曲线,如图2所示。

取值范围:[0, 4095],建议值300。

edge_strength

带方向的边缘的锐化强度。

该值越大,带方向的边缘的锐度越高。该参数是一个OT_ISP_SHARPEN_GAIN_NUM=32的数组,是一个32段的连续的强度曲线,如图3所示。

取值范围:[0, 4095],建议值400。

texture_freq

图像的无方向细节纹理的增强频段控制。

该值越大,细节纹理的增强就越偏向于高频增强,细节纹理就越细碎。反之,该值越小,细节纹理就越粗越平滑。texture_freq对应于强度参数texture_strength。texture_freq值过大,会导致图像的细节纹理过于细碎而不自然,甚至感觉模糊。

取值范围:[0, 4095],建议值128。

edge_freq

图像的带方向的边缘的增强频段控制。

该值越大,边缘的增强就越偏向于高频增强,图像的边缘就越细越窄。反之,该值越小,边缘就越粗越平滑。edge_freq对应于强度参数edge_strength。edge_freq值过大,会导致图像的边缘过细而出现虚边现象。

取值范围:[0, 4095],建议值96。

over_shoot

图像的overshoot(锐化后的白边白点)的强度。

该值越小,锐化后的白边白点越弱,清晰度也会下降。该值过小,图像会呈油画效果。

取值范围:[0, 127],建议值100。

under_shoot

图像的undershoot(锐化后的黑边黑点)的强度。

该值越小,锐化后的黑边黑点越弱,清晰度也会下降。该值过小,图像会呈油画效果。

取值范围:[0, 127],建议值127。

motion_texture_strength

运动区域无方向的细节纹理的锐化强度。

该值越大,运动区域无方向的细节纹理的清晰度越高。该参数是一个OT_ISP_SHARPEN_GAIN_NUM=32的数组,是一个32段的连续的强度曲线,如图2所示。

取值范围:[0, 4095],建议值300。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_edge_strength

运动区域带方向的边缘的锐化强度。

该值越大,运动区域带方向的边缘的锐度越高。该参数是一个OT_ISP_SHARPEN_GAIN_NUM=32的数组,是一个32段的连续的强度曲线,如图3所示。

取值范围:[0, 4095],建议值400。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_texture_freq

运动区域图像的无方向细节纹理的增强频段控制。

该值越大,运动区域细节纹理的增强就越偏向于高频增强,细节纹理就越细碎。反之,该值越小,细节纹理就越粗越平滑。texture_freq对应于强度参数texture_strength。texture_freq值过大,会导致图像运动区域的细节纹理过于细碎而不自然,甚至感觉模糊。

取值范围:[0, 4095],建议值128。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_edge_freq

运动区域图像的带方向的边缘的增强频段控制。

该值越大,运动区域边缘的增强就越偏向于高频增强,图像的边缘就越细越窄。反之,该值越小,边缘就越粗越平滑。edge_freq对应于强度参数edge_strength。edge_freq值过大,会导致图像的边缘过细而出现虚边现象。

取值范围:[0, 4095],建议值96。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_over_shoot

运动区域图像的overshoot(锐化后的白边白点)的强度。

该值越小,运动区域锐化后的白边白点越弱,清晰度也会下降。该值过小,图像会呈油画效果。

取值范围:[0, 127],建议值100。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_under_shoot

运动区域图像的undershoot(锐化后的黑边黑点)的强度。

该值越小,运动区域锐化后的黑边黑点越弱,清晰度也会下降。该值过小,图像会呈油画效果。

取值范围:[0, 127],建议值127。Hi3519DV500/Hi3516CV610 不支持此功能。

shoot_sup_strength

图像overshoot和undershoot的抑制强度。用于在保证清晰度不明显下降的前提下,抑制锐化后的overshoot和undershoot的宽度和幅度。

该值越大,锐化后的图像的overshoot和undershoot的宽度越窄、强度越小。该值变大,理论上不会影响图像的清晰度,只是黑白边变窄以后,会减弱人眼的锐度感受。该参数需要和shoot_sup_adj配合使用。

取值范围:[0, 255],建议值8。

shoot_sup_adj

图像overshoot和undershoot的抑制区域划分。该参数配合shoot_sup_strength使用,用于调节shoot_sup_strength作用的区域范围。

该值越小,则越多的纹理区域的shoot会被shoot_sup_strength抑制;该值越大,则只有很强的边缘的shoot会被shoot_sup_strength抑制,纹理区域的shoot不会被抑制。

取值范围:[0, 15],建议值9。

detail_ctrl

用于控制图像的细节纹理区的shoot强度。shoot越大,细节纹理区的清晰度越高。取值范围:[0, 255],

该值等于128是,则图像的细节纹理区域的shoot强度分别等于over_shoot和under_shoot。该值大于128,则图像的细节纹理的shoot强度大于over_shoot和under_shoot。该值小于128,则图像的细节纹理的shoot强度小于over_shoot和under_shoot。

detail_ctrl_threshold

图像的细节纹理区和边缘的区分阈值。该值配合detail_ctrl使用,用于区分纹理区和边缘。小于该阈值的区域为纹理区,该纹理区域的shoot会被detail_ctrl单独控制,而大于该阈值的边缘区域的shoot依然等于over_shoot和under_shoot。

取值范围:[0, 255],建议值160。

edge_filt_strength

边缘滤波强度的调试参数:控制图像边缘的宽度和平滑程度。

该值越大,判断为边缘的区域越多、边缘越宽,edge_strength起作用的区域越多,而且,该值越大,沿着边缘方向的平滑滤波强度也越大,边缘就越平滑。

反之,该值越小,判断为边缘的区域越少、边缘越窄,edge_strength起作用的区域越少,边缘平滑滤波强度就越弱。

取值范围:[0, 63];建议值53。

edge_filt_max_cap

边缘滤波的最大强度调试参数:该值越大,边缘滤波的最大强度也最大,edge_filt_strength的可调试范围也越大;一般建议该值大小控制30以内。

取值范围:[0, 47];建议值18。

r_gain

深红色区域的锐化增益。该值越大,则深红色区域的锐化强度越大。

  • Hi3519DV500取值范围:[0, 31];建议值28。
  • Hi3516CV610取值范围:[0, 63];建议值28。

g_gain

绿色区域的锐化增益。该值越大,则绿色区域的锐化强度越大。

取值范围:[0, 255];建议值32。

b_gain

深蓝色区域的锐化增益。该值越大,则深蓝色区域的锐化强度越大。

  • Hi3519DV500取值范围:[0, 31];建议值28。
  • Hi3516CV610取值范围:[0, 63];建议值28。

skin_gain

肤色区域的锐化增益。该值越大,则肤色区域的锐化强度越大。

取值范围:[0, 31];建议值23。

max_sharp_gain

图像锐化的最大增益值。该值越大,图像的锐化幅度越大,反之值越小,锐化幅度越小。适当的调小该参数,可以减少图像的过锐化,从而减少图像锐化后的黑白点。

取值范围:[0, 2047],建议值160。

shoot_threshold_attr

  • 亮区和暗区的shoot阈值控制参数。
  • Hi3519DV500不支持。

edge_rly_attr

  • 边缘锐化参数。
  • Hi3519DV500不支持。

gain_by_mot_attr

  • 运动区域锐化增益参数。
  • Hi3519DV500不支持。

图 1 Sharpen的像素亮度luma和锐化强度luma_wgt的关系曲线

图 2 texture_strength[OT_ISP_SHARPEN_GAIN_NUM]强度曲线示意图

强度曲线的横坐标var是从图像中提取的方差统计特征,将横坐标var均分为32段,用于区分出图像的Flat Area(平坦区域)、Weak Texture(弱纹理)、Texture(纹理)和Strong Texture(强纹理)。纵坐标就是强度参数texture_strength的值,用户可以通过设置该曲线上的32个强度值来为平坦区域、弱纹理区域、纹理区域和强纹理区域设置不同的锐化强度。这4个区域并没有明显的区分界限,都是连续过渡,用户可以根据实际效果来调整纵坐标强度,为不同的区域设置不同的强度。

图 3 edge_strength[OT_ISP_SHARPEN_GAIN_NUM]强度曲线示意图

强度曲线的横坐标var是从图像中提取的方差统计值,将横坐标var均分为32段,用于区分出图像的Flat Area(平坦区域)、Weak Edge(弱边缘)、Edge(边缘)和Strong Edge(强边缘)。纵坐标就是强度参数edge_strength的值,用户可以通过设置该曲线上的32个强度值来为平坦区域、弱边缘、边缘和强边缘设置不同的锐化强度。这4个区域并没有明显的区分界限,都是连续过渡,用户可以根据实际效果来调整纵坐标强度,为不同的区域设置不同的强度。

ot_isp_sharpen_auto_shoot_threshold_attr

【说明】

定义亮区和暗区的shoot阈值抑制自动属性。

【定义】

typedef struct {
    td_u16 shoot_inner_threshold[OT_ISP_AUTO_ISO_NUM];
    td_u16 shoot_outer_threshold[OT_ISP_AUTO_ISO_NUM];
    td_u16 shoot_protect_threshold[OT_ISP_AUTO_ISO_NUM];
} ot_isp_sharpen_auto_shoot_threshold_attr;

【成员】

成员名称

描述

shoot_inner_threshold

过亮和过暗区域的范围阈值。需要配合shoot_outer_threshold一起调试,该值越大,则越多过亮和过暗区域的shoot强度会被抑制,该值过大会导致过多的亮暗区的shoot被抑制,从而导致图像对比度降低。

取值范围:[0, 511],建议值100。

shoot_outer_threshold

过亮和过暗区域shoot被抑制的强度。需要配合shoot_inner_threshold一起调试,该值越大则由shoot_inner_threshold决定的过亮和过暗区域的shoot被抑制得越厉害,shoot越弱, 该值过大会导致亮区和暗区的shoot被过度抑制,从而导致图像对比度降低。

取值范围:[0, 511],建议值150。

shoot_protect_threshold

不受shoot_inner_threshold和shoot_outer_threshold参数影响的区域阈值。该值越大,越多的过亮和过暗区域的shoot不受shoot_inner_threshold以及shoot_outer_threshold参数抑制。

取值范围:[0, 511],建议值100。

【注意事项】

Hi3519DV500不支持。

ot_isp_sharpen_auto_edge_rly_attr

【说明】

定义边缘锐化自动属性。

【定义】

typedef struct {
    td_u16 edge_rly_fine_threshold[OT_ISP_AUTO_ISO_NUM];
    td_u16 edge_rly_coarse_threshold[OT_ISP_AUTO_ISO_NUM];
    td_u8  edge_overshoot[OT_ISP_AUTO_ISO_NUM];
    td_u8  edge_undershoot[OT_ISP_AUTO_ISO_NUM];
    td_u8  edge_gain_by_rly[OT_ISP_SHARPEN_RLYWGT_NUM][OT_ISP_AUTO_ISO_NUM]; 
    td_u8  edge_rly_by_mot[OT_ISP_SHARPEN_STDGAIN_NUM][OT_ISP_AUTO_ISO_NUM]; 
    td_u8  edge_rly_by_luma[OT_ISP_SHARPEN_STDGAIN_NUM][OT_ISP_AUTO_ISO_NUM]; 
} ot_isp_sharpen_auto_edge_rly_attr;

【成员】

成员名称

描述

edge_rly_fine_threshold

边缘检测阈值精调。对边缘检测进行更细致的调节,值越大判别为边缘的区域越少。

取值范围:[0, 1023],建议值:100

edge_rly_coarse_threshold

边缘检测阈值粗调。粗略地筛选噪声以及纹理区域,不让其进入边缘检测,值越大判别为边缘的区域越少。

取值范围:[0, 1023],建议值:200

edge_overshoot

边缘的overshoot强度。

该值越小,锐化后的白边越弱,边缘清晰度也会下降。

取值范围:[0, 127],建议值100。

edge_undershoot

边缘的undershoot强度。

该值越小,锐化后的黑边越弱,边缘清晰度也会下降。

取值范围:[0, 127],建议值127。

edge_gain_by_rly

边缘置信度锐化增益。将边缘按照置信度分成16个等级,等级越高边缘越强越明显,每个边缘等级对应一个边缘锐化增益,值越大相应的边缘区域锐化越强。

取值范围:[0, 255],建议值32。

edge_rly_by_mot

运动边缘置信度。将运动指数分成16个等级,等级越高,运动越明显。每个等级对应一个边缘置信度,该值越大,相应等级的运动区域的边缘置信度越高,越容易被检测为边缘。

取值范围:[0, 63],建议值16。

edge_rly_by_luma

亮度边缘置信度。将0-255的亮度平均分为16段亮度区间,每一段亮度区间对应一个边缘置信度,该值越大,相应的亮度区域的边缘置信度越高,越容易被检测为边缘。

取值范围:[0, 63],建议值16。

【注意事项】

Hi3519DV500不支持。

ot_isp_sharpen_auto_gain_by_mot_attr

【说明】

定义运动区域锐化增益自动属性。

【定义】

typedef struct {
    td_u8  mf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8  hf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8  lmf_gain_by_mot[OT_ISP_SHARPEN_MOT_NUM][OT_ISP_AUTO_ISO_NUM];
} ot_isp_sharpen_auto_gain_by_mot_attr;

【成员】

成员名称

描述

mf_gain_by_mot

运动区域中频锐化增益。将运动指数分成16个等级,每个等级对应一个中频锐化增益,该值越大相应等级的运动区域越锐利。

取值范围:[0, 32],建议值32。

hf_gain_by_mot

运动区域高频锐化增益。将运动指数分成16个等级,每个等级对应一个高频锐化增益,该值越大相应等级的运动区域越细碎。

取值范围:[0, 32],建议值32。

lmf_gain_by_mot

运动区域中低频锐化增益。将运动指数分成16个等级,每个等级对应一个中低频锐化增益,该值越大相应等级的运动区域细节越平滑。

取值范围:[0, 255],建议值16。

【注意事项】

Hi3519DV500不支持。

ot_isp_sharpen_auto_attr

【说明】

定义ISP Sharpen自动属性。

【定义】

typedef struct {
    td_u8  luma_wgt[OT_ISP_SHARPEN_LUMA_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 texture_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 edge_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 texture_freq[OT_ISP_AUTO_ISO_NUM];
    td_u16 edge_freq[OT_ISP_AUTO_ISO_NUM];
    td_u8  over_shoot[OT_ISP_AUTO_ISO_NUM];
    td_u8  under_shoot[OT_ISP_AUTO_ISO_NUM];
    td_u16 motion_texture_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 motion_edge_strength[OT_ISP_SHARPEN_GAIN_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 motion_texture_freq[OT_ISP_AUTO_ISO_NUM];
    td_u16 motion_edge_freq[OT_ISP_AUTO_ISO_NUM];
    td_u8  motion_over_shoot[OT_ISP_AUTO_ISO_NUM];
    td_u8  motion_under_shoot[OT_ISP_AUTO_ISO_NUM];
    td_u8  shoot_sup_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  shoot_sup_adj[OT_ISP_AUTO_ISO_NUM];
    td_u8  detail_ctrl[OT_ISP_AUTO_ISO_NUM];
    td_u8  detail_ctrl_threshold[OT_ISP_AUTO_ISO_NUM];
    td_u8  edge_filt_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  edge_filt_max_cap[OT_ISP_AUTO_ISO_NUM];
    td_u8  r_gain[OT_ISP_AUTO_ISO_NUM];
    td_u8  g_gain[OT_ISP_AUTO_ISO_NUM];
    td_u8  b_gain[OT_ISP_AUTO_ISO_NUM];
    td_u8  skin_gain[OT_ISP_AUTO_ISO_NUM];
    td_u16 max_sharp_gain[OT_ISP_AUTO_ISO_NUM];
    ot_isp_sharpen_auto_shoot_threshold_attr shoot_threshold_attr;
    ot_isp_sharpen_auto_edge_rly_attr edge_rly_attr;
    ot_isp_sharpen_auto_gain_by_mot_attr gain_by_mot_attr;
} ot_isp_sharpen_auto_attr;

【成员】

成员名称

描述

luma_wgt

亮度锐化权重。该参数是一个32的数组,将0-255的亮度平均分为32段亮度区间,每一段亮度区间对应一个亮度权重。该值越大,对应的亮度区间的锐化越强;反之,越弱。

比如0-7的亮度区间的权重是luma_wgt[0],8-15的亮度区间的权重是luma_wgt[1],依次类推。如图1所示。

取值范围:[0, 31],建议值31。

texture_strength

无方向的细节纹理的锐化强度。

该值越大,无方向的细节纹理的清晰度越高。该参数是一个OT_ISP_SHARPEN_GAIN_NUM=32的数组,是一个32段的连续的强度曲线,如图2所示。

取值范围:[0, 4095],建议值300。

edge_strength

带方向的边缘的锐化强度。

该值越大,带方向的边缘的锐度越高。该参数是一个OT_ISP_SHARPEN_GAIN_NUM=32的数组,是一个32段的连续的强度曲线,如图3所示。

取值范围:[0, 4095],建议值400。

texture_freq

图像的无方向细节纹理的增强频段控制。

该值越大,细节纹理的增强就越偏向于高频增强,细节纹理就越细碎。反之,该值越小,细节纹理就越粗越平滑。texture_freq对应于强度参数texture_strength。texture_freq值过大,会导致图像的细节纹理过于细碎而不自然,甚至感觉模糊。

取值范围:[0, 4095],建议值128。

edge_freq

图像的带方向的边缘的增强频段控制。

该值越大,边缘的增强就越偏向于高频增强,图像的边缘就越细越窄。反之,该值越小,边缘就越粗越平滑。edge_freq对应于强度参数edge_strength。edge_freq值过大,会导致图像的边缘过细而出现虚边现象。

取值范围:[0, 4095],建议值96。

over_shoot

图像的overshoot(锐化后的白边白点)的强度。

该值越小,锐化后的白边白点越弱,清晰度也会下降。该值过小,图像会呈油画效果。

取值范围:[0, 127],建议值100。

under_shoot

图像的undershoot(锐化后的黑边黑点)的强度。

该值越小,锐化后的黑边黑点越弱,清晰度也会下降。该值过小,图像会呈油画效果。

取值范围:[0, 127],建议值127。

motion_texture_strength

运动区域无方向的细节纹理的锐化强度。

该值越大,运动区域无方向的细节纹理的清晰度越高。该参数是一个OT_ISP_SHARPEN_GAIN_NUM=32的数组,是一个32段的连续的强度曲线,如图2所示。

取值范围:[0, 4095],建议值300。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_edge_strength

运动区域带方向的边缘的锐化强度。

该值越大,运动区域带方向的边缘的锐度越高。该参数是一个OT_ISP_SHARPEN_GAIN_NUM=32的数组,是一个32段的连续的强度曲线,如图3所示。

取值范围:[0, 4095],建议值400。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_texture_freq

运动区域图像的无方向细节纹理的增强频段控制。

该值越大,运动区域细节纹理的增强就越偏向于高频增强,细节纹理就越细碎。反之,该值越小,细节纹理就越粗越平滑。texture_freq对应于强度参数texture_strength。texture_freq值过大,会导致图像运动区域的细节纹理过于细碎而不自然,甚至感觉模糊。

取值范围:[0, 4095],建议值128。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_edge_freq

运动区域图像的带方向的边缘的增强频段控制。

该值越大,运动区域边缘的增强就越偏向于高频增强,图像的边缘就越细越窄。反之,该值越小,边缘就越粗越平滑。edge_freq对应于强度参数edge_strength。edge_freq值过大,会导致图像的边缘过细而出现虚边现象。

取值范围:[0, 4095],建议值96。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_over_shoot

运动区域图像的overshoot(锐化后的白边白点)的强度。

该值越小,运动区域锐化后的白边白点越弱,清晰度也会下降。该值过小,图像会呈油画效果。

取值范围:[0, 127],建议值100。Hi3519DV500/Hi3516CV610 不支持此功能。

motion_under_shoot

运动区域图像的undershoot(锐化后的黑边黑点)的强度。

该值越小,运动区域锐化后的黑边黑点越弱,清晰度也会下降。该值过小,图像会呈油画效果。

取值范围:[0, 127],建议值127。Hi3519DV500/Hi3516CV610 不支持此功能。

shoot_sup_strength

图像overshoot和undershoot的抑制强度。用于在保证清晰度不明显下降的前提下,抑制锐化后的overshoot和undershoot的宽度和幅度。

该值越大,锐化后的图像的overshoot和undershoot的宽度越窄、强度越小。该值变大,理论上不会影响图像的清晰度,只是黑白边变窄以后,会减弱人眼的锐度感受。该参数需要和shoot_sup_adj配合使用。

取值范围:[0, 255],建议值8。

shoot_sup_adj

图像overshoot和undershoot的抑制区域划分。该参数配合shoot_sup_strength使用,用于调节shoot_sup_strength作用的区域范围。

该值越小,则越多的纹理区域的shoot会被shoot_sup_strength抑制;该值越大,则只有很强的边缘的shoot会被shoot_sup_strength抑制,纹理区域的shoot不会被抑制。

取值范围:[0, 15],建议值9。

detail_ctrl

用于控制图像的细节纹理区的shoot强度。shoot越大,细节纹理区的清晰度越高。取值范围:[0, 255],

该值等于128是,则图像的细节纹理区域的shoot强度分别等于over_shoot和under_shoot。该值大于128,则图像的细节纹理的shoot强度大于over_shoot和under_shoot。该值小于128,则图像的细节纹理的shoot强度小于over_shoot和under_shoot。

detail_ctrl_threshold

图像的细节纹理区和边缘的区分阈值。该值配合detail_ctrl使用,用于区分纹理区和边缘。小于该阈值的区域为纹理区,该纹理区域的shoot会被detail_ctrl单独控制,而大于该阈值的边缘区域的shoot依然等于over_shoot和under_shoot。

取值范围:[0, 255],建议值160。

edge_filt_strength

边缘滤波强度的调试参数:控制图像边缘的宽度和平滑程度。

该值越大,判断为边缘的区域越多、边缘越宽,edge_strength起作用的区域越多,而且,该值越大,沿着边缘方向的平滑滤波强度也越大,边缘就越平滑。

反之,该值越小,判断为边缘的区域越少、边缘越窄,edge_strength起作用的区域越少,边缘平滑滤波强度就越弱。

取值范围:[0, 63],建议值53。

edge_filt_max_cap

边缘滤波的最大强度调试参数:该值越大,边缘滤波的最大强度也最大,edge_filt_strength的可调试范围也越大;一般建议该值大小控制30以内。

取值范围:[0, 47];建议值18。

r_gain

深红色区域的锐化增益。该值越大,则深红色区域的锐化强度越大。

  • Hi3519DV500取值范围:[0, 31];建议值28。
  • Hi3516CV610取值范围:[0, 63];建议值28。

g_gain

绿色区域的锐化增益。该值越大,则绿色区域的锐化强度越大。

取值范围:[0, 255];建议值32。

b_gain

深蓝色区域的锐化增益。该值越大,则深蓝色区域的锐化强度越大。

  • Hi3519DV500取值范围:[0, 31];建议值28。
  • Hi3516CV610取值范围:[0, 63];建议值28。

skin_gain

肤色区域的锐化增益。该值越大,则肤色区域的锐化强度越大。

取值范围:[0, 31];建议值23。

max_sharp_gain

图像锐化的最大增益值。该值越大,图像的锐化幅度越大,反之值越小,锐化幅度越小。适当的调小该参数,可以减少图像的过锐化,从而减少图像锐化后的黑白点。

取值范围:[0, 2047],建议值160。

shoot_threshold_attr

亮区和暗区的shoot阈值控制参数。

Hi3519DV500不支持。

edge_rly_attr

边缘锐化参数。

Hi3519DV500不支持。

gain_by_mot

运动区域锐化增益参数。

Hi3519DV500不支持。

【注意事项】

Auto档参数分别对应sensor在16种不同增益(Again*Dgain* ISPDgain(times))情况下的设置值,成员参数的含义与Manual档cmos成员参数一致。16种增益为:1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384、32768。

ot_isp_sharpen_detail_map

【说明】

是否显示图像细节灰度图。

【定义】

typedef enum {
    OT_ISP_SHARPEN_NORMAL = 0,
    OT_ISP_SHARPEN_OFF,
    OT_ISP_SHARPEN_DIFF_NORM,
    OT_ISP_SHARPEN_DIFF,
    OT_ISP_SHARPEN_TOTAL,
    OT_ISP_SHARPEN_TEXTURE,
    OT_ISP_SHARPEN_EDGE,
    OT_ISP_SHARPEN_TOTAL_FREQ,
    OT_ISP_SHARPEN_TEXTURE_FREQ,
    OT_ISP_SHARPEN_EDGE_FREQ,
    OT_ISP_SHARPEN_BUTT
} ot_isp_sharpen_detail_map;

【成员】

成员名称

描述

OT_ISP_SHARPEN_NORMAL

显示正常图像。

OT_ISP_SHARPEN_OFF

显示Sharpen关闭后图像。

OT_ISP_SHARPEN_DIFF_NORM

显示Sharpen锐化前后归一化差异图像,亮度越高,归一化差异越大。

OT_ISP_SHARPEN_DIFF

显示Sharpen锐化前后绝对差异图像,亮度越高,绝对差异越大。

OT_ISP_SHARPEN_TOTAL

显示细节纹理及边缘综合影响区域,亮度越高,细节越强。

OT_ISP_SHARPEN_TEXTURE

显示细节纹理影响区域,亮度越高,细节越强。

OT_ISP_SHARPEN_EDGE

显示细节边缘影响区域,亮度越高,细节越强。

OT_ISP_SHARPEN_TOTAL_FREQ

显示细节纹理及边缘增强频段综合影响区域,亮度越高,细节越强。

OT_ISP_SHARPEN_TEXTURE_FREQ

显示细节纹理增强频段影响区域,亮度越高,细节越强。

OT_ISP_SHARPEN_EDGE_FREQ

显示细节边缘增强频段影响区域,亮度越高,细节越强。

OT_ISP_SHARPEN_BUTT

显示图像细节类型枚举终止位指示。

【注意事项】

  • 该参数仅在设置为OT_ISP_SHARPEN_NORMAL时显示正常图像,在其余参数设置下为Debug模式,只显示Y分量。
  • Hi3516CV610不支持Debug模式。

【相关数据类型及接口】

ot_isp_sharpen_attr

ot_isp_sharpen_attr

【说明】

定义ISP Sharpen属性。

【定义】

typedef struct {
    td_bool enable;
    td_bool motion_en;
    td_u8   motion_threshold0;
    td_u8   motion_threshold1;
    td_u16  motion_gain0;
    td_u16  motion_gain1;
    td_u8   skin_umin;
    td_u8   skin_vmin;
    td_u8   skin_umax;
    td_u8   skin_vmax;
    ot_op_mode op_type;
    ot_isp_sharpen_detail_map  detail_map;
    ot_isp_sharpen_manual_attr manual_attr;
    ot_isp_sharpen_auto_attr  auto_attr;
} ot_isp_sharpen_attr;

【成员】

成员名称

描述

enable

Sharpen增强功能使能。

0:关闭;

1:使能。

默认值为1。

motion_en

运动区域增强使能。

0:关闭;

1:使能。

默认值为0。

Hi3519DV500/Hi3516CV610不支持此功能。

motion_threshold0

运动区域判断阈值,小于此值,则为完全运动。取值范围:[0, 15]。

Hi3519DV500/Hi3516CV610不支持此功能。

motion_threshold1

运动区域判断阈值,大于此值,则为完全静止。取值范围:[0, 15]

motion_threshold0必须不大于motion_threshold1。Hi3519DV500/Hi3516CV610不支持此功能。

motion_gain0

运动区域对应motion_threshold0参数的强度,0表示全部使用运动参数,256表示全部使用静止参数。取值范围:[0, 256]。

Hi3519DV500/Hi3516CV610不支持此功能。

motion_gain1

运动区域对应motion_threshold1参数的强度,0表示全部使用运动参数,256表示全部使用静止参数。取值范围:[0, 256]。

Hi3519DV500/Hi3516CV610不支持此功能。

skin_umin

肤色区域范围矩形窗的左下角的最小坐标的U值,取值范围:[0, 255]

skin_vmin

肤色区域范围矩形窗的左下角的最小坐标的V值,取值范围:[0, 255]

skin_umax

肤色区域范围矩形窗的右上角的最大坐标的U值,取值范围:[0, 255]

skin_vmax

肤色区域范围矩形窗的右上角的最大坐标的V值,取值范围:[0, 255]

op_type

Sharpen工作类型。

  • OT_OP_MODE_AUTO:自动;
  • OT_OP_MODE_MANUAL:手动。

默认值为OT_OP_MODE_AUTO。

detail_map

用于显示当前图像细节类型及强度的debug功能。Hi3516CV610不支持此功能。

manual_attr

Sharpen手动参数。

auto_attr

Sharpen自动参数。

【注意事项】

Sharpen功能分为自动和手动:

  • enable为1,op_type为OT_OP_MODE_AUTO,使用自动Sharpen功能。此时sharpen的强度值与系统增益的关系请参见成员变量。
  • enable设置为1,op_type设置为OT_OP_MODE_MANUAL使用手动Sharpen功能。
  • 运动区域判定采用BNR运动检测模块上一帧结果,因此只有当BNR运动检测使能时,此功能方可生效;生效时存在一帧图像延迟,因此建议运动区域与静止区域参数不要差异太大,否则容易出现运动与静止区域图像分层。
  • 运动区域判定采用BNR运动检测结果,由于噪声影响,部分静止区域可能也会判定为运动,部分平坦运动区域可能判定为静止,因此运动参数可能会影响静止区域,静止参数可能会影响运动区域。

【相关数据类型及接口】

无

Gamma

功能描述

Gamma模块对图像进行亮度空间非线性转换以适配输出设备。Gamma模块校正R、G、B时调用同一组Gamma表,Gamma表各节点之间的间距相同,节点之间的图像像素值使用线性插值生成。

API参考

ss_mpi_isp_set_gamma_attr

【描述】

设置Gamma属性。

【语法】

td_s32 ss_mpi_isp_set_gamma_attr(ot_vi_pipe vi_pipe, const ot_isp_gamma_attr *gamma_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号

输入

gamma_attr

Gamma属性

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

头文件:ot_common_isp.h、ss_mpi_isp.h

库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_gamma_attr

ss_mpi_isp_get_gamma_attr

【描述】

获取Gamma属性。

【语法】

td_s32 ss_mpi_isp_get_gamma_attr(ot_vi_pipe vi_pipe, ot_isp_gamma_attr *gamma_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号

输入

gamma_attr

Gamma属性

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

头文件:ot_common_isp.h、ss_mpi_isp.h

库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_gamma_attr

数据类型

OT_ISP_GAMMA_NODE_NUM

【说明】

Gamma表的分段节点数。

【定义】

#define OT_ISP_GAMMA_NODE_NUM           1025

【注意事项】

无。

【相关数据类型及接口】

ot_isp_gamma_attr

ot_isp_gamma_attr

【说明】

定义ISP Gamma校正属性。

【定义】

typedef struct
{
    td_bool                     enable;
    td_u16                      table[OT_ISP_GAMMA_NODE_NUM];
    ot_isp_gamma_curve_type    curve_type;
} ot_isp_gamma_attr;

【成员】

成员名称

描述

enable

Gamma校正功能使能。

TD_FALSE:关闭;

TD_TRUE:使能。

默认值为TD_TRUE。

table[OT_ISP_GAMMA_NODE_NUM]

1024段LUT表,用来表示输入输出值大小。

取值范围:[0x0, 0xFFF]

curve_type

用来表示传输曲线类型。

默认值为OT_ISP_GAMMA_CURVE_DEFAULT。

【注意事项】

  • Gamma校正R、G、B调用同一组Gamma Table。
  • curve_type选择为OT_ISP_GAMMA_CURVE_DEFAULT、OT_ISP_GAMMA_CURVE_SRGB、OT_ISP_GAMMA_CURVE_HDR等三种模式时,系统会自动配置预设的曲线,此时通过工具拖拉曲线均不生效。只有选择OT_ISP_GAMMA_CURVE_USER_DEFINE时,才能通过工具进行曲线修改。
  • Hi3519DV500芯片不支持OT_ISP_GAMMA_CURVE_HDR模式。
  • 使用任意类型的预设曲线后,可以切换成OT_ISP_GAMMA_CURVE_USER_DEFINE并以预设曲线为基础进行Gamma调试。

【相关数据类型及接口】

无。

ot_isp_gamma_curve_type

【说明】

定义Gamma曲线类型。

【定义】

typedef enum {
    OT_ISP_GAMMA_CURVE_DEFAULT = 0x0,
    OT_ISP_GAMMA_CURVE_SRGB,
    OT_ISP_GAMMA_CURVE_HDR,
    OT_ISP_GAMMA_CURVE_USER_DEFINE,
    OT_ISP_GAMMA_CURVE_BUTT
} ot_isp_gamma_curve_type;

【成员】

成员名称

描述

OT_ISP_GAMMA_CURVE_DEFAULT

默认传输曲线

OT_ISP_GAMMA_CURVE_SRGB

默认SDR传输曲线,由BT.709标准定义

OT_ISP_GAMMA_CURVE_HDR

默认HDR传输曲线,由SMPTE.2084标准定义,

Hi3519DV500/Hi3516CV610 不支持。

OT_ISP_GAMMA_CURVE_USER_DEFINE

用户自定义传输曲线

OT_ISP_GAMMA_CURVE_BUTT

传输曲线类型枚举终止位指示

【注意事项】

用户自定义Gamma曲线时,可以通过PQ Tools工具生成,必须确保Gamma曲线符合规范。WDR模式与线性模式可以分别定义一组Gamma曲线。

【相关数据类型及接口】

无。

DRC

功能描述

DRC算法用于对WDR合成后的数据进行动态范围压缩(Dynamic Range Compression)。图像一般需要在显示设备上显示,CRT显示器的动态范围一般只有<50dB,而WDR合成后的数据的动态范围可以达到120dB,如果直接在CRT显示器上显示,就会由于动态范围不匹配的问题,造成丢失亮度较高或者较低处的细节。

DRC算法的目的就是要使真实场景的观察者和显示设备的观察者都能获得相同的视觉感受。DRC算法将高动态范围的图像压缩到显示器的动态范围,同时尽可能的保留原图像的细节和对比度。

图 1 动态范围压缩

API参考

ss_mpi_isp_set_drc_attr

【描述】

设置动态范围压缩参数。

【语法】

td_s32 ss_mpi_isp_set_drc_attr(ot_vi_pipe vi_pipe, const ot_isp_drc_attr*drc_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

drc_attr

动态范围压缩参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_drc_attr

ss_mpi_isp_get_drc_attr

【描述】

获取动态范围压缩参数。

【语法】

td_s32 ss_mpi_isp_get_drc_attr(ot_vi_pipe vi_pipe, ot_isp_drc_attr *drc_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

drc_attr

动态范围压缩参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_drc_attr

数据类型

OT_ISP_DRC_CC_NODE_NUM

【说明】

DRC Color Correction (颜色校正) LUT节点个数。

【定义】

#define OT_ISP_DRC_CC_NODE_NUM          33

【注意事项】

无。

【相关数据类型及接口】

ot_isp_drc_attr

OT_ISP_DRC_TM_NODE_NUM

【说明】

DRC Tone Mapping LUT节点个数。

【定义】

#define OT_ISP_DRC_TM_NODE_NUM          200

【注意事项】

无。

【相关数据类型及接口】

ot_isp_drc_attr

OT_ISP_DRC_LMIX_NODE_NUM

【说明】

DRC Local Mixing(细节增强)LUT节点个数。

【定义】

#define OT_ISP_DRC_LMIX_NODE_NUM          33

【注意事项】

无。

【相关数据类型及接口】

ot_isp_drc_attr

OT_ISP_DRC_BCNR_NODE_NUM

【说明】

DRC BCNR Detail Restore(细节恢复)LUT节点个数。

【定义】

#define OT_ISP_DRC_BCNR_NODE_NUM          16

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_manual_attr

【说明】

定义ISP DRC手动属性。

【定义】

typedef struct {
    td_u16  strength;
} ot_isp_drc_manual_attr;

【成员】

成员名称

描述

strength

手动模式下DRC的强度,值越大,整体图像越亮。

取值范围:[0x0, 0x3FF]

【注意事项】

在线性和WDR模式下均可以达到最大值。

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_auto_attr

【说明】

定义ISP DRC自动属性。

【定义】

typedef struct {
    td_u16  strength;
    td_u16  strength_max;
    td_u16  strength_min;
} ot_isp_drc_auto_attr;

【成员】

成员名称

描述

strength

自动模式下DRC的强度,参数可以读写,值越大,整体强度越大。取值范围:[0x0, 0x3FF]

strength_max

自动模式下DRC实际生效强度值的上限。取值范围同strength。

strength_min

自动模式下DRC实际生效强度值的下限。取值范围同strength。

【注意事项】

  • 实际生效强度为:算法AUTO模式计算出的强度 * strength / 512。
  • 注意strength_max必须大于等于strength_min,否则两个参数均不生效。
  • 线性和WDR自动模式下DRC强度的建议取值范围不同,strength_max/strength_min的建议取值范围也不同:
    • 线性自动模式下,strength_max和strength_min的建议取值范围为[0x0, 0x200],其中strength_max默认值为0x200,strength_min默认值为0x0;
    • 在WDR自动模式下,strength_max和strength_min的建议取值范围为[0x200, 0x3FF],其中strength_max默认值为0x3FF,strength_min默认值为0x200。

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_auto_curve_attr

【说明】

定义ISP DRC Auto Curve属性。

【定义】

typedef struct {
    td_u8 brightness;
    td_u8 contrast;
    td_u8 tolerance;
 } ot_isp_drc_auto_curve_attr;

【成员】

成员名称

描述

brightness

用于生成Auto Curve,值越大,整体亮度越高。取值范围:[0x0, 0xF]。

contrast

用于生成Auto Curve,值越大,整体对比度越高。取值范围:[0x0, 0xF]。

tolerance

用于控制Auto Curve的刷新频率,值越大,对场景或曝光变化越不敏感,刷新频率越低。取值范围:[0x0, 0xF]。

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_asymmetry_curve_attr

【说明】

定义ISP DRC Asymmetry Curve属性。

【定义】

typedef struct {
    td_u8 asymmetry;
    td_u8 second_pole;
    td_u8 stretch;
    td_u8 compress;
} ot_isp_drc_asymmetry_curve_attr;

【成员】

成员名称

描述

asymmetry

用于生成Asymmetry Curve, 值越小,暗区亮度提亮越明显。取值范围:[1, 30]。

second_pole

用于生成Asymmetry Curve,值越小,亮区亮度压制越强,有利于保留高亮细节。取值范围:[150, 210]。

stretch

用于生成Asymmetry Curve,值越小,整体亮度越亮。取值范围:[30, 60]。

compress

用于生成Asymmetry Curve,值越小,整体亮度越亮。取值范围:[100, 200]。

【注意事项】

无

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_curve_select

【说明】

定义ISP DRC Tone Mapping曲线类型。

【定义】

typedef enum {
    OT_ISP_DRC_CURVE_ASYMMETRY = 0x0,
    OT_ISP_DRC_CURVE_USER,
    OT_ISP_DRC_CURVE_AUTO,
    OT_ISP_DRC_CURVE_BUTT
} ot_isp_drc_curve_select;

【成员】

成员名称

描述

OT_ISP_DRC_CURVE_ASYMMETRY

选择Asymmetry Curve。

OT_ISP_DRC_CURVE_USER

选择用户自定义曲线。

OT_ISP_DRC_CURVE_AUTO

选择自动曲线。仅Hi3516CV610支持

OT_ISP_DRC_CURVE_BUTT

无效值。

【注意事项】

无

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_bcnr_attr

【说明】

定义ISP DRC BCNR属性。

【定义】

typedef struct {
    td_bool  enable;
    td_u8    detail_restore_lut[OT_ISP_DRC_BCNR_NODE_NUM];
    td_u8    strength;
} ot_isp_drc_bcnr_attr;

【成员】

成员名称

描述

enable

BCNR使能,取值范围:[0x0, 0x1];0:关闭,1:使能

detail_restore_lut[OT_ISP_DRC_BCNR_NODE_NUM]

细节增强系数LUT,索引为亮度值,取值范围:[0x0, 0xFF];值越大,细节越强

strength

BCNR去噪强度;取值范围:[0x0, 0x8];值越大,去噪效果越明显

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_mixing_bright_param

【说明】

定义ISP DRC正向细节增强参数。

【定义】

typedef struct {
    td_u8 max;
    td_u8 min;
    td_u8 threshold;
    td_s8 slope;
} ot_isp_drc_mixing_bright_param;

【成员】

成员名称

描述

max

最大细节增强系数,取值范围:[0x0, 0x80]

min

最小细节增强系数,取值范围:[0x0, max]

threshold

细节增强的亮度阈值,取值范围:[0x0, 0xFF]

slope

细节增强系数的自适应斜率,取值范围:[-7, 7]

【注意事项】

无

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_mixing_dark_param

【说明】

定义ISP DRC负向细节增强参数。

【定义】

typedef struct {
    td_u8 max;
    td_u8 min;
    td_u8 threshold;
    td_s8 slope;
} ot_isp_drc_mixing_dark_param;

【成员】

成员名称

描述

max

最大细节增强系数,取值范围:[0x0, 0x80]

min

最小细节增强系数,取值范围:[0x0, max]

threshold

细节增强的亮度阈值,取值范围:[0x0, 0xFF]

slope

细节增强系数的自适应斜率,取值范围:[-7, 7]

【注意事项】

无

【相关数据类型及接口】

ot_isp_drc_attr

ot_isp_drc_attr

【说明】

定义ISP DRC属性。

【定义】

typedef struct {
    td_bool enable;
    ot_isp_drc_curve_select curve_select;
    td_u8  purple_reduction_strength;
    td_u8  bright_gain_limit;
    td_u8  bright_gain_limit_step;
    td_u8  dark_gain_limit_luma;
    td_u8  dark_gain_limit_chroma;
    td_u8  contrast_ctrl;
    td_u8  rim_reduction_strength;
    td_u8  rim_reduction_threshold;
    td_u16 color_correction_lut[OT_ISP_DRC_CC_NODE_NUM];
    td_u16 tone_mapping_value[OT_ISP_DRC_TM_NODE_NUM];
    td_u8  spatial_filter_coef;
    td_u8  range_filter_coef;
    td_u8  detail_adjust_coef;
 union {
        ot_isp_drc_mixing_bright_param local_mixing_bright_param;
        td_u8  local_mixing_bright[OT_ISP_DRC_LMIX_NODE_NUM];
    };
    union {
        ot_isp_drc_mixing_dark_param local_mixing_dark_param;
        td_u8  local_mixing_dark[OT_ISP_DRC_LMIX_NODE_NUM];
    };
    td_u8  high_saturation_color_ctrl;
    td_u8  global_color_ctrl;
    td_bool shoot_reduction_en;
    ot_op_mode op_type;
    ot_isp_drc_manual_attr manual_attr;
    ot_isp_drc_auto_attr   auto_attr;
    ot_isp_drc_asymmetry_curve_attr asymmetry_curve;
    ot_isp_drc_auto_curve_attr auto_curve;
    ot_isp_drc_bcnr_attr bcnr_attr;
} ot_isp_drc_attr;

【成员】

成员名称

描述

enable

DRC动态范围压缩使能。取值范围:[0x0, 0x1]

0:关闭;

1:使能。

curve_select

DRC Tone mapping曲线选择。取值范围:[0x0, 0x2]

0:Asymmetry curve;

1:用户自定义曲线

2: 自适应曲线(Auto Curve)。Hi3519DV500不支持该模式。

purple_reduction_strength

紫边校正强度,值越大,紫边校正强度越大。取值范围:[0x0, 0x80]

Hi3516CV610不支持。

bright_gain_limit

亮区亮度增益限制目标值;值越大,限制越大。取值范围:[0x0, 0xF]

bright_gain_limit_step

亮区亮度增益限制自适应步长;值越小,限制越大。取值范围:[0x0, 0xF]

dark_gain_limit_luma

暗区亮度增益限制;值越大,限制越大。取值范围:[0x0, 0x85]

dark_gain_limit_chroma

暗区色度增益限制;值越大,限制越大。取值范围:[0x0, 0x85]

contrast_ctrl

局部对比度控制,取值范围:[0x0, 0xF],参数效果与图像亮度分布相关,一般场景下建议值为6到10之间。

rim_reduction_strength

去边线强度。值越大,边线减弱越明显,但是可能会带来细节损失。取值范围:[0x0, 0x40]

rim_reduction_threshold

边线检测阈值。值越大,边线减弱越明显,但是可能会带来细节损失。取值范围:[0x0, 0x80]

color_correction_lut[OT_ISP_DRC_CC_NODE_NUM]

颜色校正系数LUT,值越小,饱和度越低。取值范围:[0x0, 0x400]

tone_mapping_value[OT_ISP_DRC_TM_NODE_NUM]

用户自定义Tone Mapping曲线LUT(要求配置为单调非递减曲线)。

仅在curve_select=OT_ISP_DRC_CURVE_USER时生效,取值范围:[0x0, 0xFFFF]

spatial_filter_coef

Filter空域滤波系数。值越大,运动halo越不明显,细节越少,值越小,细节表现越好,运动halo越明显。取值范围:[0x0, 0x5]

range_filter_coef

Filter值域滤波系数。值越大,halo越明显;值越小,halo表现越好,但是在强边缘处可能会出现描边现象。取值范围:[0x0, 0xA]

detail_adjust_coef

Filter细节微调系数。值越大,整体细节越强。取值范围:[0x0, 0xF]

local_mixing_bright[OT_ISP_DRC_LMIX_NODE_NUM]

Filter对应的正向细节增强系数,索引为亮度值。取值范围:[0x0, 0x80]

Hi3516CV610不支持。

local_mixing_bright_param

Filter对应的正向细节增强系数属性;

仅Hi3516CV610支持。

local_mixing_dark[OT_ISP_DRC_LMIX_NODE_NUM]

Filter对应的负向细节增强系数,索引为亮度值。取值范围:[0x0, 0x80]

Hi3516CV610不支持。

local_mixing_dark_param

Filter对应的负向细节增强系数属性;

仅Hi3516CV610支持。

high_saturation_color_ctrl

高饱和区域颜色控制;主要用于改善DRC提亮后颜色鲜艳区域(尤其是红蓝色区域)由于过曝而出现的颜色变淡的问题,副作用是部分场景可能加重紫边。取值范围:[0x0, 0xF]

global_color_ctrl

全局颜色控制;控制图像全局的饱和度,值越大饱和度越低。取值范围:[0x0, 0xF]

shoot_reduction_en

去黑边使能;用于改善亮暗交界的黑边。取值范围:[0x0, 0x1]

op_type

DRC工作模式选择:

OT_OP_MODE_AUTO:自动模式;

OT_OP_MODE_MANUAL:手动模式。

manual_attr

DRC手动模式属性。

auto_attr

DRC自动模式属性。

asymmetry_curve

DRC Asymmetry Curve属性,仅在curve_select=OT_ISP_DRC_CURVE_ASYMMETRY时生效。

auto_curve

DRC Auto Curve属性,仅在curve_select=OT_ISP_DRC_CURVE_AUTO时生效。仅Hi3516CV610支持。

bcnr_attr

DRC BCNR属性。仅Hi3516CV610支持。

【注意事项】

  • DRC功能分为自动和手动, DRC实际生效强度在自动模式下会根据场景自适应,而在手动模式下完全由用户配置:

    • op_type为OT_OP_MODE_AUTO,使用自动DRC功能;
    • op_type设置为OT_OP_MODE_MANUAL使用手动DRC功能。
  • 参数asymmetry,second_pole, stretch和compress对Asymmetry Curve形状的影响趋势请参考《ISP 图像调优指南》DRC相关章节。

  • 建议color_correction_lut的值不要调试过小,因为降低饱和度的同时会带来高频细节的损失,用户可以配合CA模块来调试整体饱和度。
  • dark_gain_limit_luma和dark_gain_limit_chroma两个接口的实际效果不完全平滑,即参数在两个相邻值之间切换时,效果可能存在跳变。
  • shoot_reductione_en使能时,可能导致夜间场景的灯光轮廓清晰程度下降,同时会导致purple_reduction_strength对应的去紫边功能的效果显著减弱。
  • auto_curve功能在对AE统计信息的位置和模式有如下要求;如不满足,该功能不生效且会有"Invalid AE Stat Config ..."的报错打印:

    • AE统计信息在pipeline中的位置必须为:ISP_AE_AFTER_DG或者ISP_AE_AFTER_AWB
    • AE统计信息中直方图和均值对应的开方模式,即hist_mode和aver_mode,均必须配置为:ISP_AE_NORMAL
  • bcnr_attr在以下情况不生效:

    • WDR模式
    • 线性在线模式下图像宽度大于3200。
  • DRC Strength=0和不使能DRC的图像效果可能存在差异,这是由于Strength仅控制DRC对画面整体亮度的改变程度,DRC部分子模块不受其影响。如果要让DRC使能时效果和不使能一致,除配置Strength=0外,还需做如下配置:

    • 配置bcnr_attr.enable=0,关闭BCNR;
    • 配置color_correction_lut所有值为1024,关闭颜色校正;
    • 配置dark_gain_limit_chroma=0,关闭暗区颜色增益抑制;
    • 配置bright_gain_limit=0, bright_gain_limit_step=15,关闭高亮抑制;
    • 配置global_color_ctrl=0, 关闭全局颜色控制。

【相关数据类型及接口】

无。

Mesh Shading

功能描述

LSC模块主要用来处理由于镜头光学折射不均匀导致的镜头周围出现阴影的情况。目前流行的处理方式有Radial(同轴圆)方式以及Mesh(网格)方式。

  • 在Hi3519DV500芯片中 Mesh Shading算法使用Mesh(网格)方式对画面进行标定/矫正,算法会将整个Bayer域画面分割成32x32个子区域,这32x32个区域大小大致相等。
  • 在Hi3516CV610芯片中,算法会将整个Bayer域画面分割成32x18个子区域,这32x18个区域大小大致相等。

在数据处理过程中,算法将分别对RAW域中的每个通道进行处理。

API参考

ss_mpi_isp_set_mesh_shading_attr

【描述】

设置Mesh Shading算法参数。

【语法】

td_s32 ss_mpi_isp_set_mesh_shading_attr(ot_vi_pipe vi_pipe, const ot_isp_shading_attr *shading_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

shading_attr

Mesh Shading算法参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a, libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_mesh_shading_attr

ss_mpi_isp_get_mesh_shading_attr

【描述】

获取Mesh Shading算法参数。

【语法】

td_s32 ss_mpi_isp_get_mesh_shading_attr(ot_vi_pipe vi_pipe, ot_isp_shading_attr *shading_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

shading_attr

Mesh Shading算法参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a, libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_mesh_shading_attr

ss_mpi_isp_set_mesh_shading_gain_lut_attr

【描述】

设定Mesh Shading增益表属性。

【语法】

td_s32 ss_mpi_isp_set_mesh_shading_gain_lut_attr(ot_vi_pipe vi_pipe, const ot_isp_shading_lut_attr *shading_lut_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号

输入

shading_lut_attr

Mesh Shading增益表属性

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_mesh_shading_gain_lut_attr

ss_mpi_isp_get_mesh_shading_gain_lut_attr

【描述】

获取Mesh Shading增益表属性。

【语法】

td_s32 ss_mpi_isp_get_mesh_shading_gain_lut_attr(ot_vi_pipe vi_pipe, ot_isp_shading_lut_attr *shading_lut_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

shading_lut_attr

Mesh Shading增益表属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_mesh_shading_gain_lut_attr

数据类型

OT_ISP_MLSC_X_HALF_GRID_NUM

【说明】

x方向上mesh分块数量的一半。

【定义】

#define OT_ISP_MLSC_X_HALF_GRID_NUM       ((OT_ISP_LSC_GRID_COL - 1) / 2)

【注意事项】

无。

【相关数据类型及接口】

ot_isp_shading_lut_attr

OT_ISP_MLSC_Y_HALF_GRID_NUM

【说明】

y方向上mesh分块数量的一半。

【定义】

#define OT_ISP_MLSC_Y_HALF_GRID_NUM       ((OT_ISP_LSC_GRID_ROW - 1) / 2)

【注意事项】

无

【相关数据类型及接口】

ot_isp_shading_lut_attr

OT_ISP_MLSC_GAIN_LUT_NUM

【说明】

定义Mesh Shading Lut表的长度。

【定义】

#define OT_ISP_MLSC_GAIN_LUT_NUM          2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_shading_lut_attr

ot_isp_shading_attr

【说明】

定义Mesh Shading算法参数。

【定义】

typedef struct {
    td_bool  enable;
    td_u16  mesh_strength;
    td_u16  blend_ratio;    
} ot_isp_shading_attr;

【成员】

成员名称

描述

enable

Mesh Shading使能开关。

取值范围:[0,1]

0:禁止;

1:使能。

mesh_strength

纠正Mesh Shading标定后的全局强度。当镜头shading很严重的时候,画面四个角补偿的增益很大,容易导致噪声很大,而且画面有格子现象。此时调整mesh_strength小于一倍强度,可以减少Mesh Shading的补偿值,从而减小四个角的补偿增益,达到优化噪声和画面格子的效果。

取值范围:[0, 16383],默认值4096为一倍

blend_ratio

两张增益表的融合比例,256表示只选择第0张表,0表示只选择第1张表。

取值范围:[0,256]

【注意事项】

无

【相关数据类型及接口】

ot_isp_shading_gain_lut

【说明】

定义Mesh Shading增益表参数。

【定义】

typedef struct {
    td_u16  r_gain[OT_ISP_LSC_GRID_POINTS];
    td_u16  gr_gain[OT_ISP_LSC_GRID_POINTS];
    td_u16  gb_gain[OT_ISP_LSC_GRID_POINTS];
    td_u16  b_gain[OT_ISP_LSC_GRID_POINTS];
} ot_isp_shading_gain_lut;

【成员】

成员名称

描述

r_gain[OT_ISP_LSC_GRID_POINTS]

用来储存Mesh Shading所用R通道标定数据。该数组表示画面从左至右、从上至下的网格交点处的R分量阴影矫正增益数据值。

取值范围:[0, 1023]

gr_gain[OT_ISP_LSC_GRID_POINTS]

用来储存Mesh Shading所用Gr通道标定数据。该数组表示画面从左至右、从上至下的网格交点处的Gr分量阴影矫正增益数据值。

取值范围:[0, 1023]

gb_gain[OT_ISP_LSC_GRID_POINTS]

用来储存Mesh Shading所用Gb通道标定数据。该数组表示画面从左至右、从上至下的网格交点处的Gb分量阴影矫正增益数据值。

取值范围:[0, 1023]

b_gain[OT_ISP_LSC_GRID_POINTS]

用来储存Mesh Shading所用B通道标定数据。该数组表示画面从左至右、从上至下的网格交点处的B分量阴影矫正增益数据值。

取值范围:[0, 1023]

【注意事项】

  • 增益表的默认配置与ot_isp_cmos_alg_key中的bit1(Lsc 标志位)有关,如果bit1(Lsc=1),则采用cmos_ex.h中的配置值作为默认值;否则默认配置为1倍增益。
  • 增益表的精度与mesh_scale的值有关系,详参表1。在mesh_scale配置为默认值4的情况下,增益表配置为0值表示增益为1倍。

【相关数据类型及接口】

ot_isp_shading_lut_attr

【说明】

定义Mesh Shading增益表属性。

【定义】

typedef struct {
    td_u8   mesh_scale;
    td_u16  x_grid_width[OT_ISP_MLSC_X_HALF_GRID_NUM];
    td_u16  y_grid_width[OT_ISP_MLSC_Y_HALF_GRID_NUM];
    ot_isp_shading_gain_lut lsc_gain_lut[OT_ISP_MLSC_GAIN_LUT_NUM];
} ot_isp_shading_lut_attr;

【成员】

成员名称

描述

mesh_scale

增益表精度控制参数。当选择的精度较低时(比如mesh_scale为3),画面衰减幅度大,可能会出现格子现象,可以提高精度(比如2或7)重新标定。

取值范围:[0, 7]

x_grid_width [OT_ISP_MLSC_X_HALF_GRID_NUM]

用来储存各GRID分区宽度大小信息。该接口各分量最小值为4,总和应为原画面宽度的四分之一。(例如原画面大小为1080p,则该接口各参数总和应为480)

取值范围:[4, 255],width为原画面的宽度。

y_grid_width[OT_ISP_MLSC_Y_HALF_GRID_NUM]

用来储存各GRID分区高度大小信息。该接口各分量最小值为4,总和应为原画面高度的四分之一。(例如原画面大小为1080p,则该接口各参数总和应为270)

取值范围:[4, 255],height为原画面的高度。

lsc_gain_lut[OT_ISP_MLSC_GAIN_LUT_NUM]

两组色温下的增益表配置。硬件基于这两组表以及blend_ratio计算当前色温下的校正增益表。

取值范围:[0, 1023]

【注意事项】

  • 调整x_grid_width或y_grid_width里的值即调整分区宽度或者高度。注意由于整体画面为上下、左右对称,因此每当设置一个分区的宽度或者高度时,其对称分区的宽度或高度也会相应发生变化。改变后的分区宽度与高度请满足总和为原画面大小宽度或高度的四分之一。由于调节比较复杂并容易造成Color Shading现象,一般不建议手动调节。分辨率切换的时候,当ot_isp_cmos_alg_key接口中bit1_lsc使能,用户需在sensor初始化文件中配置变分辨率后的x_grid_width与y_grid_width,否则可能出现图像异常;当bit1_lsc不使能,x_grid_width与y_grid_width自动重新配置。
  • 建议分辨率切换完成后再开启lsc使能,否则应及时配置变分辨率后的lsc_gain_lut。
  • 由于x_grid_width或y_grid_width的最小值为4,Hi3519DV500的Mesh Shading所支持的最小分辨率为256x256,Hi3516CV610的Mesh Shading所支持的最小分辨率为256x144。
  • 硬件基于配置的两组色温下的增益表以及blend_ratio进行插值得到当前色温下的校正增益表的计算,从而校正整幅图像的shading现象,其中blend_ratio为lsc_gain_lut[0]对应的权重。
  • 在单光源模式下,lsc_gain_lut结构体需要配置成一致,此时需要配置成标定的第一个光源。
  • 增益位宽为10bit,即最大值为1023。

    • 当mesh_scale为0至3时,增益的表示与其他算法一致,增益精度从高到低,取值范围从小变大,1倍增益不为0;
    • 当mesh_scale为4至7时,精度从高到低,取值范围从小变大,增益的表示方式略有差异,实际的增益计算方式为通用增益减去对应精度的1倍增益,比如mesh_scale为5时,按照增益精度为1.9,若通用增益为886,1倍对应增益512,那么实际的增益为886-512=374,这种表示方式下,最小的增益为1倍,但是表示的范围比上一种要大。
  • 在能够完全校正的情况下,增益精度mesh_scale应该尽量选择精度高的档位,提高校正的准确度,例如当mesh_scale为0或4时都能校正,应当选择4。对于某些镜头阴影特别严重的极端情况下,存在无法完全校正的可能,当选择较大增益倍数(如mesh_scale为3)校正时,可能会在边缘处出现暗条纹,此时需要降低增益倍数来提高精度(设mesh_scale为 2或7),重新标定,直到暗条纹消失为止。

表 1 mesh_scale与增益精度对应关系

mesh_scale

增益表的数据格式

增益取值范围

1倍增益对应增益配置值

0

1.9

[0,2)

512

1

2.8

[0,4)

256

2

3.7

[0,8)

128

3

4.6

[0,16)

64

4

0.10

[1,2)

0

5

1.9

[1,3)

0

6

2.8

[1,5)

0

7

3.7

[1,9)

0

【相关数据类型及接口】

Defect Pixel

功能描述

DPC算法通过在5x5的窗口中通过某些坏点检测算法找到该窗口中明显异于临近像素的坏点。该模块主要包含以下两种模式:

  • 静态坏点标定/校正有两种流程:亮点和暗点流程

    • 在亮点流程中,光圈处于关闭状态,启动坏点标定程序,得到坏点坐标信息。坏点个数的总数由坏点校正模块的memory决定的。得到的坏点通过临近像素的中值滤波进行校正。
    • 在暗点流程中,光圈处于正常打开状态,要求平坦背景,最好使用灰度箱固定光源,图像整体平均亮度大约为最大亮度50%,或Bayer格式中B通道亮度为最大亮度20%左右,启动坏点检测程序,得到坏点坐标。坏点个数的总数是由坏点校正模块的memory决定的。得到的坏点通过临近像素的中值滤波进行校正。

      注意:Hi3519DV500 DPC所能支持的最大静态坏点数为6144。

  • 动态坏点检测/校正

    在这种模式中,校正模块使用动态检测方法的进行坏点检测,能够校正的坏点个数是没有限制的。这种模式总体上相对于静态模式更不可靠,但是在低照度情况下强烈推荐使用动态坏点校正功能,可以校正更多的坏点以及明显改善图像偏色的问题。

API参考

ss_mpi_isp_set_dp_calibrate

【描述】

设置静态坏点标定参数。

【语法】

td_s32 ss_mpi_isp_set_dp_calibrate(ot_vi_pipe vi_pipe, const ot_isp_dp_static_calibrate *dp_calibrate);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI pipe号

输入

*dp_calibrate

静态坏点标定参数

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

  • 该接口为静态坏点标定接口,坏点标定只需启动一次,标定完成之后自动关闭标定使能,恢复为正常的坏点校正模式。亮坏点检测的环境为:使用最小的模拟增益和数字增益,降帧率到5~6fps,使曝光时间为200ms(系统自动完成),遮黑镜头或关闭光圈(需手动操作);暗坏点检测的环境为:光圈处于正常打开状态,要求平坦背景,最好使用辉度箱固定光源,图像整体平均亮度大约为最大亮度50%,或Bayer格式中B通道亮度为最大亮度20%左右。
  • 支持WDR模式下静态坏点标定。WDR模式下默认选择短帧进行静态坏点标定,推荐在标定前,通过ss_mpi_isp_set_module_ctrl接口的bit2_chn_select变量选择长帧,再启动静态坏点标定。一般情况下,长帧的标定即可满足需求。若特殊情况下,长帧标定后仍然有坏点残留,可通过bit2_chn_select变量选择中/短帧再次进行标定,并将多个坏点表合并成一个表。
  • WDR模式下启动静态坏点标定时,ISP会自动关闭BNR, DRC模块,以避免最大性能场景DPC标定异常。标定完成后,ISP恢复BNR, DRC模块默认配置。ISP关闭BNR, DRC模块会影响标定过程中输出图像的亮度和噪声,不影响标定结果。
  • 拼接模式不支持静态坏点标定。
  • Hi3516CV610不支持。

【举例】

以标定亮点为例:

ot_isp_dp_static_calibrate dpc_calib;
dpc_calib.enable_detect = 1; /* 使能静态坏点标定 */
dpc_calib.static_dp_type = 0;
dpc_calib.count_max = 1024;
dpc_calib.count_min = 1;
dpc_calib.start_thresh = 1;
dpc_calib.time_limit = 0x640;
ss_mpi_isp_set_dp_calibrate(vi_pipe, &dpc_calib);

【相关主题】

ss_mpi_isp_get_dp_calibrate

ss_mpi_isp_get_dp_calibrate

【描述】

获取静态坏点标定结果。

【语法】

td_s32 ss_mpi_isp_get_dp_calibrate (ot_vi_pipe vi_pipe, ot_isp_dp_static_calibrate *dp_calibrate);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI pipe号

输入

*dp_calibrate

静态坏点标定参数

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持。

【举例】

以获取亮点标定结果为例:

td_u16 i;
td_u16 bright_bp_num = 0;
td_u32 bright_table[SS_MPI_STATIC_DP_COUNT_MAX];
ss_mpi_isp_get_dp_calibrate(vi_pipe, &dpc_calib);
while(dpc_calib.status == OT_ISP_STATE_INIT) {
     sleep(1);
     ss_mpi_isp_get_dp_calibrate(vi_pipe, &dpc_calib);
}
bright_bp_num = dpc_calib.count;
for (i = 0; i < bright_bp_num; i++) {
     bright_table[i] = dpc_calib.table[i];
}

【相关主题】

ss_mpi_isp_set_dp_calibrate

ss_mpi_isp_set_dp_static_attr

【描述】

设置静态坏点属性,合并坏点表,将坏点坐标信息与坏点数目写入系统内存。

【语法】

td_s32 ss_mpi_isp_set_dp_static_attr(ot_vi_pipe vi_pipe, const ot_isp_dp_static_attr *dp_static_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI pipe号

输入

*dp_static_attr

静态坏点属性

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

  • 每一路ISP BE所能支持的最大静态坏点个数为OT_ISP_STATIC_DP_COUNT_NORMAL(在Hi3519DV500中,OT_ISP_STATIC_DP_COUNT_NORMAL = 2048),因此DPC模块所能支持的最大静态坏点个数为count = OT_ISP_STATIC_DP_COUNT_NORMAL * (当前业务场景下ISP BE的分块数目)。则亮点数目bright_count <= count且dark_count <= count,若亮点表和暗点表中有same个重复的坏点,则bright_count + dark_count – same < =count。ISP BE的分块数目参考Proc 调试信息说明中的” block_num”。
  • Hi3516CV610不支持。

【举例】

ot_isp_dp_static_attr dpc_static_attr;
dpc_static_attr.bright_count = bright_bp_number;
dpc_static_attr.dark_count = dark_bp_number;
for (i = 0; i < bright_bp_number; i++) {
         dpc_static_attr.bright_table[i] = bright_table [i];
}
for (i = 0; i < dark_bp_number; i++) {
         dpc_static_attr.dark_table[i] = dark_table [i];
}
ss_mpi_isp_set_dp_static_attr (vi_pipe,& dpc_static_attr);

【相关主题】

ss_mpi_isp_get_dp_static_attr

ss_mpi_isp_get_dp_static_attr

【描述】

获取静态坏点属性。

【语法】

td_s32 ss_mpi_isp_get_dp_static_attr(ot_vi_pipe vi_pipe, ot_isp_dp_static_attr*dp_static_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI pipe号

输入

*dp_static_attr

静态坏点属性

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

  • 在设置静态坏点属性中,亮点坏点表中表示亮坏点坐标信息,暗坏点表中则保存的是暗坏点坐标信息;而获取静态坏点属性时,亮点坏点表中保存的是所有坏点的坐标信息。
  • Hi3516CV610不支持。

【举例】

td_u16 bp_number = 0;
td_u32 bp_table[OT_ISP_STATIC_DP_COUNT_MAX];
ss_mpi_isp_get_dp_static_attr (vi_pipe, dp_static_attr);
bp_number = dp_static_attr.bright_count;
for (i = 0; i < bp_number; i++) {
    bp_table[i] = dp_static_attr.bright_table[i];
}

【相关主题】

ss_mpi_isp_set_dp_static_attr

ss_mpi_isp_set_dp_dynamic_attr

【描述】

设置动态坏点调试属性。

【语法】

td_s32  ss_mpi_isp_set_dp_dynamic_attr (ot_vi_pipe vi_pipe, const ot_isp_dp_dynamic_attr *dp_dynamic_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI pipe号

输入

*dp_dynamic_attr

动态坏点属性

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_dp_dynamic_attr

ss_mpi_isp_get_dp_dynamic_attr

【描述】

获取动态坏点调试属性。

【语法】

td_s32 ss_mpi_isp_get_dp_dynamic_attr(ot_vi_pipe vi_pipe, ot_isp_dp_dynamic_attr *dp_dynamic_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI pipe号

输入

*dp_dynamic_attr

动态坏点属性

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_dp_dynamic_attr

数据类型

OT_ISP_STATIC_DP_COUNT_MAX

【说明】

DPC支持的最大静态坏点个数。

【定义】

#define OT_ISP_STATIC_DP_COUNT_NORMAL      2048
#define OT_ISP_STATIC_DP_COUNT_MAX         (OT_ISP_STATIC_DP_COUNT_NORMAL * OT_ISP_STRIPING_MAX_NUM)

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_static_dp_type

【说明】

定义静态坏点标定类型。

【定义】

typedef enum {
    OT_ISP_STATIC_DP_BRIGHT = 0x0,
    OT_ISP_STATIC_DP_DARK,
    OT_ISP_STATIC_DP_BUTT
} ot_isp_static_dp_type;

【成员】

成员名称

描述

OT_ISP_STATIC_DP_BRIGHT

0x0:选择亮点标定

OT_ISP_STATIC_DP_DARK

0x1:选择暗点标定

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_dp_static_calibrate

ot_isp_status

【说明】

定义ISP校正(检测)状态。

【定义】

typedef enum {
    OT_ISP_STATE_INIT     = 0,
    OT_ISP_STATE_SUCCESS  = 1,
    OT_ISP_STATE_TIMEOUT  = 2,
    OT_ISP_STATE_BUTT
} ot_isp_status;

【成员】

成员名称

描述

OT_ISP_STATE_INIT

0:初始状态,未标定.

OT_ISP_STATE_SUCCESS

1:静态坏点标定成功结束。

OT_ISP_STATE_TIMEOUT

2:静态坏点标定超时结束。

【注意事项】

  • 只读。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_dp_static_calibrate

ot_isp_dp_static_calibrate

【说明】

定义静态坏点标定的属性。

【定义】

typedef struct {
    td_bool enable_detect;
    ot_isp_static_dp_type static_dp_type;
    td_u8  start_thresh;
    td_u16 count_max;
    td_u16 count_min;
    td_u16 time_limit;
    td_u32 table[OT_ISP_STATIC_DP_COUNT_MAX];
    td_u8  finish_thresh;
    td_u16 count;
    ot_isp_status status;
} ot_isp_dp_static_calibrate;

【成员】

成员名称

描述

enable_detect

静态坏点标定使能。

取值范围:[0,1]

0:禁止;

1:使能。

static_dp_type

静态坏点标定类型。

取值范围:[0,1]

0:亮点;

1:暗点。

start_thresh

静态坏点标定开始时的检测门限值

该值的设置与sensor相关

取值范围:[1, 0xFF],默认值0x3。

count_max

允许静态坏点的最大个数。

取值范围:(0, OT_ISP_STATIC_DP_COUNT_MAX],默认值0x400。

count_min

允许静态坏点的最小个数。

取值范围:[0,count_max),默认值0x1。

time_limit

允许标定超时门限值。

取值范围:[0, 0x640],默认值0x640。

table[-]

只读,亮暗坏点坐标值查找表,低29bit有效,bit[12:0]为坏点的水平坐标,bit[28:16]为坏点的垂直坐标。

每个坐标取值范围:[0, 0x1FFF1FFF]

finish_thresh

只读,静态坏点标定结束时的检测门限值。

取值范围:[0, 0xFF],默认值0x3。

count

只读,标定出的静态坏点的个数。

取值范围:[0, OT_ISP_STATIC_DP_COUNT_MAX],默认值0。

status

只读,静态坏点标定结果状态信息。

取值范围:[0,2],默认值0。

【注意事项】

  • count_max的配置值与当前的业务场景有关系。每一路ISP BE所能支持的静态坏点个数为OT_ISP_STATIC_DP_COUNT_NORMAL,则count_max的最大值为OT_ISP_STATIC_DP_COUNT_NORMAL * (当前业务场景下ISP BE的分块数目),ISP BE的分块数目参考Proc 调试信息说明中的 "block_num”。
  • 坏点检测算法检测成功的标准:检测出的坏点数量是否在[count_min, count_max)。所以不同类型的sensor在做坏点检测时需微调这两个值。
  • 系统支持的坏点个数上限是OT_ISP_STATIC_DP_COUNT_MAX。当sensor坏点个数大于OT_ISP_STATIC_DP_COUNT_MAX, 系统反馈坏点个数等于OT_ISP_STATIC_DP_COUNT_MAX。因此,坏点个数等于OT_ISP_STATIC_DP_COUNT_MAX不能反映当前实际坏点检况。
  • finish_thresh只作为输出。针对同类型的sensor,参考finish_thresh值,设置合理的start_thresh,能加快静态坏点校正过程。
  • 每次调用标定接口ss_mpi_isp_set_dp_calibrate时,算法内部会自动将status恢复为OT_ISP_STATE_INIT状态。
  • 标定亮坏点时,推荐降帧,亮坏点超时时间近似等于time_limit/8秒。标定暗坏点时,不做降帧动作,暗坏点超时时间近似等于time_limit/48秒。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_dp_static_attr

【说明】

定义静态坏点校正属性。

【定义】

typedef struct {
    td_bool enable;
    td_u16  bright_count;
    td_u16  dark_count;
    td_u32  bright_table[OT_ISP_STATIC_DP_COUNT_MAX];
    td_u32  dark_table[OT_ISP_STATIC_DP_COUNT_MAX];
    td_bool show;
} ot_isp_dp_static_attr;

【成员】

成员名称

描述

enable

静态坏点校正使能。

取值范围:[0, 1]

0:禁止;

1:使能。

默认值1

bright_count

亮坏点个数

注意:当该变量作为输入时,表示亮坏点的个数;作为输出时,表示总的坏点个数。

取值范围:[0, OT_ISP_STATIC_DP_COUNT_MAX],默认值0。

dark_count

暗坏点个数

注意:当该变量作为输入时,表示暗坏点的个数;作为输出时,无效值0。

取值范围:[0, OT_ISP_STATIC_DP_COUNT_MAX],默认值0。

bright_table

[OT_ISP_STATIC_DP_COUNT_MAX]

亮坏点坐标信息,低29bit有效,bit[12:0]为坏点水平坐标,bit[28:16]为坏点垂直坐标。

注意:当该变量作为输入时,表示亮坏点的坐标值查找表;作为输出时,表示所有坏点的坐标值查找表。

取值范围:[0, 0x1FFF1FFF],默认值0。

dark_table

[OT_ISP_STATIC_DP_COUNT_MAX]

暗的坏点坐标值,低29bit有效,bit[12:0]为坏点水平坐标,bit[28:16]为坏点垂直坐标。

注意:当该变量作为输入时,表示暗坏点的坐标值查找表;作为输出时,无效值。

取值范围:[0, 0x1FFF1FFF],默认值0。

show

静态坏点显示使能。

取值范围:[0, 1],0:禁止;1:使能。

默认值0。

【注意事项】

  • enable_detect、show与enable是3个互斥的设置,并且对应的优先级是逐次降低的。
  • Hi3516CV610不支持。

【相关数据类型及接口】

无。

ot_isp_dp_dynamic_manual_attr

【说明】

定义动态坏点校正的手动属性。

【定义】

typedef struct {
    td_u8  strength;
    td_u8  blend_ratio;
} ot_isp_dp_dynamic_manual_attr;

【成员】

成员名称

描述

strength

DPC动态坏点处理强度,取值越大,DPC处理强度越强,可以校正的动态坏点越多。

取值范围:[0x0, 0xFF]

blend_ratio

坏点校正过程所需的融合比率。

取值范围:[0x0, 0x80]

【注意事项】

  • strength的选择与ISO值有很大的关系,ISO越高,对应的strength应该越大,在图像中坏点校正较好时,图像中偏红严重,此时可以再调节blend_ratio 改善图像质量。
  • blend_ratio 值越大,图像越模糊。

【相关数据类型及接口】

ot_isp_dp_dynamic_attr

ot_isp_dp_dynamic_auto_attr

【说明】

定义动态坏点校正的自动属性。

【定义】

typedef struct {
    td_u8  strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  blend_ratio[OT_ISP_AUTO_ISO_NUM];
} ot_isp_dp_dynamic_auto_attr;

【成员】

成员名称

描述

strength [OT_ISP_AUTO_ISO_NUM]

自动模式下的DPC的处理强度,该数组与iso联动。,一般情况下,iso越大,配置的DPC处理强度越大,对应关系如表1所示。

取值范围:[0, 0xFF]

blend_ratio [OT_ISP_AUTO_ISO_NUM]

自动模式下的融合比率。其值越大,图像越偏绿。该数组与iso联动。

取值范围:[0,0x80]

表 1 strength[16]在不同增益情况下对应的设置值

strength

Again*Dgain*ISPDgain(times)

strength[0]

1

strength[1]

2

strength[2]

4

strength[3]

8

strength[4]

16

strength[5]

32

strength[6]

64

strength[7]

128

strength[8]

256

strength[9]

512

strength[10]

1024

strength[11]

2048

strength[12]

4096

strength[13]

8192

strength[14]

16384

strength[15]

32768

【注意事项】

  • 该结构体中的默认值均在sensor_cmos.c中,如果用户需要修改默认值,请修改相应参数。如果用户需要对接新的sensor,请参考已经提供的其它sensor的默认值。
  • 在WDR模式与线性模式之下,Again*Dgain*ISPDgain没有差异。

【相关数据类型及接口】

ot_isp_dp_dynamic_attr

ot_isp_dp_frame_dynamic_attr

【说明】

定义动态坏点校正属性。

【定义】

typedef struct {
    td_bool sup_twinkle_en;
    td_s8   soft_thr;
    td_u8   soft_slope;
    ot_op_mode op_type;
    ot_isp_dp_dynamic_manual_attr manual_attr;
    ot_isp_dp_dynamic_auto_attr  auto_attr;
    td_u8 bright_strength;
    td_u8 dark_strength;
} ot_isp_dp_frame_dynamic_attr;

【成员】

成员名称

描述

sup_twinkle_en

闪烁抑制使能。

取值范围:[0,1]

0:禁止;

1:使能。

默认值0。

soft_thr

闪烁抑制的阈值,值越小,所能处理的像素点越多,图像会越模糊。

取值范围:[0,127],默认值6。

soft_slope

闪烁抑制模块中,控制偏差小于soft_thr的像素点的校正情况。值越大,参与校正处理的像素点越多,图像会越模糊。

取值范围:[0,255],默认值21。

op_type

DPC动态坏点校正工作模式。

取值范围:[0, 1]

0:自动;

1:手动。

默认值0

manual_attr

手动模式下配置动态坏点校正参数。

auto_attr

自动模式下配置动态坏点校正参数。

bright_strength

亮区去坏点强度调整参数。值越大,亮区处理强度越大,图像越模糊。

取值范围:[0,127],6bit小数精度,默认值64。

dark_strength

暗区去坏点强度调整参数。值越大,暗区处理强度越大,坏点残留越少。

取值范围:[0,127],6bit小数精度,默认值64。

【注意事项】

  • 闪烁抑制功能与strength存在联动关系,soft_thr和soft_slope取值不合理时,调节strength,有可能在strength的某些档位之间存在校正效果的突变,因此建议在保证soft_thr和soft_slope的配置值不明显影响图像的清晰度的前提下,调节strength,看坏点的校正以及闪烁抑制的效果。
  • soft_slope参数设置过大,图像会模糊,同时可能会出现伪彩等副作用,因此soft_slope应设置为不明显影响图像清晰度的参数。
  • strength和blend_ratio参数设置过大,图像会模糊,同时可能出现伪彩等副作用。
  • bright_strength主要影响亮区效果,对暗区有轻微影响。dark_strength主要影响暗区效果,对亮区有轻微影响。
  • WDR模式下建议调整bright_strength和dark_strength参数以优化图像效果。
    • bright_strength,dark_strength 大于64时,去坏点能力增强,小于64时,去坏点能力减弱;
    • 建议bright_strength参数调小,改善亮区细节;
    • 建议dark_strength参数调大,改善暗区坏点残留情况。

【相关数据类型及接口】

ot_isp_dp_dynamic_attr

【说明】

定义长短帧动态坏点校正属性。

【定义】

typedef struct {
    td_bool enable;
    ot_isp_dp_frame_dynamic_attr frame_dynamic[OT_ISP_WDR_MAX_FRAME_NUM];
} ot_isp_dp_dynamic_attr;

【成员】

成员名称

描述

enable

动态坏点校正功能使能。

取值范围:[0, 1],默认值1

frame_dynamic

长短帧动态坏点校正参数

【注意事项】

  • 线性模式下,仅frame_dynamic[0] 有效;WDR模式下,frame_dynamic[0]对应短帧,frame_dynamic[1]对应长帧
  • Hi3516CV610中frame_dynamic数组仅首元素有效。

【相关数据类型及接口】

Crosstalk Removal

概述

Crosstalk Removal模块的主要功能是为了平衡raw数据上临近像素Gr和Gb之间的差异,能够有效防止demosaic插值算法产生的方格或其他类似pattern。由于sensor可能会因为特殊角度的光线入射而产生Crosstalk,形成一些pattern,根本原因就是因为临近像素值之间Gr和Gb值域不一致。

功能描述

如Bild 1所示,横坐标表示Gr与Gb之间的差值,即|Gr-Gb|,纵坐标表示处理的强度值。图中的Threshold,slope与参数中的threshold,slope不完全对应,只是算法的大致示意。

  • 当Gr与Gb之间的差值小于Threshold值时,都按照最大的强度值0.5进行处理,Threshold值越大,图像整体被处理的强度越大;
  • 当Gr与Gb之间的差值大于Threshold值时,由slope控制处理的强度,当slope值越大,整体处理强度衰减得越慢,也就是处理的强度越大。

图 1 Crosstalk 门限

API参考

ss_mpi_isp_set_crosstalk_attr

【描述】

设定Crosstalk 属性。

【语法】

td_s32 ss_mpi_isp_set_crosstalk_attr(ot_vi_pipe vi_pipe, const ot_isp_cr_attr *cr_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

cr_attr

Crosstalk 属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a, libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_crosstalk_attr

ss_mpi_isp_get_crosstalk_attr

【描述】

获取Crosstalk 属性。

【语法】

td_s32  ss_mpi_isp_get_crosstalk_attr (ot_vi_pipe vi_pipe, ot_isp_cr_attr *cr_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

cr_attr

Crosstalk 属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a, libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_crosstalk_attr

数据类型

ot_isp_cr_attr

【说明】

定义ISP Crosstalk 属性。

【定义】

typedef struct {
    td_bool  enable;
    td_u8   slope;
    td_u8   sensi_slope;
    td_u16  sensi_threshold;
    td_u16  strength[OT_ISP_AUTO_ISO_NUM];
    td_u16  threshold[OT_ISP_AUTO_ISO_NUM];
    td_u8   filter_mode[OT_ISP_AUTO_ISO_NUM];
    td_u16  np_offset[OT_ISP_AUTO_ISO_NUM];
} ot_isp_cr_attr;

【成员】

成员名称

描述

enable

使能Crosstalk 功能。

slope

设置Crosstalk处理阈值外的衰减强度。值越大,强度衰减越慢。

默认值9。取值范围:[0, 12]

sensi_slope

设置图像边缘的Crosstalk处理阈值外的衰减强度。值越大,边缘强度衰减越慢。

默认值9。取值范围:[0, 12]

sensi_threshold

设置图像边缘的Crosstalk处理阈值。值越大,表示在较强的边缘上也会进行绿平衡处理。

默认值300。取值范围:[0, 4095]

strength[OT_ISP_AUTO_ISO_NUM]

设置Crosstalk强度值。值越大,处理强度越大。该数组参数需根据iso联动。

取值范围:[0, 256]。默认值128。

threshold[OT_ISP_AUTO_ISO_NUM]

设置Crosstalk的处理阈值。值越大,表示处理的图像区域越多。该数组参数需根据iso联动。

默认值300。取值范围:[0, 4095]

filter_mode[OT_ISP_AUTO_ISO_NUM]

Crosstalk处理中的滤波模式,值越大,滤波效果越强,清晰度略微降低。取值范围:[0,31],默认值0。 Hi3516CV610不支持。

np_offset[OT_ISP_AUTO_ISO_NUM]

设置Noise Profile值。值越大,表示抗噪能力越大。该数组参数需根据iso联动。

默认值1024。取值范围:[512, 4095]

Hi3519DV500不支持。

表 1 strength [OT_ISP_AUTO_ISO_NUM]在不同的增益情况下的设置值

strength

Again*Dgain*ISPDgain (times)

strength [0]

100

strength [1]

200

strength [2]

400

strength [3]

800

strength [4]

1600

strength [5]

3200

strength [6]

6400

strength [7]

12800

strength [8]

25600

strength [9]

51200

strength [10]

102400

strength [11]

204800

strength [12]

409600

strength [13]

819200

strength [14]

1638400

strength [15]

3276800

【注意事项】

  • sensi_threshold参数变化会影响threshold参数的表现,建议先调节sensi_threshold使之固定,再调节threshold。
  • 各参数请在默认值附近微调,调试不当可能会在边缘或细节处出现伪彩,或使其变模糊。
  • 不支持RGBIR Pattern的Crosstalk功能。使能RGBIR,Crosstalk功能会自动关闭,相关参数调节无效。

【相关数据类型及接口】

无。

去噪算法

功能描述

图像去噪是数字图像处理中的重要环节和步骤,去噪效果将对后续图像处理产生影响。该去噪模块基于噪声标定结果,建立更符合噪声特性的去噪模型,且可根据不同sensor做标定模型定制化。NR在Bayer域进行空域去噪处理和时域去噪处理。利用动静检测机制,对图像分前景和背景分别处理,来抑制噪声,提高整体图像信噪比。

说明:

Hi3516CV610除原有的ISP_MD_MODE模式外,现新增ISP_PURE_TNR_MODE、ISP_3DNR_MODE两种模式,纯静止场景下推荐PURE_TNR_MODE,load_ref_en实现快速收敛;带运动场景下推荐3DNR_MODE。其对内存要求如下:

  1. 首次运行ISP_PURE_TNR_MODE且load_ref_en = Enable
    • 当再次运行MD模式时,多占用1帧大小的MMZ;
    • 当再次运行3DNR模式时,多占用2帧大小的MMZ;
    • 当再次运行PURE_TNR模式时,多占用1帧大小的MMZ。
  2. 首次运行ISP_PURE_TNR_MODE且load_ref_en = Disable
    • 当再次运行3DNR模式时,多占用1帧大小的MMZ;
    • 当再次运行PURE_TNR模式时,多占用1帧大小的MMZ。 Hi3516CV610 ISP_MD_MODE 模式不支持时域去噪。 注意:PURE_TNR/3DNR_MODE下,当前仅支持非分块模式,另外,若MMZ不足,可能导致切换失败,效果异常。

API参考

ss_mpi_isp_set_nr_attr

【描述】

设置NR参数。

【语法】

td_s32 ss_mpi_isp_set_nr_attr(ot_vi_pipe vi_pipe, const ot_isp_nr_attr *nr_attr)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

nr_attr

噪声抑制参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_nr_attr

ss_mpi_isp_get_nr_attr

【描述】

获取NR参数。

【语法】

td_s32 ss_mpi_isp_get_nr_attr(ot_vi_pipe vi_pipe, ot_isp_nr_attr *nr_attr)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

nr_attr

噪声抑制参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_nr_attr

数据类型

OT_ISP_BAYERNR_LUT_LENGTH

【说明】

定义nr亮度回叠表长度。

【定义】

#define OT_ISP_BAYERNR_LUT_LENGTH       33

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

OT_ISP_BAYERNR_DENOISE_Y_LUT_NUM

ot_isp_nr_snr_attr_v0

【说明】

定义ISP NR空域V0属性。

【定义】

typedef struct {
    ot_isp_nr_snr_auto_attr   snr_auto;
    ot_isp_nr_snr_manual_attr snr_manual;
} ot_isp_nr_snr_attr_v0;

【成员】

成员名称

描述

snr_auto

定义nr空域自动模式属性。

snr_manual

定义nr空域手动模式属性。

【注意事项】

无

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_snr_attr

【说明】

定义ISP NR空域属性。

【定义】

typedef struct {
    ot_nr_snr_mode          snr_version;
    union {
        ot_isp_nr_snr_attr_v0  snr_attr;
    };         
} ot_isp_nr_snr_attr;

【成员】

成员名称

描述

snr_version

定义nr空域版本。Hi3516CV610不支持

snr_attr

定义nr空域v0属性。

【注意事项】

无

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_tnr_attr

【说明】

定义ISP NR时域属性。

【定义】

typedef struct {
    ot_isp_nr_tnr_auto_attr   tnr_auto;
    ot_isp_nr_tnr_manual_attr tnr_manual;
} ot_isp_nr_tnr_attr;

【成员】

成员名称

描述

tnr_auto

定义nr时域自动模式属性。

tnr_manual

定义nr时域手动模式属性。

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_snr_manual_attr

【说明】

定义ISP NR空域手动属性。

【定义】

typedef struct {
    td_u16    sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM];
    td_u8     sfm0_detail_prot;
    td_u16    sfm1_strength;
    td_u8     sfm1_adp_strength;
    td_u8     sfm6_strength;
    td_u8     sfm7_strength;
    td_u8     sth;
    td_u8     tss;
    td_u8     fine_strength;
    td_u16    coring_wgt;
    td_u8     coring_mot_ratio;
    td_u8     noisesd_lut[OT_ISP_BAYERNR_LUT_LENGTH1];
} ot_isp_nr_snr_manual_attr;

【成员】

成员名称

描述

sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM]

sfm0滤波器的整体强度控制,分成RGGB四个通道独立控制,值越大,滤波强度越大。

取值范围:[0, 864]

Hi3516CV610 PURE_TNR_MODE不支持。

sfm0_detail_prot

空域滤波器的细节保留比例,值越大,保留细节越多。取值范围:[0, 31]

Hi3516CV610 PURE_TNR_MODE不支持。

sfm1_strength

sfm1滤波强度,值越大,滤波越强,sfm1的整体滤波强度比sfm0弱。取值范围:[0, 1023]

Hi3516CV610不支持。

sfm1_adp_strength

sfm1 滤波强度自适应调节,主要用于去除冲击噪声。取值为16时,滤波强度由算法内部自适应生成;,取值为0时,由sfm1_strength参数控制,值越小,sfm1_strength的强度比例越高。取值范围:[0, 16]

Hi3516CV610不支持。

sfm6_strength

线性模式下,sfm6混合滤波结果。取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。取值范围:[0, 64]

Hi3516CV610不支持。

sfm7_strength

线性模式下,sfm7混合滤波结果。取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。取值范围:[0, 64]

Hi3516CV610不支持。

sth

混合滤波器阈值。取值0倾向于sfm6混合滤波器结果,取值255倾向于sfm7混合滤波器结果,其它值为两者滤波结果融合。取值范围:[0, 255]

Hi3516CV610不支持。

tss

静止区域的空域滤波效果,值越大,空域去噪越强,静止区域越光滑。

取值范围:[0, 128]

Hi3519DV500不支持、Hi3516CV610 PURE_TNR_MODE\3DNR_MODE不支持。

fine_strength

原始像素和去噪结果的融合比例,值越大,越倾向于去噪效果。

取值范围:[0,128]

coring_wgt

原始像素回叠,值越大,回叠噪声越大,去噪效果越弱。

取值范围:[0, 3200]

Hi3516CV610 MD_MODE\PURE_TNR_MODE不支持。

coring_mot_ratio

前景运动区域的原始像素回叠,值越大,原始像素回叠越多。

取值范围:[0, 63]

Hi3516CV610不支持。

noisesd_lut[OT_ISP_BAYERNR_LUT_LENGTH1]

根据亮度调节去噪强度,值越大,对应的亮度区域去噪强度越大。

取值范围:[0, 255]

Hi3519DV500不支持、Hi3516CV610 PURE_TNR_MODE不支持。

【注意事项】

  • 注意各参数的取值范围。
  • 低照度下,参数sfm0_coarse_strength 与 fine_strength 同时调到最大值时,容易出现由于去噪强度过大导致的边缘虚化,建议根据效果调到合适取值。
  • noisesd_lut当前版本暂不支持wdr模式,且线性模式下仅在user_define_md = 2生效。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_snr_auto_attr

【说明】

定义ISP NR空域自动属性。

【定义】

typedef struct {
    td_u16  sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm0_detail_prot[OT_ISP_AUTO_ISO_NUM];
    td_u16 sfm1_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm1_adp_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm6_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm7_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  sth[OT_ISP_AUTO_ISO_NUM];
    td_u8  tss[OT_ISP_AUTO_ISO_NUM];
    td_u8  fine_strength[OT_ISP_AUTO_ISO_NUM];
    td_u16 coring_wgt[OT_ISP_AUTO_ISO_NUM];
    td_u8  coring_mot_ratio[OT_ISP_AUTO_ISO_NUM];
    td_u8  noisesd_lut[OT_ISP_BAYERNR_LUT_LENGTH1][OT_ISP_AUTO_ISO_NUM];
} ot_isp_nr_snr_auto_attr;

【成员】

成员名称

描述

sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM[OT_ISP_AUTO_ISO_NUM]

sfm0滤波器的整体强度控制,分成RGGB四个通道独立控制,值越大,滤波强度越大。

取值范围:[0, 864]

Hi3516CV610 PURE_TNR_MODE不支持。

sfm0_detail_prot[OT_ISP_AUTO_ISO_NUM]

空域滤波器的细节保留比例,值越大,保留细节越多。取值范围:[0, 31]

Hi3516CV610 PURE_TNR_MODE不支持。

sfm1_strength[OT_ISP_AUTO_ISO_NUM]

sfm1滤波强度,值越大,滤波越强,sfm1的整体滤波强度比sfm0弱。取值范围:[0, 1023]

Hi3516CV610不支持。

sfm1_adp_strength[OT_ISP_AUTO_ISO_NUM]

sfm1 滤波强度自适应调节,主要用于去除冲击噪声。取值为16时,滤波强度由算法内部自适应生成;,取值为0时,由sfm1_strength参数控制,值越小,sfm1_strength的强度比例越高。取值范围:[0, 16]

Hi3516CV610不支持。

sfm6_strength[OT_ISP_AUTO_ISO_NUM]

线性模式下,sfm6混合滤波结果。取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。取值范围:[0, 64]

Hi3516CV610不支持。

sfm7_strength[OT_ISP_AUTO_ISO_NUM]

线性模式下,sfm7混合滤波结果。取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。取值范围:[0, 64]

Hi3516CV610不支持。

sth[OT_ISP_AUTO_ISO_NUM]

混合滤波器阈值。取值0倾向于sfm6混合滤波器结果,取值255倾向于sfm7混合滤波器结果,其它值为两者滤波结果融合。取值范围:[0, 255]

Hi3516CV610不支持。

tss[OT_ISP_AUTO_ISO_NUM]

静止区域的空域滤波效果,值越大,空域去噪越强,静止区域越光滑。

取值范围:[0, 128]

Hi3519DV500不支持、Hi3516CV610 PURE_TNR_MODE\3DNR_MODE不支持。

fine_strength[OT_ISP_AUTO_ISO_NUM]

原始像素和去噪结果的融合比例,值越大,越倾向于去噪效果。

取值范围:[0,128]

coring_wgt[OT_ISP_AUTO_ISO_NUM]

原始像素回叠,值越大,回叠噪声越大,去噪效果越弱。

取值范围:[0, 3200]

Hi3516CV610 MD_MODE\PURE_TNR_MODE不支持 。

coring_mot_ratio[OT_ISP_AUTO_ISO_NUM]

前景运动区域的原始像素回叠,值越大,原始像素回叠越多。

取值范围:[0, 63]

Hi3516CV610不支持。

noisesd_lut[OT_ISP_BAYERNR_LUT_LENGTH1][OT_ISP_AUTO_ISO_NUM]

根据亮度调节去噪强度,值越大,对应的亮度区域去噪强度越大。

取值范围:[0, 255]

Hi3519DV500不支持、Hi3516CV610 PURE_TNR_MODE不支持。

【注意事项】

  • 注意各参数的取值范围。
  • 低照度下,参数sfm0_coarse_strength 与 fine_strength 同时调到最大值时,容易出现由于去噪强度过大导致的边缘虚化,建议根据效果调到合适取值。
  • noisesd_lut当前版本暂不支持wdr模式,且线性模式下仅在user_define_md = 2生效。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_tnr_manual_attr

【说明】

定义ISP NR时域手动属性。

【定义】

typedef struct {
    td_u8   md_mode;   
    td_u8   md_size_ratio;
    td_u8   md_anti_flicker_strength;  
    td_u8   md_static_ratio;      
    td_u8   md_motion_ratio;
    td_u8   md_static_fine_strength;    
    td_u8   tfs;    
    td_bool user_define_md;           
    td_s16  user_define_slope;  
    td_u16  user_define_dark_thresh;  
    td_u8   user_define_color_thresh;
    td_u8   sfr_r;  
    td_u8   sfr_g;  
    td_u8   sfr_b;  
} ot_isp_nr_tnr_manual_attr;

【成员】

成员名称

描述

md_mode

运动检测类型:

0:运动检测对小运动判断更准确。

1:运动检测对大运动判断更准确。

取值范围:[0,1]

md_size_ratio

值越大,运动检测窗口越大,对运动的判决更加准确。

取值范围:[0,32]

md_anti_flicker_strength

运动检测对光线亮度变化引起的扰动的抵抗能力。

取值范围:[0,64]

md_static_ratio

运动检测,静止和运动区域的比例调节,值越大,判断为静止的区域越多。

取值范围:[0,64]

md_motion_ratio

运动检测,静止和运动区域的比例调节,值越小,判断为运动的区域越多。

取值范围:[0,64]

md_static_fine_strength

运动检测,静止和运动区域比例的精细调节,值越大,判断为静止的区域越多。

取值范围:[0,255]

tfs

控制静止区域的时域强度,值越大,静止区域的时域越强。

取值范围:[0,255]

sfr_r

控制R分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域效果。

取值范围:[0,128]

sfr_g

控制G分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域效果。

取值范围:[0,128]

sfr_b

控制B分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域效果。

取值范围:[0,128]

user_define_md

用户自定义运动检测模式,一般用于黑白彩色双路融合模式的彩色通路调试。

取值范围:[0,1]

user_define_slope

用户自定义运动检测模式下,亮区的运动检测阈值,值越大,亮区的时域越强。

取值范围:[-32768,32767]

user_define_dark_thresh

用户自定义运动检测模式下,暗区的运动检测阈值。

取值范围:[0,65535]

user_define_color_thresh

用户自定义运动检测模式下,颜色区域的运动检测阈值。

取值范围:[0,64]

【注意事项】

  • 注意各参数的取值范围。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_tnr_auto_attr

【说明】

定义ISP NR时域自动属性。

【定义】

typedef struct {
    td_u8 md_mode [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_size_ratio [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_anti_flicker_strength [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_static_ratio [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_motion_ratio [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_static_fine_strength [OT_ISP_AUTO_ISO_NUM];
    td_u8   tfs [OT_ISP_AUTO_ISO_NUM];
    td_bool user_define_md [OT_ISP_AUTO_ISO_NUM];
    td_s16  user_define_slope [OT_ISP_AUTO_ISO_NUM];
    td_u16  user_define_dark_thresh [OT_ISP_AUTO_ISO_NUM];
    td_u8   user_define_color_thresh [OT_ISP_AUTO_ISO_NUM];
    td_u8   sfr_r [OT_ISP_AUTO_ISO_NUM];
    td_u8   sfr_g [OT_ISP_AUTO_ISO_NUM];
    td_u8   sfr_b [OT_ISP_AUTO_ISO_NUM];
} ot_isp_nr_tnr_auto_attr;

【成员】

成员名称

描述

md_mode[OT_ISP_AUTO_ISO_NUM]

运动检测类型:

0:运动检测对小运动判断更准确。

1:运动检测对大运动判断更准确。

取值范围:[0,1]

md_size_ratio[OT_ISP_AUTO_ISO_NUM]

值越大,运动检测窗口越大,对运动的判决更加准确。

取值范围:[0,32]

md_anti_flicker_strength[OT_ISP_AUTO_ISO_NUM]

运动检测对光线亮度变化引起的扰动的抵抗能力。

取值范围:[0,64]

md_static_ratio[OT_ISP_AUTO_ISO_NUM]

运动检测,静止和运动区域的比例调节,值越大,判断为静止的区域越多。

取值范围:[0,64]

md_motion_ratio[OT_ISP_AUTO_ISO_NUM]

运动检测,静止和运动区域的比例调节,值越小,判断为运动的区域越多。

取值范围:[0,64]

md_static_fine_strength[OT_ISP_AUTO_ISO_NUM]

运动检测,静止和运动区域比例的精细调节,值越大,判断为静止的区域越多。

取值范围:[0,255]

tfs[OT_ISP_AUTO_ISO_NUM]

控制静止区域的时域强度,值越大,静止区域的时域越强。

取值范围:[0,255]

sfr_r[OT_ISP_AUTO_ISO_NUM]

控制R分量的去噪风格倾向,值越大,越倾向于空域去噪,值越小,越倾向于时域效果。

取值范围:[0,128]

sfr_g[OT_ISP_AUTO_ISO_NUM]

控制G分量的去噪风格倾向,值越大,越倾向于空域去噪,值越小,越倾向于时域效果。

取值范围:[0,128]

sfr_b[OT_ISP_AUTO_ISO_NUM]

控制B分量的去噪风格倾向,值越大,越倾向于空域去噪,值越小,越倾向于时域效果。

取值范围:[0,128]

user_define_md[OT_ISP_AUTO_ISO_NUM]

用户自定义运动检测模式,一般用于黑白彩色双路融合模式的彩色通路调试。

取值范围:[0,1]

user_define_slope[OT_ISP_AUTO_ISO_NUM]

用户自定义运动检测模式下,亮区的运动检测阈值,值越大,亮区的时域越强。

取值范围:[-32768,32767]

user_define_dark_thresh[OT_ISP_AUTO_ISO_NUM]

用户自定义运动检测模式下,暗区的运动检测阈值。

取值范围:[0,65535]

user_define_color_thresh[OT_ISP_AUTO_ISO_NUM]

用户自定义运动检测模式下,颜色区域的运动检测阈值。

取值范围:[0,64]

【注意事项】

  • 注意各参数的取值范围。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_wdr_attr

【说明】

定义ISP NR在WDR模式下属性,与自动/手动模式并行。

【定义】

typedef struct {
    td_u8 snr_sfm0_wdr_strength[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u8 snr_sfm0_fusion_strength[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u8 snr_wdr_sfm6_strength[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u8 snr_wdr_sfm7_strength[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u8 snr_fusion_sfm6_strength[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u8 snr_fusion_sfm7_strength[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u8 md_wdr_strength[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u8 md_fusion_strength[OT_ISP_WDR_MAX_FRAME_NUM];
} ot_isp_nr_wdr_attr;

【成员】

成员名称

描述

snr_sfm0_wdr_strength[OT_ISP_WDR_MAX_FRAME_NUM]

WDR模式下各个区域的sfm0的去噪强度:

2合1模式:

0:短帧去噪强度,值越大,去噪越强;

1:长帧去噪强度,值越大,去噪越强;

3:融合区去噪强度,值越大,去噪越强;

取值范围:[0, 64],Hi3516CV610 PURE_TNR_MODE不支持。

snr_sfm0_fusion_strength[OT_ISP_WDR_MAX_FRAME_NUM]

fusion模式下各个区域的sfm0的去噪强度:

2合1模式:

0:短帧去噪强度,值越大,去噪越强;

1:长帧去噪强度,值越大,去噪越强;

取值范围:[0, 64],Hi3516CV610 PURE_TNR_MODE不支持。

snr_wdr_sfm6_strength[OT_ISP_WDR_MAX_FRAME_NUM]

wdr模式下各区域的sfm6混合滤波结果,取值范围:[0, 64]

0:短帧的sfm6混合滤波器结果,取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。

1:长帧的sfm6混合滤波器结果,取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。

Hi3516CV610不支持。

snr_wdr_sfm7_strength[OT_ISP_WDR_MAX_FRAME_NUM]

wdr模式下各区域的sfm7混合滤波结果,取值范围:[0,64]

0:短帧的sfm7混合滤波器结果,取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。

1:长帧的sfm7混合滤波器结果,取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。

Hi3516CV610不支持。

snr_fusion_sfm6_strength[OT_ISP_WDR_MAX_FRAME_NUM]

fusion模式下各区域的sfm6混合滤波结果,取值范围:[0, 64]

0:短帧的sfm6混合滤波器结果,取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。

1:长帧的sfm6混合滤波器结果,取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。

Hi3516CV610不支持。

snr_fusion_sfm7_strength[OT_ISP_WDR_MAX_FRAME_NUM]

fusion模式下各区域的sfm7混合滤波结果,取值范围:[0, 64]

0:短帧的sfm7混合滤波器结果,取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。

1:长帧的sfm7混合滤波器结果,取值0为sfm1滤波结果,平坦区去噪能力较弱,同时边缘保边能力弱;取值64为sfm0滤波结果,平坦区去噪能力较强,同时边缘保边能力强,其它值为两者融合。

Hi3516CV610不支持。

md_wdr_strength[OT_ISP_WDR_MAX_FRAME_NUM]

wdr模式下各个区域的时域强度

2合1模式下:

0:短帧区域的相对时域去噪强度,值越大,去噪越强。

1:图像整体时域去噪强度。

取值范围:[0, 64]

Hi3516CV610 MD_MODE\PURE_TNR_MODE不支持。

md_fusion_strength[OT_ISP_WDR_MAX_FRAME_NUM]

fusion模式下各个区域的时域强度

2合1模式下:

0:短帧区域的相对时域去噪强度,值越大,去噪越强。

1:图像整体时域去噪强度。

取值范围:[0, 64]

Hi3516CV610 MD_MODE\PURE_TNR_MODE不支持。

【注意事项】

  • ISP NR的WDR相关功能不支持在OT_VI_VIDEO_MODE_ADVANCED模式下使用。
  • 注意各参数的取值范围。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_attr

【说明】

定义ISP NR属性。

【定义】

typedef struct {
    td_bool    enable;
    ot_op_mode op_type;
    union{
    td_bool    tnr_en;
    td_bool    md_en;
    };
    td_bool    lsc_nr_en;
    td_u8      lsc_ratio1;
    td_u16     coring_ratio[OT_ISP_BAYERNR_LUT_LENGTH];
    td_u16     mix_gain[OT_ISP_BAYERNR_LUT_LENGTH1];
    ot_isp_bnr_ref_mode     ref_mode;
    td_bool     load_ref_en;         
    ot_isp_nr_snr_attr   snr_cfg;
    union{
    ot_isp_nr_tnr_attr   tnr_cfg;
    ot_isp_nr_md_attr   md_cfg;
    };
    ot_isp_nr_wdr_attr   wdr_cfg;
    ot_isp_nr_dering_attr dering_cfg;
} ot_isp_nr_attr;

【成员】

成员名称

描述

enable

Nr使能,取值范围:[0,1]

0:Nr关闭;

1:Nr打开。

op_type

nr工作类型,取值范围:[0,1]

  • OT_OP_MODE_AUTO:自动;
  • OT_OP_MODE_MANUAL:手动。

默认值为OT_OP_MODE_AUTO。

tnr_en

tnr使能,取值范围:[0,1]

0:tnr关闭;

1:tnr打开。

Hi3516CV610不支持。

md_en

md使能,取值范围:[0, 1]

0:md关闭;

1:md打开。

Hi3519DV500不支持。

lsc_nr_en

Nr参考lsc降噪使能,取值范围:[0,1]

0:Nr参考lsc降噪关闭;

1:Nr参考lsc降噪打开。

lsc_ratio1

Nr参考lsc去噪强度,值越大,空域去噪越强。

  • 需要在时域打开下使用。Hi3516CV610不支持。
  • 需要在md_en打开下使用。Hi3519DV500不支持。

取值范围:[0,15]

coring_ratio[OT_ISP_BAYERNR_LUT_LENGTH]

噪声回叠亮度控制表,值越大,对应亮度区间下的回叠越强;

取值范围:[0,1023]

Hi3516CV610 MD_MODE\PURE_TNR_MODE不支持。

mix_gain[OT_ISP_BAYERNR_LUT_LENGTH1]

时空域滤波结果融合权重控制表。通过调节各个亮度区间的值控制时空域融合比例,值越小,混入空域滤波结果越多;值越大,混入时域滤波结果越多。取值范围:[0, 128]

Hi3516CV610不支持。

ref_mode

BNR支持的三种模式:ISP_PURE_TNR_MODE、ISP_MD_MODE、ISP_3DNR_MODE。

Hi3519DV500不支持。

load_ref_en

PURE_TNR_MODE模式下,快速收敛使能。取值范围:[0, 1]

0:不重新加载参考帧,收敛速度快,但有可能导致画面残影。

1:重新加载参考帧,收敛速度慢,不会导致画面残影。

Hi3519DV500不支持,Hi3516CV610 MD_MODE\3DNR_MODE不支持。

snr_cfg

Nr空域去噪属性。

tnr_cfg

Nr时域去噪属性。

Hi3516CV610不支持。

md_cfg

Nr运动检测属性。

Hi3519DV500不支持。

wdr_cfg

Nr在wdr模式下去噪属性。

dering_cfg

Nr在dering模式下去噪属性。

Hi3516CV610不支持。

【注意事项】

NR功能分为自动和手动参数:

  • enable为TD_TRUE,op_type为OT_OP_MODE_AUTO,使用自动NR功能。
  • enable设置为TD_TRUE,op_type设置为OT_OP_MODE_MANUAL使用手动NR功能。
  • 当工作在WDR模式下,NR整体去噪强度参数wdr_cfg生效。
  • BNR参考LSC去噪功能需要在LSC模块打开下调试,当LSC模块本身关闭时,BNR参考LSC不生效。
  • BNR时域打开时,在一些通路模式切换的场景,比如帧率切换,可能会出现时域重新收敛导致的噪声闪烁的现象。
  • 固定场景下,load_ref_en可实现再次切回PURE_TNR_MODE模式时的快速收敛,若场景发生较大变化,load_ref_en置0可能导致图像异常。

【相关数据类型及接口】

无。

ot_isp_nr_dering_attr

【说明】

定义ISP dering属性。

【定义】

typedef struct {
    ot_isp_nr_dering_auto_attr     dering_auto;
    ot_isp_nr_dering_manual_attr   dering_manual;
} ot_isp_nr_dering_attr;

【成员】

成员名称

描述

dering_auto

定义dering自动模式属性。

dering_manual

定义dering手动模式属性。

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_dering_auto_attr

【说明】

定义ISP dering自动属性。

【定义】

typedef struct {
    td_u16  dering_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8   dering_thresh[OT_ISP_AUTO_ISO_NUM];
    td_u8   dering_static_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8   dering_motion_strength[OT_ISP_AUTO_ISO_NUM];
} ot_isp_nr_dering_auto_attr;

【成员】

成员名称

描述

dering_strength[OT_ISP_AUTO_ISO_NUM]

dering整体处理强度。

取值范围[0, 1023]

dering_thresh[OT_ISP_AUTO_ISO_NUM]

dering处理的threshold。

取值范围[0, 255]

dering_static_strength[OT_ISP_AUTO_ISO_NUM]

静止区域的dering处理强度。

取值范围[0, 32]

dering_motion_strength[OT_ISP_AUTO_ISO_NUM]

运动区域的dering处理强度。

取值范围[0, 32]

【注意事项】

  • tnr_en为TD_FALSE时,不再区分运动静止。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_dering_manual_attr

【说明】

定义ISP dering手动属性。

【定义】

typedef struct {
    td_u16  dering_strength;
    td_u8   dering_thresh;
    td_u8   dering_static_strength;
    td_u8   dering_motion_strength;
} ot_isp_nr_dering_manual_attr;

【成员】

成员名称

描述

dering_strength

dering整体处理强度。

取值范围[0, 1023]

dering_thresh

dering处理的threshold。

取值范围[0, 255]

dering_static_strength

静止区域的dering处理强度。

取值范围[0, 32]

dering_motion_strength

运动区域的dering处理强度。

取值范围[0, 32]

【注意事项】

  • tnr_en为TD_FALSE时,不再区分运动静止。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_nr_attr

OT_ISP_BAYERNR_DENOISE_Y_LUT_NUM

【说明】

定义ynet模块表长。

【定义】

#define OT_ISP_BAYERNR_DENOISE_Y_LUT_NUM                   16

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

OT_ISP_BAYERNR_LUT_LENGTH

OT_ISP_BAYERNR_LUT_LENGTH1

【说明】

定义NR亮度融合表长度。

【定义】

#define OT_ISP_BAYERNR_LUT_LENGTH1                   32

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

OT_ISP_BAYERNR_LUT_LENGTH

ot_nr_snr_mode

【说明】

定义ISP NR空域模式。

【定义】

typedef enum {
    OT_NR_SNR_V0;
  } ot_nr_snr_mode;

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_md_attr

【说明】

定义ISP NR运动检测属性。

【定义】

typedef struct {
    ot_isp_nr_md_auto_attr        md_auto;
    ot_isp_nr_md_manual_attr     md_manual;
} ot_isp_nr_md_attr;

【成员】

成员名称

描述

md_auto

定义nr运动检测自动模式属性。

md_manual

定义nr运动检测手动模式属性。

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_nr_tnr_attr

ot_isp_nr_md_manual_attr

【说明】

定义ISP NR运动检测手动属性。

【定义】

typedef struct {
    td_u8   md_mode;   
    td_u8   md_size_ratio;
    td_u8   md_anti_flicker_strength;
    td_u8   md_static_ratio;      
    td_u8   md_motion_ratio;
    td_u8   md_static_fine_strength;    
    td_u8   tfs;    
    td_u8    user_define_md;           
    td_s16  user_define_slope;  
    td_u16  user_define_dark_thresh;  
    td_u8   user_define_color_thresh;
    td_u8   sfr_r;  
    td_u8   sfr_g;  
    td_u8   sfr_b;  
} ot_isp_nr_md_manual_attr;

【成员】

成员名称

描述

md_mode

运动检测类型:

0:运动检测对小物体运动判断更准确。

1:运动检测对中物体运动判断更准确。

2:运动检测对大物体运动判断更准确。

取值范围:[0, 2]

Hi3516CV610 PURE_TNR_MODE不支持。

md_size_ratio

值越大,运动检测窗口越大,对运动的判决更加准确。

取值范围:[0, 32]

Hi3516CV610不支持

md_anti_flicker_strength

运动检测对光线亮度变化引起的扰动的抵抗能力。

取值范围:[0,64]

Hi3516CV610 PURE_TNR_MODE不支持。

md_static_ratio

运动检测,静止和运动区域的比例调节,值越大,判断为静止的区域越多。

取值范围:[0,64]

Hi3516CV610 PURE_TNR_MODE不支持。

md_motion_ratio

运动检测,静止和运动区域的比例调节,值越小,判断为运动的区域越多。

取值范围:[0,64]

Hi3516CV610 PURE_TNR_MODE不支持。

md_static_fine_strength

运动检测,静止和运动区域比例的精细调节,值越大,判断为静止的区域越多。

取值范围:[0,255]

Hi3516CV610 PURE_TNR_MODE不支持。

tfs

静止区域的时域强度,值越大,静止区域的时域越强。

Hi3516CV610 MD_MODE\PURE_TNR_MODE不支持。

全图区域的时域强度,值越大,时域越强。

Hi3516CV610 MD_MODE\3DNR_MODE不支持。

取值范围:[0,255]

sfr_r

R分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于原始像素效果。

Hi3516CV610 PURE_TNR_MODE\3DNR_MODE不支持。

R分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域滤波效果。

Hi3516CV610 PURE_TNR_MODE\MD_MODE不支持。

取值范围:[0,128]

sfr_g

G分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于原始像素效果。

Hi3516CV610 PURE_TNR_MODE\3DNR_MODE不支持。

G分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域滤波效果。

Hi3516CV610 PURE_TNR_MODE\MD_MODE不支持。

取值范围:[0,128]

sfr_b

B分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于原始像素效果。

Hi3516CV610 PURE_TNR_MODE\3DNR_MODE不支持。

B分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域滤波效果。

Hi3516CV610 PURE_TNR_MODE\MD_MODE不支持。

取值范围:[0,128]

user_define_md

用户自定义运动检测模式。

取值范围:[0,2]

Hi3516CV610 PURE_TNR_MODE不支持。

user_define_slope

用户自定义运动检测模式下,亮区的噪声模型调整。

取值范围:[-32768,32767]

Hi3516CV610 PURE_TNR_MODE不支持。

user_define_dark_thresh

用户自定义运动检测模式下,暗区的噪声模型调整。

取值范围:[0,65535]

Hi3516CV610 PURE_TNR_MODE不支持。

user_define_color_thresh

用户自定义运动检测模式下,颜色区域的运动检测阈值。

取值范围:[0,64]

Hi3516CV610不支持。

【注意事项】

  • 注意各参数的取值范围。
  • Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_nr_md_auto_attr

ot_isp_nr_md_auto_attr

【说明】

定义ISP NR运动检测自动属性。

typedef struct {
    td_u8   md_mode [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_size_ratio [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_anti_flicker_strength [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_static_ratio [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_motion_ratio [OT_ISP_AUTO_ISO_NUM];
    td_u8   md_static_fine_strength [OT_ISP_AUTO_ISO_NUM];
    td_u8   tfs [OT_ISP_AUTO_ISO_NUM];
    td_u8   user_define_md [OT_ISP_AUTO_ISO_NUM];
    td_s16  user_define_slope [OT_ISP_AUTO_ISO_NUM];
    td_u16  user_define_dark_thresh [OT_ISP_AUTO_ISO_NUM];
    td_u8   user_define_color_thresh [OT_ISP_AUTO_ISO_NUM];
    td_u8   sfr_r [OT_ISP_AUTO_ISO_NUM];
    td_u8   sfr_g [OT_ISP_AUTO_ISO_NUM];
    td_u8   sfr_b [OT_ISP_AUTO_ISO_NUM];
} ot_isp_nr_md_auto_attr;

【成员】

成员名称

描述

md_mode[OT_ISP_AUTO_ISO_NUM]

运动检测类型:

0:运动检测对小物体运动判断更准确。

1:运动检测对中物体运动判断更准确。

2:运动检测对大物体运动判断更准确。

取值范围:[0, 2]

Hi3516CV610 PURE_TNR_MODE不支持。

md_size_ratio[OT_ISP_AUTO_ISO_NUM]

值越大,运动检测窗口越大,对运动判决更加准确。

取值范围:[0, 32]

Hi3516CV610不支持

md_anti_flicker_strength[OT_ISP_AUTO_ISO_NUM]

运动检测对光线亮度变化引起的扰动的抵抗能力。

取值范围:[0, 64]

Hi3516CV610 PURE_TNR_MODE不支持。

md_static_ratio[OT_ISP_AUTO_ISO_NUM]

运动检测,静止和运动区域的比例调节,值越大,判断为静止的区域越多。

取值范围:[0, 64]

Hi3516CV610 PURE_TNR_MODE不支持。

md_motion_ratio[OT_ISP_AUTO_ISO_NUM]

运动检测,静止和运动区域的比例调节,值越小,判断为运动的区域越多。

取值范围:[0, 64]

Hi3516CV610 PURE_TNR_MODE不支持。

md_static_fine_strength[OT_ISP_AUTO_ISO_NUM]

运动检测,静止和运动区域比例的精细调节,值越大,判断为静止的区域越多。

取值范围:[0, 255]

Hi3516CV610 PURE_TNR_MODE不支持。

tfs[OT_ISP_AUTO_ISO_NUM]

静止区域的时域强度,值越大,静止区域的时域越强。

Hi3516CV610 MD_MODE\PURE_TNR_MODE不支持。

全图区域的时域强度,值越大,时域越强。

Hi3516CV610 MD_MODE\3DNR_MODE不支持。

取值范围:[0, 255]

sfr_r[OT_ISP_AUTO_ISO_NUM]

R分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于原始像素效果。

Hi3516CV610 PURE_TNR_MODE\3DNR_MODE不支持。

分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域滤波效果。

Hi3516CV610 PURE_TNR_MODE\MD_MODE不支持。

取值范围:[0, 128]

sfr_g[OT_ISP_AUTO_ISO_NUM]

G分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于原始像素效果。

Hi3516CV610 PURE_TNR_MODE\3DNR_MODE不支持。

G分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域滤波效果。

Hi3516CV610 PURE_TNR_MODE\MD_MODE不支持。

取值范围:[0, 128]

sfr_b[OT_ISP_AUTO_ISO_NUM]

B分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于原始像素效果。

Hi3516CV610 PURE_TNR_MODE\3DNR_MODE不支持。

B分量的去噪风格倾向,值越大,越倾向于空域效果,值越小,越倾向于时域滤波效果。

Hi3516CV610 PURE_TNR_MODE\MD_MODE不支持。

取值范围:[0, 128]

user_define_md[OT_ISP_AUTO_ISO_NUM]

用户自定义运动检测模式。

取值范围:[0, 2]

Hi3516CV610 PURE_TNR_MODE不支持。

user_define_slope[OT_ISP_AUTO_ISO_NUM]

用户自定义运动检测模式下,亮区的噪声模型调整。

取值范围:[-32768, 32767]

Hi3516CV610 PURE_TNR_MODE不支持。

user_define_dark_thresh[OT_ISP_AUTO_ISO_NUM]

用户自定义运动检测模式下,暗区的噪声模型调整。

取值范围:[0, 65535]

Hi3516CV610 PURE_TNR_MODE不支持。

user_define_color_thresh[OT_ISP_AUTO_ISO_NUM]

用户自定义运动检测模式下,颜色区域的运动检测阈值。

取值范围:[0, 64]

Hi3516CV610不支持。

【注意事项】

  • 注意各参数的取值范围。
  • Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_nr_md_manual_attr

ot_isp_bnr_ref_mode

【说明】

定义ISP BNR三种模式。

【定义】

typedef enum {
    OT_ISP_MD_MODE;
    OT_ISP_PURE_TNR_MODE;
    OT_ISP_3DNR_MODE;
    OT_ISP_BNR_BUTT;
} ot_isp_bnr_ref_mode;

【成员】

成员名称

描述

OT_ISP_MD_MODE

定义NR MD_MODE模式

OT_ISP_PURE_TNR_MODE

定义NR PURE_TNR_MODE模式

OT_ISP_3DNR_MODE

定义NR 3DNR_MODE模式

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_nr_attr

Dehaze

功能描述

Dehaze是通过动态的改变图象的对比度和亮度来实现的,将图像分块,统计每块内的像素值,估算出雾的浓度,根据局部自适应曲线调整去雾强度。Dehaze分为手动和自动模式,两种模式下均可调节去雾强度。

API参考

ss_mpi_isp_set_dehaze_attr

【描述】

设置Dehaze属性。

【语法】

td_s32 ss_mpi_isp_set_dehaze_attr(ot_vi_pipe vi_pipe, const ot_isp_dehaze_attr *dehaze_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

dehaze_attr

去雾属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_dehaze_attr

ss_mpi_isp_get_dehaze_attr

【描述】

获取Dehaze属性。

【语法】

td_s32 ss_mpi_isp_get_dehaze_attr(ot_vi_pipe vi_pipe, ot_isp_dehaze_attr *dehaze_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

dehaze_attr

去雾属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_dehaze_attr

数据类型

OT_ISP_DEHAZE_LUT_SIZE

【说明】

定义去雾LUT的大小。

【定义】

#define OT_ISP_DEHAZE_LUT_SIZE          256

【注意事项】

无。

【相关数据类型及接口】

ot_isp_dehaze_attr

ot_isp_dehaze_manual_attr

【说明】

定义去雾手动模式属性。

【定义】

typedef struct {
    td_u8 strength;
} ot_isp_dehaze_manual_attr;

【成员】

成员名称

描述

strength

手动模式下去雾强度

取值范围:[0,255]

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dehaze_auto_attr

【说明】

定义去雾自动模式属性。

【定义】

typedef struct {
    td_u8 strength;
} ot_isp_dehaze_auto_attr;

【成员】

成员名称

描述

strength

自动模式下去雾强度的权重系数,每个块自动计算出的去雾强度会乘以权重系数,得到的结果作为最终的去雾强度

取值范围:[0,255]

默认值为128,用户可以手动修改强度值。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dehaze_attr

【说明】

定义ISP去雾属性。

【定义】

typedef struct {
    td_bool  enable;
    td_bool  user_lut_en;
    td_u8    dehaze_lut[OT_ISP_DEHAZE_LUT_SIZE];
    ot_op_mode                op_type;
    ot_isp_dehaze_manual_attr manual_attr;
    ot_isp_dehaze_auto_attr   auto_attr;
    td_u16       tmprflt_incr_coef;
    td_u16       tmprflt_decr_coef;
} ot_isp_dehaze_attr;

【成员】

成员名称

描述

enable

使能Dehaze功能。

user_lut_en

用户自定义去雾曲线使能。

dehaze_lut [OT_ISP_DEHAZE_LUT_SIZE]

用户自定义去雾曲线。

op_type

操作模式。

manual_attr

手动模式。

auto_attr

自动模式。

tmprflt_incr_coef

时域滤波递增系数,值越大,画面由暗到亮收敛速度越快,取值范围:[0x0,0x80]

tmprflt_decr_coef

时域滤波递减系数,值越大,画面由亮到暗收敛速度越快,取值范围:[0x0,0x80]

【注意事项】

去雾使能后,为了避免画面异常,延迟三帧,图像第四帧生效。

【相关数据类型及接口】

无

去伪彩

功能描述

高频分量在图像插值时易引起高频混叠。用镜头对准一个分辨率测试卡,当sensor表面没有OLPF时,在分辨率的高频部分容易出现伪彩。

去除伪彩主要是指去除高频部分因插值错误所导致的伪彩现象。增大去伪彩强度值会减弱伪彩现象,但可能导致正常的颜色灰度化。

该模块原理是计算出伪彩出现区域及范围,通过可配去伪彩强度寄存器值调整去伪彩强度值,将RGB三个通道值灰度化,从而达到减弱伪彩现象的目的。

API参考

ss_mpi_isp_set_anti_false_color_attr

【描述】

设置AntiFalseColor参数。

【语法】

td_s32 ss_mpi_isp_set_anti_false_color_attr(ot_vi_pipe vi_pipe, const ot_isp_anti_false_color_attr *anti_false_color);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号

输入

anti_false_color

AntiFalseColor参数

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_anti_false_color_attr

ss_mpi_isp_get_anti_false_color_attr

【描述】

获取AntiFalseColor参数。

【语法】

td_s32 ss_mpi_isp_get_anti_false_color_attr(ot_vi_pipe vi_pipe, ot_isp_anti_false_color_attr *anti_false_color);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

anti_false_color

AntiFalseColor参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无

【相关主题】

ss_mpi_isp_set_anti_false_color_attr

数据类型

ot_isp_anti_false_color_manual_attr

【说明】

定义ISP ANTIFALSECOLOR手动属性。

【定义】

typedef struct {
    td_u8    threshold;
    td_u8    strength;
} ot_isp_anti_false_color_manual_attr;

【成员】

成员名称

描述

threshold

去伪彩阈值,值越大,伪彩去除的区域越多。

取值范围:[0, 0x20]

strength

去伪彩强度,值越大,去伪彩强度越大,伪彩现象消除越好,但可能导致正常颜色的改变。

取值范围:[0, 0x1F]

【注意事项】

注意各参数的取值范围。

【相关数据类型及接口】

ot_isp_anti_false_color_attr

ot_isp_anti_false_color_auto_attr

【说明】

定义ISP ANTIFALSECOLOR自动属性。

【定义】

typedef struct {
    td_u8  threshold[OT_ISP_AUTO_ISO_NUM];
    td_u8  strength[OT_ISP_AUTO_ISO_NUM];
} ot_isp_anti_false_color_auto_attr;

【成员】

成员名称

描述

threshold

去伪彩阈值,值越大,伪彩去除的区域越多。

取值范围:[0, 0x20]

strength

去伪彩强度,值越大,去伪彩强度越大,伪彩现象消除越好,但可能导致正常颜色的改变。

取值范围:[0, 0x1F]

【注意事项】

注意各参数的取值范围。

【相关数据类型及接口】

ot_isp_anti_false_color_attr

ot_isp_anti_false_color_attr

【说明】

定义ISP ANTIFALSECOLOR属性。

【定义】

typedef struct {
    td_bool  enable;
    ot_op_mode op_type;
    ot_isp_anti_false_color_manual_attr manual_attr;
    ot_isp_anti_false_color_auto_attr   auto_attr;
} ot_isp_anti_false_color_attr;

【成员】

成员名称

描述

enable

ANTIFALSECOLOR模块使能。

取值范围:[0,1]

0:禁止;

1:使能。

op_type

ANTIFALSECOLOR工作类型。

OT_OP_MODE_AUTO:自动;

OT_OP_MODE_MANUAL:手动。

auto_attr

ANTIFALSECOLOR自动参数。

manual_attr

ANTIFALSECOLOR手动参数。

【注意事项】

ANTIFALSECOLOR功能分为自动和手动参数:

  • enable为TD_TRUE,op_type为OT_OP_MODE_AUTO,使用自动ANTIFALSECOLOR功能。
  • enable设置为TD_TRUE,op_type设置为OT_OP_MODE_MANUAL使用手动ANTIFALSECOLOR功能。

【相关数据类型及接口】

无。

去马赛克

功能描述

Demosaic模块实现的功能是:将输入的Bayer数据转化成RGB数据。CFA(Color Filter Array,彩色滤波阵列)得到的Bayer数据,每一像素点只能获得R、G、B三基色中的一种彩色分量值。为获得彩色图像,需要利用当前像素及周围像素的色彩分量值,估计出当前点缺失的其他两个分量值(如图1所示)。

该模块能输出较高的图像分辨率,对弱细节及清晰度有较大提升。

图 1 去马赛克处理图

须知:

在处理高频黑白图像时,由于去马赛克模块对输入Bayer CFA数据进行了插值,因此在高频区域容易发生混叠,导致出现打开去马赛克模块高频区域清晰度反而下降的情况,此为正常现象。

API参考

ss_mpi_isp_set_demosaic_attr

【描述】

设置Demosaic参数。

【语法】

td_s32 ss_mpi_isp_set_demosaic_attr(ot_vi_pipe vi_pipe, const ot_isp_demosaic_attr *demosaic_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

demosaic_attr

Demosaic参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_demosaic_attr

ss_mpi_isp_get_demosaic_attr

【描述】

获取Demosaic参数。

【语法】

td_s32 ss_mpi_isp_get_demosaic_attr(ot_vi_pipe vi_pipe, ot_isp_demosaic_attr *demosaic_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

demosaic_attr

Demosaic参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_demosaic_attr

数据类型

ot_isp_demosaic_manual_attr

【说明】

定义ISP DEMOSAIC手动属性。

【定义】

typedef struct {
    td_u8   nddm_strength;  
    td_u8   nddm_mf_detail_strength;    
union {
        td_u8   nddm_hf_detail_strength; 
        td_u8   hf_detail_strength; 
    };
    td_u8   detail_smooth_range;      
    td_u8   color_noise_f_threshold; 
    td_u8   color_noise_f_strength;  
    td_u8   color_noise_y_threshold;   
    td_u8   color_noise_y_strength;   
} ot_isp_demosaic_manual_attr;

【成员】

成员名称

描述

nddm_strength

无方向插值强度,值越大,无方向插值所占比重越大。

  • Hi3519DV500取值范围:[0x0,0xFF]
  • Hi3516CV610取值范围:[0x0,0xFF],其中,取0xFF表示全选择无方向插值

nddm_mf_detail_strength

无方向中频纹理增强强度,值越大,无方向中频纹理细节增强越强,对噪声同样有增强。

取值范围:[0x0, 0x7f]

nddm_hf_detail_strength

无方向高频纹理增强强度,值越大,无方向高频纹理细节增强越强,对噪声均匀性有提升。

取值范围:[0x0,0x10]

Hi3516CV610不支持。

hf_detail_strength

方向插值结果叠加高频纹理增强强度,值越大,高频纹理细节增强越强,对噪声均匀性有提升。

取值范围:[0x0,0x10]

Hi3519DV500不支持。

detail_smooth_range

细节平滑范围,值越大,做平滑处理的细节范围越大,能够抑制更多伪细节。

取值范围:[0x1, 0x7]

color_noise_f_threshold

根据画面平坦程度使用去色噪,值越大,则越容易在平坦区域进行去色噪功能。值越小,则受去色噪功能影响的像素越少。

取值范围:[0x0, 0xFF],默认值为0。

Hi3516CV610不支持。

color_noise_f_strength

根据画面平坦程度进行去色噪的强度,值越大,则去色噪强度越强,饱和度越低。取值范围:[0x0, 0x8],默认值为8。

Hi3516CV610不支持。

color_noise_y_threshold

根据亮度和饱和度进行去色噪,值越大,暗区以及饱和度高的区域受去色噪影响的像素越多。值越小,影响的像素越少。

取值范围:[0x0, 0xF]

Hi3516CV610不支持。

color_noise_y_strength

根据亮度和饱和度进行去色噪的强度,值越大,参数所作用的区域去色噪强度越强,饱和度越低。值越小,去色噪强度越小。

取值范围:[0x0, 0x3F]

Hi3516CV610不支持。

【注意事项】

  • 在红外模式下,或者在CCM饱和度设定成0,输出灰度图的情况下,需要将color_noise_y_threshold 和color_noise_y_strength参数都设定成0,关闭降低颜色噪声的功能。
  • 在WDR模式下,相对线性模式,同样的color_noise_y_threshold 和color_noise_y_strength参数,降饱和度程度会减弱。建议在WDR模式下,不使用color_noise_y_threshold 和color_noise_y_strength降低色噪。
  • color_noise_f_threshold由于算法采取的是硬钳位方法进行判断是否需要降低饱和度,因此如果这个参数设置的过大,在有一定亮噪的情况下,会出现颜色过渡异常的情况。

【相关数据类型及接口】

ot_isp_demosaic_attr

ot_isp_demosaic_auto_attr

【说明】

定义ISP DEMOSAIC自动属性。

【定义】

typedef struct {
    td_u8   nddm_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8   nddm_mf_detail_strength[OT_ISP_AUTO_ISO_NUM];
    union {
        td_u8 nddm_hf_detail_strength[OT_ISP_AUTO_ISO_NUM];
        td_u8 hf_detail_strength[OT_ISP_AUTO_ISO_NUM]; 
    };
    td_u8   detail_smooth_range[OT_ISP_AUTO_ISO_NUM];
    td_u8   color_noise_f_threshold[OT_ISP_AUTO_ISO_NUM];
    td_u8   color_noise_f_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8   color_noise_y_threshold[OT_ISP_AUTO_ISO_NUM];
    td_u8   color_noise_y_strength[OT_ISP_AUTO_ISO_NUM];
} ot_isp_demosaic_auto_attr;

【成员】

成员名称

描述

nddm_strength

无方向插值强度,值越大,无方向插值所占比重越大。

取值范围:[0x0, 0xFF]

  • Hi3519DV500取值范围:[0x0,0xFF]
  • Hi3516CV610取值范围:[0x0,0xFF],其中,取0xFF表示全选择无方向插值。

nddm_mf_detail_strength

无方向中频纹理增强强度,值越大,无方向中频纹理细节增强越强,对噪声同样有增强。

取值范围:[0x0, 0x7f]

nddm_hf_detail_strength

无方向高频纹理增强强度,值越大,无方向高频纹理细节增强越强,对噪声均匀性有提升。

取值范围:[0x0, 0x10]

Hi3516CV610不支持。

hf_detail_strength

方向插值结果叠加高频纹理增强强度,值越大,高频纹理细节增强越强,对噪声均匀性有提升。

取值范围:[0x0,0x10]

Hi3519DV500不支持。

detail_smooth_range

细节平滑范围,值越大,做平滑处理的细节范围越大,能够抑制更多伪细节。

取值范围:[0x1, 0x7]

color_noise_f_threshold

根据画面平坦程度使用去色噪,值越大,则越容易在平坦区域进行去色噪功能。值越小,则受去色噪功能影响的像素越少。

取值范围:[0x0, 0xFF],默认值为0。

Hi3516CV610不支持。

color_noise_f_strength

根据画面平坦程度进行去色噪的强度,值越大,则去色噪强度越强,饱和度越低。

取值范围:[0x0, 0x8],默认值为8。

Hi3516CV610不支持。

color_noise_y_threshold

根据亮度和饱和度进行去色噪,值越大,暗区以及饱和度高的区域受去色噪影响的像素越多。值越小,影响的像素越少。

取值范围:[0x0, 0xF]

Hi3516CV610不支持。

color_noise_y_strength

根据亮度和饱和度进行去色噪的强度,值越大,参数所作用的区域去色噪强度越强,饱和度越低。值越小,去色噪强度越小。

取值范围:[0x0, 0x3F]

Hi3516CV610不支持。

【注意事项】

注意各参数的取值范围。

【相关数据类型及接口】

ot_isp_demosaic_attr

ot_isp_demosaic_attr

【说明】

定义ISP DEMOSAIC属性。

【定义】

typedef struct {
    td_bool enable;
    ot_op_mode op_type;
    td_u16     ai_detail_strength;
    ot_isp_demosaic_manual_attr manual_attr;
    ot_isp_demosaic_auto_attr   auto_attr;
} ot_isp_demosaic_attr;

【成员】

成员名称

描述

enable

Demosaic模块使能。

取值范围:[0, 1]

0:禁止;

1:使能。

op_type

DEMOSAIC工作类型。

  • OT_OP_MODE_AUTO:自动;
  • OT_OP_MODE_MANUAL:手动。

ai_detail_strength

AI细节增强强度,值越大,细节越清晰。取值范围:[0x0, 0x1FF]

Hi3519DV500/Hi3516CV610不支持。

auto_attr

DEMOSAIC自动参数。

manual_attr

DEMOSAIC手动参数。

【注意事项】

DEMOSAIC功能分为自动和手动参数:

  • enable为TD_TRUE,op_type为OT_OP_MODE_AUTO,使用自动DEMOSAIC功能。
  • enable设置为TD_TRUE,op_type设置为OT_OP_MODE_MANUAL使用手动DEMOSAIC功能。

【相关数据类型及接口】

无。

BayerSharpen

功能描述

BayerSharpen模块用于增强图像的弱纹理清晰度,同时还能控制锐化后的图像的overshoot和undershoot,以及抑制噪声的增强。

说明:

Hi3516CV610不支持此模块。

API参考

ss_mpi_isp_set_bayershp_attr

【描述】

设定图像锐化属性。

【语法】

td_s32 ss_mpi_isp_set_bayershp_attr(ot_vi_pipe vi_pipe, const ot_isp_bayershp_attr *bshp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe 序号

输入

bshp_attr

图像锐化属性

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持

【举例】

无

【相关主题】

ss_mpi_isp_get_bayershp_attr

ss_mpi_isp_get_bayershp_attr

【描述】

获取图像锐化属性。

【语法】

td_s32 ss_mpi_isp_get_bayershp_attr(ot_vi_pipe vi_pipe, ot_isp_bayershp_attr *bshp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe 序号

输入

bshp_attr

图像锐化属性

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持

【举例】

无

【相关主题】

ss_mpi_isp_set_bayershp_attr

数据类型

OT_ISP_BSHP_THD_NUM

【说明】

定义Bayer Sharpen亮度阈值、纹理阈值区间数。

【定义】

#define OT_ISP_BSHP_THD_NUM        2

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_BSHP_CURVE_NUM

【说明】

定义Bayer Sharpen细节锐化区间数。

【定义】

#define OT_ISP_BSHP_CURVE_NUM        8

【注意事项】

无。

【相关数据类型及接口】

ot_isp_bayershp_manual_attr

【说明】

定义Bayer Sharpen手动属性。

【定义】

typedef struct {
     td_u8  mf_strength[OT_ISP_BSHP_CURVE_NUM];
     td_u8  hf_strength[OT_ISP_BSHP_CURVE_NUM];
     td_u8  dark_strength[[OT_ISP_BSHP_CURVE_NUM];

    td_u8  mf_gain;
    td_u8  hf_gain;
    td_u8  dark_gain;
    td_u16 overshoot;
    td_u16 undershoot;
} ot_isp_bayershp_manual_attr;

【成员】

成员名称

描述

mf_strength[OT_ISP_BSHP_CURVE_NUM]

中频纹理强度,值越大,锐化越强,但会导致细节变粗。该曲线分为8段。可以对不同的纹理区域配置不同的强度实现差异化调试。

取值范围:[0, 63]

hf_strength[OT_ISP_BSHP_CURVE_NUM]

高频纹理强度,值越大,纹理越多。该曲线分为8段。可以对不同的纹理区域配置不同的强度实现差异化调试。

取值范围:[0, 63]

dark_strength[OT_ISP_BSHP_CURVE_NUM]

暗区纹理强度,值越大,锐化越强。该曲线分为8段。可以对暗区不同的纹理区域配置不同的强度实现差异化调试。

取值范围:[0, 63]

mf_gain

中频锐化增益,值越大,画面整体中频纹理越强。

取值范围:[0, 15]。

hf_gain

高频锐化增益,值越大,画面整体高频纹理越强。

取值范围:[0, 15]。

dark_gain

暗区锐化增益,值越大,画面暗区纹理越强。

取值范围:[0, 15]。

overshoot

图像的整体白边控制强度。值越大,白边越重。

取值范围:[0, 255]。

undershoot

图像的整体黑边控制强度。值越大,黑边越重。

取值范围:[0, 255]。

【注意事项】

无。

【相关数据类型及接口】

ot_isp_bayershp_attr

ot_isp_bayershp_auto_attr

【说明】

定义Bayer Sharpen自动属性。

【定义】

typedef struct {
    td_u8  mf_strength[OT_ISP_BSHP_CURVE_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8  hf_strength[OT_ISP_BSHP_CURVE_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8  dark_strength[OT_ISP_BSHP_CURVE_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8  mf_gain[OT_ISP_AUTO_ISO_NUM];
    td_u8  hf_gain[OT_ISP_AUTO_ISO_NUM];
    td_u8  dark_gain[OT_ISP_AUTO_ISO_NUM];
    td_u16 overshoot[OT_ISP_AUTO_ISO_NUM];
    td_u16 undershoot[OT_ISP_AUTO_ISO_NUM];
} ot_isp_bayershp_auto_attr;

【成员】

成员名称

描述

mf_strength[OT_ISP_BSHP_CURVE_NUM][OT_ISP_AUTO_ISO_NUM]

中频纹理强度,值越大,锐化越强,但会导致细节变粗。该曲线分为8段。可以对不同的纹理区域配置不同的强度实现差异化调试。

取值范围:[0, 63]

hf_strength[OT_ISP_BSHP_CURVE_NUM][OT_ISP_AUTO_ISO_NUM]

高频纹理强度,值越大,纹理越多。该曲线分为8段。可以对不同的纹理区域配置不同的强度实现差异化调试。

取值范围:[0, 63]

dark_strength[OT_ISP_BSHP_CURVE_NUM][OT_ISP_AUTO_ISO_NUM]

暗区纹理强度,值越大,锐化越强。该曲线分为8段。可以对暗区不同的纹理区域配置不同的强度实现差异化调试。

取值范围:[0, 63]

mf_gain[OT_ISP_AUTO_ISO_NUM]

中频锐化增益,值越大,画面整体中频纹理越强。

取值范围:[0, 15]。

hf_gain[OT_ISP_AUTO_ISO_NUM]

高频锐化增益,值越大,画面整体高频纹理越强。

取值范围:[0, 15]。

dark_gain[OT_ISP_AUTO_ISO_NUM]

暗区锐化增益,值越大,画面暗区纹理越强。

取值范围:[0, 15]。

overshoot[OT_ISP_AUTO_ISO_NUM]

图像的整体白边控制强度。值越大,白边越重。

取值范围:[0, 255]。

undershoot[OT_ISP_AUTO_ISO_NUM]

图像的整体黑边控制强度。值越大,黑边越重。

取值范围:[0, 255]。

【注意事项】

无。

【相关数据类型及接口】

ot_isp_bayershp_attr

ot_isp_bayershp_attr

【说明】

定义Bayer Sharpen属性。

【定义】

typedef struct {
    td_bool enable;
    td_u16 dark_threshold[OT_ISP_BSHP_THD_NUM];
    td_u16 texture_threshold[OT_ISP_BSHP_THD_NUM];
    ot_op_mode op_type;
    ot_isp_bayershp_manual_attr manual_attr;
    ot_isp_bayershp_auto_attr  auto_attr;
} ot_isp_bayershp_attr;

【成员】

成员名称

描述

enable

Bayer Sharpen模块使能,取值范围:[0,1]

TD_FALSE:关闭;

TD_TRUE:使能。

默认值为TD_TRUE。

op_type

Bayer Sharpen工作类型,取值范围:[0,1]

OT_OP_MODE_AUTO:自动;

OT_OP_MODE_MANUAL:手动。

默认值为OT_OP_MODE_AUTO。

dark_threshold[OT_ISP_BSHP_THD_NUM]

暗区识别阈值,识别为暗区的最小阈值和最大阈值,小于最小阈值的区域被识别为暗区,其中dark_threshold[1]必须大于dark_threshold[0]。取值范围:[0, 4095]。

texture_threshold[OT_ISP_BSHP_THD_NUM]

纹理识别阈值,识别为纹理的最小阈值和最大阈值,小于最小阈值的区域被识别为纹理,其中texture_threshold[1]必须大于texture_threshold[0]。取值范围:[0, 4095]。

manual_attr

Bayer Sharpen手动参数。

auto_attr

Bayer Sharpen自动参数。

【注意事项】

Bayer Sharpen功能分为自动和手动:

  • enable为TD_TRUE,op_type为OT_OP_MODE_AUTO,使用自动Bayer Sharpen功能。此时bayer sharpen的强度值与系统增益的关系请参见成员变量。
  • enable设置为TD_TRUE,op_type设置为OT_OP_MODE_MANUAL使用手动Bayer Sharpen功能。

【相关数据类型及接口】

无

黑电平

功能描述

黑电平通常指没有外界光线输入时,sensor仍会输出的亮度值。ISP需要减去这个亮度值,以进行颜色的处理。

API参考

ss_mpi_isp_set_black_level_attr

【描述】

设置黑电平属性。

【语法】

td_s32 ss_mpi_isp_set_black_level_attr(ot_vi_pipe vi_pipe, const ot_isp_black_level_attr *black_level);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

black_level

黑电平属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

  • 如果接口配置为OT_ISP_BLACK_LEVEL_MODE_AUTO模式:若cmos.c里面的ot_isp_black_level_auto_attr结构体成员update设置为TD_TRUE,则表示始终使用cmos.c内联动的黑电平配置,而update设置为TD_FALSE,则表示使用cmos.c非联动的黑电平配置;如果接口配置为OT_ISP_BLACK_LEVEL_MODE_MANUAL模式:此时接口配置的手动黑电平配置会生效,ISP内部采用接口配置值;如果接口配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC,则采用dynamic blc算法统计OB区得到的黑电平配置值。Dynamic blc算法可以实时统计OB区的黑电平,在OB区黑电平与可见光黑电平差值确定的情况下可以防止黑电平飘移。Dynamic blc模式调节iso时,拉满again后不能调节dgain,只能调节ispdgain。
  • 线性模式下,black level模块集成在isp dgain 模块中,所以bypass isp dgain会同时关闭isp dgain模块中的black level功能。对图像质量影响较大。
  • WDR模式下,black level模块集成在WDR模块中。WDR模式的通路配置与线性通路配置类似。要注意对于同一款sensor而言,线性模式和WDR模式的ob区datatype和sensor驱动配置可能是不一样的,要和sensor厂家的fae对清楚。
  • vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM时,不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。sensor built-in模式下,同样不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。(数据类型请具体请参考OT_ISP_MAX_PIPE_NUM)
  • Manual、auto、dynamic blc模式中的黑电平值均指代sensor的黑电平值,若sensor黑电平随sensor gain/温度漂移较严重,而同时希望ISP的算法看到一组稳定的黑电平值,此时可以使能user_black_level_en,在FE的BLC模块中减去sensor黑电平与自定义黑电平之间的差异,这样ISP的所有模块所使用的黑电平均为user_black_level。
  • 如果在使能user_black_level_en的情况下采集 raw数据,所采集raw数据的黑电平为user_black_level。此时如果需要灌所采集的raw进行调试,需要disable user_black_level_en,black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_MANUAL,manual_attr.black_level的值配置为user_black_level。
  • 在线模式动态黑电平当帧生效且不支持配置offset,离线模式动态黑电平下一帧生效。
  • Hi3516CV610不支持dynamic blc。

【举例】

无

【相关主题】

无

ss_mpi_isp_get_black_level_attr

【描述】

获取黑电平属性。

【语法】

td_s32 ss_mpi_isp_get_black_level_attr(ot_vi_pipe vi_pipe, ot_isp_black_level_attr *black_level);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

black_level

黑电平属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

无

数据类型

ot_isp_black_level_mode

【说明】

定义黑电平工作类型。

【定义】

typedef enum {
    OT_ISP_BLACK_LEVEL_MODE_AUTO    = 0,
    OT_ISP_BLACK_LEVEL_MODE_MANUAL  = 1,
    OT_ISP_BLACK_LEVEL_MODE_DYNAMIC = 2,
    OT_ISP_BLACK_LEVEL_MODE_BUTT
} ot_isp_black_level_mode;

【成员】

成员名称

描述

OT_ISP_BLACK_LEVEL_MODE_AUTO

Auto模式,此种模式下采用cmos.c中配置的黑电平值。

OT_ISP_BLACK_LEVEL_MODE_MANUAL

Manual模式,此种模式下采用接口配置的手动黑电平值。

OT_ISP_BLACK_LEVEL_MODE_DYNAMIC

Dynamic blc模式,此种模式下采用Dynamic BLC模块基于OB区统计得到的黑电平值。

Hi3516CV610不支持。

【注意事项】

无

【相关数据类型及接口】

ot_isp_black_level_attr

ot_isp_black_level_manual_attr

【说明】

定义手动黑电平属性。

【定义】

typedef struct {
    td_u16 black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
} ot_isp_black_level_manual_attr;

【成员】

成员名称

描述

black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]

  • 线性模式下:

    黑电平的值,第一行表示当前帧的R、Gr、Gb、B分量的黑电平。

  • 2合1模式下:

    黑电平的值,前两行分别表示短帧、长帧的R、Gr、Gb、B分量的黑电平。

  • 3合1模式下:

    黑电平的值,前三行分别表示短帧、中帧、长帧的R、Gr、Gb、B分量的黑电平。

取值范围:[0x0, 0x3FFF]

black_level为14bit raw数据的黑电平。

【注意事项】

无

【相关数据类型及接口】

ot_isp_black_level_attr

ot_isp_black_level_dynamic_pattern

【说明】

定义dynamic BLC统计数据的Bayer格式属性。

【定义】

typedef enum {
    OT_ISP_DYNAMIC_PATTERN_RGB  = 0,
    OT_ISP_DYNAMIC_PATTERN_RGBIR,
    OT_ISP_DYNAMIC_PATTERN_BUTT
} ot_isp_black_level_dynamic_pattern;

【成员】

成员名称

描述

OT_ISP_DYNAMIC_PATTERN_RGB

当前数据Bayer格式为RGB Pattern。

OT_ISP_DYNAMIC_PATTERN_RGBIR

当前数据Bayer格式为RGBIR Pattern。

【注意事项】

无

【相关数据类型及接口】

ot_isp_black_level_attr

ot_isp_black_level_dynamic_attr

【说明】

定义dynamic BLC属性。

【定义】

typedef struct {
    ot_isp_black_level_dynamic_pattern pattern;
    ot_rect ob_area;
    td_u16  low_threshold;
    td_u16  high_threshold;
    td_s16  offset[OT_ISP_AUTO_ISO_NUM];
    td_u16 tolerance;
    td_u8  filter_strength;
    td_bool separate_en;
    td_u16  calibration_black_level[OT_ISP_AUTO_ISO_NUM];
    td_u16  filter_thr;
} ot_isp_black_level_dynamic_attr;

【成员】

成员名称

描述

pattern

当前数据的Bayer格式。

ob_area

OB区的起始点坐标以及宽高。起始点坐标和宽高都必须是2的整数倍。

ob_area.x和ob_area.y表示OB区的起始坐标点。ob_area.width和ob_area.height表示OB区的宽高。该参数为ob区的统计范围,设置时应参考实际ob区大小,设置过小或超出图像实际ob区范围都可能导致图像异常。

low_threshold

OB区统计时不统计低于该值的像素点。该值用于限制统计像素的最小值。按照14bit的raw数据进行配置。建议设置为小于等于10的值,该值设置过大可能会导致图像异常。

取值范围:[0x0, 0xFFF]

high_threshold

OB区统计时不统计高于该值的像素点。 该值用于限制统计像素的最大值。按照14bit的raw数据进行配置。建议设置为大于4900的值,该值过小可能会导致图像异常。

取值范围:[0x0, 0x3FFF]

offset[OT_ISP_AUTO_ISO_NUM]

OB区黑电平与可见光区黑电平的差值。该值用于补偿OB区黑电平,使其与可见光区黑电平保持一致。按照14bit的raw数据进行配置。最大支持ISO到64倍。

取值范围:[-0x3FFF, 0x3FFF]

tolerance

OB区黑电平波动的范围。OB区的黑电平会受到噪声干扰波动,该值用于限制这种波动。当上一帧减去当前帧黑电平的绝对值小于tolerance时,当前帧黑电平延用上一帧黑电平。按照14bit的raw数据进行配置。

取值范围:[0x0, 0x3FFF]

filter_strength

OB区黑电平时域滤波强度。OB区的黑电平会受到噪声干扰波动,本算法使用时域滤波抑制这种波动。该值为时域滤波强度。

取值范围:[0x0, 0x40]

separate_en

OB区黑电平读取方式。该值为0x1表示从寄存器中分别读取rggb四通道的黑电平。该值为0x0表示从寄存器中分别读取rggb四通道的黑电平后做平均处理。

取值范围:[0x0, 0x1]

calibration_black_level[OT_ISP_AUTO_ISO_NUM]

不同again对应的黑电平的值。当环境光发生变化时,AE在第N帧重新计算出曝光信息。在N+1帧将第N帧的曝光信息配置给sensor。第N帧的曝光信息会在第N+3帧的RAW中生效。由于BLC会受到iso的影响所以第N+3帧的BLC发生了变化,但第N+3帧减的还是第N+2帧的黑电平,所以图像会偏色。该值用于计算补偿第N+3帧的黑电平,使其与可见光区黑电平保持一致,解决图像的偏色问题。按照14bit的raw数据进行配置。OT_ISP_AUTO_ISO_NUM的范围为0~15,对应的iso档位为100*(2^OT_ISP_AUTO_ISO_NUM)。

取值范围:[0x0, 0x3FFF]

filter_thr

用于调整时域滤波器更新状态。应对时域滤波器开启时iso突变图像颜色异常的情况。 直接配置filter_thr。当iso变化时,IIR滤波器会根据filter_thr的值更新上一帧黑电平的值。如果|last_frame_blc - cur_frame_blc| > filt_thr 那么blc = last_frame_blc*wtg1 + cur_frame_blc*wtg2。改为blc = cur_frame_blc*wtg1 + cur_frame_blc*wtg2。其中的wtg1和wtg2表示滤波强度。

取值范围:[0x0, 0x3FFF]

表 1 offset在不同的增益情况下的设置值

offset

Again*Dgain (倍数)

推荐设置值

offset [0]

1

0x0

offset [1]

2

0x0

offset [2]

4

0x0

offset [3]

8

0x0

offset [4]

16

0x0

offset [5]

32

0x0

offset [6]

64

0x0

offset [7]

128

0x0

offset [8]

256

0x0

offset [9]

512

0x0

offset [10]

1024

0x0

offset [11]

2048

0x0

offset [12]

4096

0x0

offset [13]

8192

0x0

offset [14]

16384

0x0

offset [15]

32768

0x0

【注意事项】

  1. 使用user_black_level时要确保sensor黑电平小于user_black_level。
  2. 使用dynamic_blc时,当iso快速变化,时域滤波器需要更换上一帧blc参数,否则会导致黑电平无法快速收敛到实际值,从而导致图像偏色。filter_thr为调整时域滤波器参数的阈值。当上一帧黑电平与当前帧的黑电平差值大于设定的filter_thr时,将上一帧黑电平的值改为当前帧黑电平再进行时域滤波。若差值小于filter_thr,则不改变上一帧黑电平的值,直接进行时域滤波。

    滤波公式:当前帧黑电平 = 上一帧黑电平 * 滤波强度 + 当前帧黑电平 * (1 – 滤波强度)

    有阈值判断的滤波过程:

    没有阈值判断的滤波过程:

  3. offset和calibration_black_level可以用在线标定工具dynamic_blc_online_cali标定得到。dynamic_blc_online_cali有写好的sample。

    要先确保mipi数据中包含OB区,才能打开Dynamic BLC模式对OB区进行统计。数据处理流程如图1所示。

  4. BLC模式不支持动态切换,一开始要用Dynamic BLC模式且在乎前几帧效果,要在sensor序列里关闭clamp。clamp是开关sensor内部黑电平校正的参数。

  5. Sensor驱动里一定要配置clamp信息,clamp信息可以在isp的proc打印信息里查询。如果没有配置clamp信息,proc信息里会显示none。

    低照下动态黑电平会剧烈震荡,因此要打开时域滤波,否则画面会不停的闪烁。

  6. 使用dynamic blc需要关闭sensor内部黑电平校正,关闭sensor内部黑电平校正后,若OB区的黑电平和可见光区的黑电平差别较大或者sensor黑电平过大影响user_black_level使用需要关闭sensor_dgain。

图 1 数据处理流程

因此若要使用Dynamic BLC模块基于OB区统计得到合理的黑电平值,整个数据处理通路的配置说明如下:

  • sensor驱动配置:在驱动中添加可以读出ob区的sensor序列。若启动Dynamic BLC模块一定要关闭sensor中的BLC校正功能。
  • mipi配置:确保mipi的裁剪区域包含OB区。若OB区的datatype与可见光区域图像的datatype不一样,则需要修改mipi的datatype配置,可通过调用OT_MIPI_SET_EXT_DATA_TYPE接口实现,接口的具体信息请参见《MIPI 使用指南》。若Dynamic BLC模块异常要检查mipi检测到的分辨率是否为包含OB区的分辨率。
  • VI dev配置:宽高与mipi输出宽高保持一致。
  • pub attr配置:配置wnd_rect中的起始坐标和宽高信息,使用ISP裁剪功能裁剪掉OB区,保证ISP FE和BE处理的数据为不带OB区的raw数据。
  • VI pipe attr和chn info中的宽高配置为ISP裁剪后的宽高。
  • 由于sensor gain值较大时,动态黑电平会严重飘移,所以calibration_black_level的标定值不够准确,从而导致等曝光量切换时会有颜色闪烁。但是不会影响开关灯这种极限场景的图像效果。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_black_level_attr

ot_isp_black_level_attr

【说明】

定义ISP黑电平属性。

【定义】

typedef struct {
    td_bool  user_black_level_en;
    td_u16   user_black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
    ot_isp_black_level_mode         black_level_mode;
    ot_isp_black_level_manual_attr  manual_attr;
    ot_isp_black_level_dynamic_attr dynamic_attr;
} ot_isp_black_level_attr;

【成员】

成员名称

描述

user_black_level_en

是否使用自定义的黑电平值。

使能user_black_level_en,ISP的所有模块看到的黑电平值为自定义的黑电平值,而非sensor的黑电平值。

user_black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]

自定义的黑电平值。

  • 线性模式下:

    user_black_level[0]表示线性数据R、Gr、Gb、B四分量的自定义黑电平值。

    user_black_level[1]~user_black_level[3]配置值无效。

  • WDR 2to1模式下:

    user_black_level[0]、user_black_level[1]分别表示短帧、长帧数据R、Gr、Gb、B四分量的自定义黑电平值。

    user_black_level[2]~user_black_level[3]配置值无效。

  • WDR 3to1模式下:

    user_black_level[0]、user_black_level[1]、user_black_level[2]分别表示短帧、中帧、长帧数据R、Gr、Gb、B四分量的自定义黑电平值。

    user_black_level[3]配置值无效。

取值范围:[0x0, 0x3FFF]

user_black_level为14bit raw数据的黑电平。

black_level_mode

黑电平工作类型。

manual_attr

手动黑电平属性。

dynamic_attr

Dynamic blc属性,Hi3516CV610不支持。

【注意事项】

  • Sensor built-in模式下不支持使能user_black_level_en。
  • vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM时,不支持使能user_black_level_en。(数据类型请具体请参考OT_ISP_MAX_PIPE_NUM)
  • Hi3516CV610不支持 dynamic_blc。

【相关数据类型及接口】

无

黑电平标定工具

功能描述

黑电平标定工具用于标定offset和calibration_black_level。在高iso条件下,可见光区的黑电平均值和OB区的黑电平均值会有差异。offset用于补偿OB区黑电平,使其与可见光区黑电平保持一致。按照14bit的raw数据进行配置。当环境光发生变化时,AE在第N帧重新计算出曝光信息。在N+1帧将第N帧的曝光信息配置给sensor。第N帧的曝光信息会在第N+3帧的RAW中生效。由于BLC会受到iso的影响所以第N+3帧的BLC发生了变化,但第N+3帧减的还是第N+2帧的黑电平,所以图像会偏色。calibration_black_level用于计算补偿第N+3帧的黑电平,使其与可见光区黑电平保持一致,解决图像的偏色问题。按照14bit的raw数据进行配置。

CAUTION:

黑电平标定结果通过修正实际统计黑电平实现个体差异校正。因此,用户通过MPI接口修改标定结果,会导致标定失效。 Hi3516CV610不支持此工具。

黑电平标定工具实现在量产过程中,针对不同机器的差异进行对黑电平补偿参数标定的功能。用户可以使用在线标定工具dynamic_blc_online_cali标定得到offset和calibration_black_level。再调用ss_mpi_isp_set_black_level_attr接口配置offset和calibration_black_level。同时生成带有offset和calibration_black_level标定结果的TXT文件。

注意事项:

  • 标定sample工具介绍详见:readme.txt
  • 标定sample工具可手动裁剪标定区域。所裁剪的画面越大,耗时越长。选定的iso档位越多,耗时越长。
  • 标定完成后sample会自动将标定数据导入,无需手动导入。
  • 当前标定工具只适配了hy_s0603。若要标定其他sensor需要在set_gain_acor_sensor函数中添加gain值配置。

黑电平补偿参数的校正过程:

  1. 修改sensor驱动(hy_s0603_cmos_ex.h)。将OT_ISP_BLACK_LEVEL_MODE_DYNAMIC改为动态BLC。
  2. 将设备的光圈完全关闭,或者使用镜头盖将镜头输入遮挡,确保无光线进入;
  3. 运行标定工具dynamic_blc_online_cali( ./ dynamic_blc_online_cali 0 30 8 100 100 100 100 )。

去FPN

功能描述

Sensor将光信号转换成电信号,再通过数百万个ADC器件后输出图像。每个像素结构中的光电二极管的尺寸、掺杂浓度、生产过程中的沾污以及MOS场效应管的参数的偏差等都会造成像素输出信号的变化,由于这些偏差造成的噪声对于给定的单个像素它是固定的,这种噪声就是固定模式噪声FPN(Fixed Pattern Noise)。

去FPN模块就是要把这些固定模式噪声消除。

FPN的标定过程:

  1. 首先确定FPN在哪个ISO下最为严重,在此ISO下固定增益,关闭镜头的光圈,让sensor采集黑帧。
  2. 启动标定,当第一帧过来时,把满足标定条件的RAW数据写到内存 ,当第二帧过来时,通过读出端口把内存中的黑帧读出来与第二帧进行累加后再通过写出端口再写回内存,后面的帧也是这样,但是最后一帧写出时会对累加的黑帧平均后再写回内存。
  3. 当求平均写出后,标定结束。此时,内存中就把低照度下的固定模式噪声存储下来了,然后,把该黑帧存储到外存上即可。

图 1 FPN标定示意图

FPN的校正过程:

  1. 把标定好的黑帧从外存载入到内存中。
  2. 当从sensor采集的带FPN的正常图像过来后,用每帧都减去在内存中的黑帧,从而就得到了消除FPN后的校正帧。

图 2 FPN校正示意图

API参考

ss_mpi_isp_fpn_calibrate

【描述】

设置去FPN标定属性。

【语法】

td_s32 ss_mpi_isp_fpn_calibrate(ot_vi_pipe vi_pipe, ot_isp_fpn_calibrate_attr *calibrate_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

calibrate_attr

去FPN标定属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

  • 标定时用的内存注意要按16bit进行分配,标定完成之后要把黑帧/行,ISO,黑帧的长度、OFFSET、是否压缩标志等保存到外部存储介质,在校正的时候要用到这些信息。
  • Hi3516CV610在VI离线VPSS在线模式下不支持FPN标定。
  • Hi3519DV500在图像宽度大于4096时只支持OT_PIXEL_FORMAT_RGB_BAYER_16BPP格式的黑帧校正;Hi3516CV610在图像宽度大于3200时只支持OT_PIXEL_FORMAT_RGB_BAYER_16BPP格式的黑帧校正。
  • Hi3519DV500/Hi3516CV610 FPN标定不支持压缩,只能是非压缩模式。
  • Hi3519DV500/Hi3516CV610 FPN标定不支持行模式,只能是帧模式。
  • HI3519DV500 FPN标定不支持在拼接sync模式下开启。
  • FPN标定不支持在虚拟pipe下开启,不支持YUV通路。
  • FPN在标定时当前pipe不能做校正,其他pipe不能做标定或者校正。
  • 在WDR模式下,FPN不支持标定。
  • VI物理通道使能时,不支持开启FPN标定。
  • 当VI模块的PIPE有销毁操作时(例如:分辨率切换、WDR模式切换等情况),FPN功能需要在VI模块的PIPE销毁前关闭,并在VI模块的PIPE创建后重新配置才能恢复。
  • FPN校正接口具有一定的延时,如关闭FPN校正后需要再次进行FPN标定,则需要等待几帧时间再调用FPN标定接口。
  • 该标定接口为阻塞接口,等待标定完成后返回,超时时间为20000ms,16帧标定时标定帧率最小为1@fps。

【举例】

标定过程请参考sample vio代码。

【相关主题】

ss_mpi_isp_set_fpn_attr

ss_mpi_isp_set_fpn_attr

【描述】

设置去FPN属性。

【语法】

td_s32 ss_mpi_isp_set_fpn_attr(ot_vi_pipe vi_pipe, const ot_isp_fpn_attr *fpn_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

fpn_attr

去FPN属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

  • Hi3519DV500/Hi3516CV610 FPN校正不支持压缩,只能是非压缩模式。
  • Hi3519DV500/Hi3516CV610 FPN校正不支持行模式,只能是帧模式。
  • HI3519DV500 FPN校正不支持在拼接sync模式下开启。
  • Hi3519DV500在图像宽度大于4096时只支持OT_PIXEL_FORMAT_RGB_BAYER_16BPP格式的黑帧校正;Hi3516CV610在图像宽度大于3200时只支持OT_PIXEL_FORMAT_RGB_BAYER_16BPP格式的黑帧校正。
  • WDR模式下不支持FPN校正。
  • FPN校正不支持在虚拟pipe下开启,不支持YUV通路。
  • FPN校正最大支持14bit通路。
  • 根据标定时候保存的黑帧信息,读出OFFSET、ISO等信息,同时要把黑帧读入内存,这些是在校正时要输入信息。如果用户选择为自动模式时,会根据校正时的ISO来自动调节校正的强度;而手动模式会根据用户输入的校正强度进行校正。

【举例】

校正过程请参考sample vio代码。

【相关主题】

ss_mpi_isp_get_fpn_attr

ss_mpi_isp_get_fpn_attr

【描述】

获取BE去FPN属性。

【语法】

td_s32 ss_mpi_isp_get_fpn_attr(ot_vi_pipe vi_pipe, ot_isp_fpn_attr *fpn_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

fpn_attr

去FPN属性指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_fpn_attr

数据类型

ot_isp_fpn_frame_info

【说明】

定义去FPN的标定黑帧信息。

【定义】

typedef struct {
    td_u32              iso;
    td_u32              offset[[OT_ISP_STRIPING_MAX_NUM](#ZH-CN_TOPIC_0000001338436902)];
    td_u32              frm_size;
    ot_video_frame_info fpn_frame;
} ot_isp_fpn_frame_info;

【成员】

成员名称

描述

iso

标定黑帧时的ISO,来自于标定时的ISO。

取值范围:[0x64, 0xFFFFFFFF]。

offset[3]

黑帧所有像素的平均值,来自于标定时的OFFSET。

取值范围:[0, 0x3FFF]仅高12bit有效。

frm_size

帧的大小,输出的黑帧有二种:压缩、非压缩,来自于标定时保存的黑帧大小。

Hi3519DV500/Hi3516CV610只支持非压缩。

fpn_frame

黑帧帧信息,首先分配内存,然后把标定时的黑帧从外存读入此内存,同时对此结构体成员进行赋值。

具体描述请参见《MPP媒体处理软件Vx.y开发参考》的“系统控制”章节。

【注意事项】

  • 使用FPN时,图像宽度要求为16的整数倍,否则标定的黑帧或校正后的图像会有异常。
  • offset可以在/proc/umap/isp中查询得到。当图像不分块时,offset[0]表示整个黑帧计算出来的offset;当图像分块时,offset[i]则表示黑帧第i个分块计算出来的offset,其中i=0、1、2,Hi3519DV500支持的最大分块数为3,Hi3516CV610支持的最大分块数为2。
  • 当标定时选择的黑帧pixel_format是OT_PIXEL_FORMAT_RGB_BAYER_16BPP时,黑帧是非紧凑型的raw;当pixel_format是其他时,黑帧是紧凑型的raw,像素位宽和选择的位宽一致。

【相关数据类型及接口】

ot_isp_fpn_calibrate_attr

ot_isp_fpn_calibrate_attr

【说明】

定义去FPN的标定属性。

【定义】

typedef struct {
    td_u32                 threshold;
    td_u32                 frame_num;
    ot_isp_fpn_type        fpn_type;
    ot_isp_fpn_frame_info  fpn_cali_frame;
    ot_isp_fpn_out_mode   fpn_mode;
} ot_isp_fpn_calibrate_attr;

【成员】

成员名称

描述

threshold

标定时的阈值,在标定时如果像素的值大于该值,则认为是坏点,该像素点不参与标定。取值范围:[0x1, 0xFFF]

frame_num

标定的帧数,取值范围:{1,2,4,8,16},即为2的整数次幂。

fpn_type

标定的类型,有二种:帧模式与行模式,帧模式校正效果要优于行模式,而行模式要比帧模式省内存。Hi3519DV500/Hi3516CV610只支持帧模式。

fpn_cali_frame

标定出来的黑帧信息。

fpn_mode

标定输出的模式,默认为0

【注意事项】

阈值与标定时保存黑帧的比特数相关,假设标定时保存的比特数是N,当N=16时阈值一般取4095,当N<16时阈值一般取(2^N)>>2-1。

【相关数据类型及接口】

ot_isp_fpn_attr

【说明】

定义去FPN的校正属性。

【定义】

typedef struct {
    td_bool                enable;
    td_bool                aibnr_mode;
    ot_op_mode             op_type;
    ot_isp_fpn_type        fpn_type;
    ot_isp_fpn_frame_info  fpn_frm_info;
    ot_isp_fpn_manual_attr manual_attr;
    ot_isp_fpn_auto_attr   auto_attr;
} ot_isp_fpn_attr;

【成员】

成员名称

描述

enable

校正使能。

aibnr_mode

模式选择,默认不使能,推荐在AIBNR开启时使能。Hi3516CV610不支持。

op_type

校正模式,分手动与自动模式。

fpn_type

校正类型,分帧模式与行模式。

Hi3519DV500/Hi3516CV610只支持帧模式。

fpn_frm_info

黑帧帧信息。

manual_attr

手动校正属性。

auto_attr

自动校正属性。Hi3519DV500/Hi3516CV610不支持。

【注意事项】

  • 校正模式分为手动与自动模式,手动模式需要用户设置校正强度,而自动模式不需要设置校正强度,系统会根据当前图像的ISO计算出校正强度,进行动态校正。
  • aibnr_mode不支持在fpn校正已经开了的时候进行动态修改,在配置fpn校正接口开时需要设置好aibnr_mode的配置,推荐在AIBNR开启时使能,其他情况下不使能。
  • aibnr_mode使能仅在pipe0生效。

【相关数据类型及接口】

ot_isp_fpn_manual_attr

【说明】

定义去FPN在手动模式的校正属性。

【定义】

typedef struct {
    td_u32  strength;
} ot_isp_fpn_manual_attr;

【成员】

成员名称

描述

strength

手动模式时校正强度,1倍强度为256。

取值范围:[0, 1023]

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_fpn_auto_attr

【说明】

定义去FPN在自动模式的校正属性。

【定义】

typedef struct {
    td_u32 strength;
} ot_isp_fpn_auto_attr;

【成员】

成员名称

描述

strength

自动模式实时校正强度,只读属性(ISP FWM根据ISO自动调整)。

取值范围:[0, 1023]

【注意事项】

自动模式下,strength根据标定时的ISO与当前ISO动态调整。

  • 当前ISO大于标定时的ISO,strength大于256;
  • 当前ISO小于标定时的ISO,strength小于256。

【相关数据类型及接口】

无

ot_isp_fpn_type

【说明】

定义去FPN类型。

【定义】

typedef enum {
    OT_ISP_FPN_TYPE_FRAME = 0,
    OT_ISP_FPN_TYPE_LINE = 1,
    OT_ISP_FPN_TYPE_BUTT
} ot_isp_fpn_type;

【成员】

成员名称

描述

OT_ISP_FPN_TYPE_FRAME

帧模式校正。

OT_ISP_FPN_TYPE_LINE

行模式校正。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_fpn_out_mode

【说明】

定义FPN标定帧输出的模式。

【定义】

typedef enum {
    OT_ISP_FPN_OUT_MODE_NORM = 0,
    OT_ISP_FPN_OUT_MODE_HIGH,
    OT_ISP_FPN_OUT_MODE_BUTT
} ot_isp_fpn_out_mode;

【成员】

成员名称

描述

OT_ISP_FPN_OUT_MODE_NORM

输出的像素值进行右对齐,即与最低有效位对齐,默认选择该模式。

OT_ISP_FPN_OUT_MODE_HIGH

输出的像素值进行左对齐,即与最高有效位对齐。

【注意事项】

  • 普通FPN标定,请选择OT_ISP_FPN_OUT_MODE_NORM模式。
  • 对于标定16帧以上的场景,需要使用OT_ISP_FPN_OUT_MODE_HIGH模式,具体用法参考fpn标定的sample(该sample默认为vi离线模式下,调用标定接口8次,用送帧实现128帧标定,不适用于在线模式)。

【相关数据类型及接口】

ot_isp_fpn_calibrate_attr

CA

功能描述

颜色调整模块支持在YUV空间进行色域调整的操作,这个模块下有两个模式,一个是CA模式,另外一个是CP模式(热成像上色),工作的时候,两者只能二选一。

在CA模式下,通过下面的公式可以将一个像素点(Y,U,V)映射到另一个像素点(Y’,U’,V’)。

Y’=Y;

U’=aU;

V’=aV;

其中a是转换系数,采用这组公式可以在一定程度上保持亮度和色调的恒定,对像素点的饱和度做一个调整。转换系数a和像素点亮度Y联系,就可以根据亮度的变化来调整饱和度,达到局部调整饱和度的目的,亮处的颜色更鲜艳,暗处的色噪不明显。同时,转换系数a和ISP的ISO值联系,达到降低低照度下的暗处色噪的目的。

在CP模式下,热成像的图像只有亮度信息,该模式下通过亮度信息Y查找上色的色板,查找对应的YUV的值作为输出的值。其中,色板是通过YUV格式存储的。

API参考

ss_mpi_isp_set_ca_attr

【描述】

设置CA属性。

【语法】

td_s32 ss_mpi_isp_set_ca_attr (ot_vi_pipe vi_pipe, const ot_isp_ca_attr *ca_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ca_attr

CA属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_ca_attr

ss_mpi_isp_get_ca_attr

【描述】

获取CA属性。

【语法】

td_s32 ss_mpi_isp_get_ca_attr(ot_vi_pipe vi_pipe, ot_isp_ca_attr *ca_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ca_attr

CA属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

  • HDR模式,默认关闭CA,客户可以自行设置打开。
  • Hi3519DV500/Hi3516CV610 不涉及HDR模式。

【举例】

无。

【相关主题】

ss_mpi_isp_set_ca_attr

数据类型

OT_ISP_CA_YRATIO_LUT_LENGTH

【说明】

CA的数据分格,CA模式下为亮度等分,CP模式下为YUV数据等分。

【定义】

#define OT_ISP_CA_YRATIO_LUT_LENGTH               128

【注意事项】

无。

【相关数据类型及接口】

ot_isp_ca_type

【说明】

定义颜色调整模块的工作模式。0为CA模式,1为CP模式。

【定义】

typedef enum {
    OT_ISP_CA_ENABLE = 0x0,
    OT_ISP_CP_ENABLE,           /* Not supported for Hi3516CV610 */
    OT_ISP_CA_BUTT
} ot_isp_ca_type;

【成员】

成员名称

描述

OT_ISP_CA_ENABLE

0x0:CA模式。

OT_ISP_CP_ENABLE

0x1:CP模式。

【注意事项】

Hi3516CV610 不支持CP模式。

【相关数据类型及接口】

无

ot_isp_ca_lut

【说明】

定义CA模式的属性。

【定义】

typedef struct {
    td_u32  y_ratio_lut[OT_ISP_CA_YRATIO_LUT_LENGTH];  /* RW;Range:[0,2047];Format:1.10 */
    td_s32  iso_ratio[OT_ISP_AUTO_ISO_NUM];         /* RW;Range:[0,2047];Format:1.10 */
    td_u32  y_sat_lut[OT_ISP_CA_YRATIO_LUT_LENGTH];   /* RW;Range:[0,2047];Format:1.10 */
} ot_isp_ca_lut;

【成员】

成员名称

描述

y_ratio_lut

CA模式,根据亮度Y调整色度UV的增益。

取值范围:[0,2047]

iso_ratio

CA模式,根据ISO值调整色度UV的增益。

取值范围:[0,2047]

y_sat_lut

CA模式,根据饱和度调整色度UV的增益。

取值范围:[0,2047]

【注意事项】

无。

【相关数据类型及接口】

无

ot_isp_cp_lut

【说明】

定义CP模式的属性,也就是色板的YUV值。

【定义】

typedef struct {
    td_u8   cp_lut_y[OT_ISP_CA_YRATIO_LUT_LENGTH]; /* RW;Range:[0,255];Format:8.0; */
    td_u8   cp_lut_u[OT_ISP_CA_YRATIO_LUT_LENGTH]; /* RW;Range:[0,255];Format:8.0; */
    td_u8   cp_lut_v[OT_ISP_CA_YRATIO_LUT_LENGTH]; /* RW;Range:[0,255];Format:8.0; */
} ot_isp_cp_lut;

【成员】

成员名称

描述

cp_lut_y

CP模式,根据亮度Y设置色板中的Y值。

取值范围:[0,255]

cp_lut_u

CP模式,根据亮度Y设置色板中的U值。

取值范围:[0,255]

cp_lut_v

CP模式,根据亮度Y设置色板中的V值。

取值范围:[0,255]

【注意事项】

Hi3516CV610 不支持。

【相关数据类型及接口】

无。

ot_isp_ca_attr

【说明】

定义颜色调整模块的属性,包含了CA模式属性和CP模式属性。

【定义】

typedef struct {
    td_bool enable;             /* RW;Range:[0x0,0x1];Format:1.0 */
    ot_isp_ca_type ca_cp_en;
    ot_isp_ca_lut  ca;
    ot_isp_cp_lut  cp;/* Not supported for Hi3516CV610 */
} ot_isp_ca_attr;

【成员】

成员名称

描述

enable

色彩调整模块的使能。

取值范围:[0,1]

ca_cp_en

色彩调整模块的工作模式。

ca

CA模式的属性。

cp

CP模式的属性。

【注意事项】

Hi3516CV610 不支持CP模式的属性。

【相关数据类型及接口】

无

CAC

功能描述

色差(Chromatic Aberration)是指光学上透镜无法将各种波长的光聚焦在同一点上的现象,是一种与镜头有关的缺陷,它产生的主要原因是不同波长的光具有不同的折射率(色散现象)。色差可以分为如下的两类:

  • 轴向色差(Axial Chromatic Aberration)

    • 透镜对于不同的光会有不同的折射率,因此不同颜色的光会聚焦在不同的焦平面上,大口径镜头容易产生这种色差,缩小光圈可以减弱轴向色差。
    • 人眼对于G通道更敏感,一般G通道可以正确对焦,从而引起R、B的模糊,造成高光区与低光区交界处出现明显的紫边表现。
  • 横向色差(Lateral Chromatic Aberration)

    • 透镜的放大倍数也与折射率有关,它使得不同波长光线的像高不同,即不同波长的光会聚焦在焦平面上不同的位置,会造成R、G、B 3通道具有不同的影像高度,在影像上产生色的错位。
    • 越偏离图像中心,横向色差越明显,一般横向色差表现为物体相对的两侧边缘出现不同的颜色,但具体表现为什么颜色与镜头组密切相关,不同的镜头组会表现出不同种类的颜色边缘。

    CAC模块的作用是对图像中的色差进行自动检测与校正,包含ACAC和LCAC两种色差校正算法,ACAC作为主要校正算法,不仅可以校正纵向色差,还可以校正横向色差;LCAC作为辅助校正算法,当色差严重时ACAC无法完全校正,可再结合作用于局部色差的LCAC进行校正。

图 1 色差图解

API参考

ss_mpi_isp_set_cac_attr

【描述】

设置紫边检测校正参数。

【语法】

td_s32 ss_mpi_isp_set_cac_attr(ot_vi_pipe vi_pipe, const ot_isp_cac_attr *cac_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

cac_attr

紫边检测校正参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_cac_attr

ss_mpi_isp_get_cac_attr

【描述】

获取紫边检测校正参数。

【语法】

td_s32 ss_mpi_isp_get_cac_attr(ot_vi_pipe vi_pipe, ot_isp_cac_attr *cac_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

cac_attr

紫边检测校正参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_cac_attr

数据类型

OT_ISP_CAC_EXP_RATIO_NUM

【说明】

定义CAC与曝光比联动时曝光比档位数。

【定义】

#define OT_ISP_CAC_EXP_RATIO_NUM       16

【注意事项】

无。

【相关数据类型及接口】

ot_isp_cac_lcac_auto_attr

OT_ISP_CAC_CURVE_NUM

【说明】

定义CAC高亮检测模块检测阈值的个数

【定义】

#define OT_ISP_CAC_CURVE_NUM             3

【注意事项】

无。

【相关数据类型及接口】

ot_isp_cac_lcac_attr

OT_ISP_CAC_THR_NUM

【说明】

定义CAC边缘检测阈值的个数

【定义】

#define OT_ISP_CAC_THR_NUM             2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_cac_acac_attr

ot_isp_cac_lcac_manual_attr

【说明】

定义LCAC手动属性。

【定义】

typedef struct {
    td_u8 de_purple_cr_strength;  
    td_u8 de_purple_cb_strength;  
} ot_isp_cac_lcac_manual_attr;

【成员】

成员名称

描述

de_purple_cr_strength

R通道的校正强度。取值范围:[0, 8]

de_purple_cb_strength

B通道的校正强度。取值范围:[0, 8]

【注意事项】

de_purple_cb_strength和de_purple_cr_strength矫正强度过大,可能出现边界不连续现象或闪烁现象。

【相关数据类型及接口】

ot_isp_cac_lcac_attr

ot_isp_cac_lcac_auto_attr

【说明】

定义LCAC自动属性。

【定义】

typedef struct {
    td_u8 de_purple_cr_strength[OT_ISP_CAC_EXP_RATIO_NUM];
    td_u8 de_purple_cb_strength[OT_ISP_CAC_EXP_RATIO_NUM];
} ot_isp_cac_lcac_auto_attr;

【成员】

成员名称

描述

de_purple_cr_strength[OT_ISP_CAC_EXP_RATIO_NUM]

自动模式下,R通道的校正强度。该数组与16组曝光比联动。

一般情况下,曝光比越大,配置的去紫边的强度值越大,对应关系如表1所示。若连续两档的处理强度不相等,则通过线性插值的方法确定两档中间某个曝光比值对应的处理强度。

取值范围:[0, 8]

de_purple_cb_strength[OT_ISP_CAC_EXP_RATIO_NUM]

自动模式下,B通道的校正强度。

取值范围:[0, 8]

表 1 de_purple_cr_strength[16]在不同曝光比情况下对应的设置值

de_purple_cr_strength

Hi3519DV500曝光比

Hi3516CV610曝光比

de_purple_cr_strength [0]

64

64

de_purple_cr_strength [1]

128

128

de_purple_cr_strength [2]

256

192

de_purple_cr_strength [3]

512

256

de_purple_cr_strength [4]

1024

320

de_purple_cr_strength [5]

1536

384

de_purple_cr_strength [6]

2048

448

de_purple_cr_strength [7]

3072

512

de_purple_cr_strength [8]

4096

640

de_purple_cr_strength [9]

5120

768

de_purple_cr_strength [10]

6144

896

de_purple_cr_strength [11]

8192

1024

de_purple_cr_strength [12]

10240

1280

de_purple_cr_strength [13]

12288

1536

de_purple_cr_strength [14]

14336

1792

de_purple_cr_strength [15]

16384

2048

【注意事项】

  • 曝光比是WDR模式下才有的概念,线性模式下获取的曝光比值总为1,因此在线性模式下虽然有联动,生效的总是第一组配置值。
  • 在built-in WDR模式下,本参数并不和曝光比联动,为与线性模式区分,生效的总是最后一组曝光比的配置值,即Hi3519DV500对应曝光比为16384的配置值,Hi3516CV610对应曝光比为2048的配置值。
  • 在WDR长帧模式下,曝光比生效的总是第一组配置,不会发生变化。在WDR自动长帧模式下,曝光比生效的情况跟实际生效的模式相同。

【相关数据类型及接口】

ot_isp_cac_lcac_attr

ot_isp_cac_lcac_attr

【说明】

LCAC校正属性。

【定义】

typedef struct {
    td_u16  purple_detect_range;
    td_u16  var_threshold;
    td_u16  r_detect_threshold[OT_ISP_CAC_CURVE_NUM];
    td_u16  g_detect_threshold[OT_ISP_CAC_CURVE_NUM];
    td_u16  b_detect_threshold[OT_ISP_CAC_CURVE_NUM];
    ot_isp_cac_lcac_manual_attr     lcac_manual;
    ot_isp_cac_lcac_auto_attr       lcac_auto;
} ot_isp_cac_lcac_attr;

【成员】

成员名称

描述

purple_detect_range

紫色检测的范围,该值控制的是r_detect_threshold,g_detect_threshold,b_detect_threshold这几个参数的生效情况。

值越大,越多非高亮区域的紫色被界定为紫边区域。purple_detect_range可能会引入紫边去除不平滑的问题,可以检查r_detect_threshold,g_detect_threshold,b_detect_threshold这几个参数的配置。

取值范围:[0,410]

var_threshold

边缘检测阈值

取值范围:[0, 4095]

r_detect_threshold[OT_ISP_CAC_CURVE_NUM]

高亮区域R分量阈值。

它分了3段,每一段的值表示高亮检测模块里面R分量阈值。实际中生效的值取决于purple_detect_range这个参数的大小。purple_detect_range越小,越倾向于r_detect_threshold第一段的值,purple_detect_range越大,越倾向于r_detect_threshold第3段的值。

取值范围:[0, 4095]

g_detect_threshold[OT_ISP_CAC_CURVE_NUM]

高亮区域G分量阈值。

它分了3段,每一段的值表示高亮检测模块里面G分量阈值。实际中生效的值取决于purple_detect_range这个参数的大小。purple_detect_range越小,越倾向于g_detect_threshold第一段的值,purple_detect_range越大,越倾向于g_detect_threshold第3段的值。

取值范围:[0, 4095]

b_detect_threshold[OT_ISP_CAC_CURVE_NUM]

高亮区域B分量阈值。

它分了3段,每一段的值表示高亮检测模块里面B分量阈值。实际中生效的值取决于purple_detect_range这个参数的大小。purple_detect_range越小,越倾向于b_detect_threshold第一段的值,purple_detect_range越大,越倾向于b_detect_threshold第3段的值。

取值范围:[0, 4095]

lcac_manual

LCAC的手动属性。

lcac_auto

LCAC的自动属性。

【注意事项】

  • 由于算法设计,LocalCAC矫正强度会受到Demosaic结果影响。因此将LocalCAC强度设为最小时依然会保留一定去紫边能力,对高光处紫边表现有一定影响。如果想完全关闭LocalCAC效果需直接将enable置为FALSE。
  • 有一些紫边比较严重的场景,R或者B容易出现饱和的情况,这时,b_detect_threshold或者r_detect_threshold在最大值附近有去除紫边不平滑的现象。需要跟de_purple_cr_strength和de_purple_cb_strength联合调整。

【相关数据类型及接口】

ot_isp_cac_attr

ot_isp_cac_acac_attr

【说明】

定义ACAC校正属性。

【定义】

typedef struct {
    ot_isp_cac_acac_auto_attr    acac_auto;
    ot_isp_cac_acac_manual_attr  acac_manual;
} ot_isp_cac_acac_attr;

【成员】

成员名称

描述

acac_auto

ACAC的自动属性。

acac_manual

ACAC的手动属性。

【注意事项】

无

【相关数据类型及接口】

ot_isp_cac_attr

ot_isp_cac_acac_manual_attr

【说明】

定义ACAC手动属性。

【定义】

typedef struct {
    td_u16  edge_threshold[OT_ISP_CAC_THR_NUM];
    td_u16  edge_gain;            
    td_u16  cac_rb_strength;
    td_u16  purple_alpha;      
    td_u16  edge_alpha;        
    td_u16  satu_low_threshold;
    td_u16  satu_high_threshold;
} ot_isp_cac_acac_manual_attr;

【成员】

成员名称

描述

edge_threshold[OT_ISP_CAC_THR_NUM]

ACAC的边缘检测阈值,两个阈值分别代表高低阈值,小于edge_thd[0]的为平坦区域,大于edge_thd[1]的是强边缘。

取值范围:[0,4095]

edge_gain

ACAC的边缘检测强度,该值越大,检测的边缘越多。

  • Hi3519DV500取值范围:[0, 1023]
  • Hi3516CV610取值范围:[0, 63]

cac_rb_strength

根据色差进行校正的强度,值越大表示校正越强。

  • Hi3519DV500取值范围:[0, 31]
  • Hi3516CV610取值范围:[0, 5]

purple_alpha

ACAC参考紫色的权重。该值越大,表示ACAC参考紫色进行校正色差的越多。

取值范围:[0, 63]

edge_alpha

ACAC参考边缘的权重。该值越大,表示ACAC参考边缘进行校正色差的越多。

取值范围:[0, 63]

satu_low_threshold

紫边检测饱和度范围下限。

  • Hi3519DV500取值范围:[0,4095]
  • Hi3516CV610取值范围:[0,255]

satu_high_threshold

紫边检测饱和度范围上限,取值范围:[0, 16383]

Hi3516CV610不支持。

【注意事项】

edge_threshold调小,容易出现边缘信息过多,导致带颜色的边缘出现颜色腐蚀而丢失,不建议这个参数调试太小。

【相关数据类型及接口】

无。

ot_isp_cac_acac_auto_attr

【说明】

定义色差校正自动属性。

【定义】

typedef struct {
    td_u16  edge_threshold[OT_ISP_CAC_THR_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16  edge_gain[OT_ISP_AUTO_ISO_NUM];
    td_u16  cac_rb_strength[OT_ISP_AUTO_ISO_NUM];
    td_u16  purple_alpha[OT_ISP_AUTO_ISO_NUM];
    td_u16  edge_alpha[OT_ISP_AUTO_ISO_NUM];  
    td_u16  satu_low_threshold[OT_ISP_AUTO_ISO_NUM];
    td_u16  satu_high_threshold[OT_ISP_AUTO_ISO_NUM];
} ot_isp_cac_acac_auto_attr;

【成员】

成员名称

描述

edge_threshold[OT_ISP_CAC_THR_NUM][OT_ISP_AUTO_ISO_NUM]

ACAC的边缘检测阈值,两个阈值分别代表高低阈值,小于edge_thd[0]的为平坦区域,大于edge_thd[1]的是强边缘。

取值范围:[0,4095]

edge_gain[OT_ISP_AUTO_ISO_NUM]

ACAC的边缘检测强度,该值越大,检测的边缘越多。

  • Hi3519DV500取值范围:[0, 1023]
  • Hi3516CV610取值范围:[0, 63]

cac_rb_strength[OT_ISP_AUTO_ISO_NUM]

根据色差进行校正的强度,值越大表示校正越强。

  • Hi3519DV500取值范围:[0, 31]
  • Hi3516CV610取值范围:[0, 5]

purple_alpha[OT_ISP_AUTO_ISO_NUM]

ACAC参考紫色的权重。该值越大,表示ACAC参考紫色进行校正色差的越多。

取值范围:[0, 63]

edge_alpha[OT_ISP_AUTO_ISO_NUM]

ACAC参考边缘的权重。该值越大,表示ACAC参考边缘进行校正色差的越多。

取值范围:[0, 63]

satu_low_threshold[OT_ISP_AUTO_ISO_NUM]

紫边检测饱和度范围下限。

  • Hi3519DV500取值范围:[0, 4095]
  • Hi3516CV610取值范围:[0, 255]

satu_high_threshold[OT_ISP_AUTO_ISO_NUM]

紫边检测饱和度范围上限,取值范围:[0, 16383]

Hi3516CV610不支持。

【注意事项】

无

【相关数据类型及接口】

无。

ot_isp_cac_attr

【说明】

定义紫边检测校正属性。

【定义】

typedef struct {
    td_bool enable;
    ot_op_mode op_type;
    td_u8   detect_mode;
    td_s16  purple_upper_limit;
    td_s16  purple_lower_limit;
    ot_isp_cac_acac_attr     acac_cfg;
    ot_isp_cac_lcac_attr     lcac_cfg;
} ot_isp_cac_attr;

【成员】

成员名称

描述

enable

紫边校正使能,取值范围:[0, 1],0:禁止,1:使能

op_type

CAC工作模式,取值范围:[0, 1],OP_MODE_AUTO:自动模式,OP_MODE_MANUAL:手动模式

detect_mode

紫边检测模式,取值范围:[0, 2],0:普通模式,1:宽紫边模式,2:宽边缘模式

Hi3516CV610不支持。

purple_upper_limit

紫色检测范围上限,取值范围:[-2048, 2047],其中purple_upper_limit必须大于purple_lower_limit。

  • Hi3519DV500取值范围:[-2048,2047]
  • Hi3516CV610取值范围:[-512,511]

purple_lower_limit

紫色检测范围下限,取值范围:[-2048,2047]

  • Hi3519DV500取值范围:[-2048,2047]
  • Hi3516CV610取值范围:[-512,511]

acac_cfg

ACAC属性

lcac_cfg

LCAC属性

【注意事项】

detect_mode建议调试为0模式,1模式下指针对紫边做了扩充,黄边,绿边等颜色边可能变差。

【相关数据类型及接口】

无。

WDR

功能描述

由于传统的图像传感器的动态范围比较低,因此,如果用传统的图像传感器拍摄高动态范围的场景,就会要么亮处过曝,丢失很多细节;要么暗处曝光不足,细节难以分辨。为了记录高动态范围场景的每一个细节,可以采用多次曝光图像合成的方法。

WDR算法的目的就是将从sensor输出的长短帧数据合成为一帧20bit的数据。如图1所示,长短帧数据是先缓存在DDR中,然后同时给WDR模块进行合成。合成的原则是择优选取,即对于比较亮的区域,采用短帧数据,而对于比较暗的区域,采用长帧数据。

图 1 WDR算法合成模型

  • 本模块可以通过ot_isp_wdr_merge_mode来决定合成的方式。若该值为0,则用传统的WDR功能合成;若该值为1,则打开Fusion功能,即用来改善Flicker现象;其中ot_isp_wdr_combine_attr结构体用来控制传统的WDR功能,而ot_isp_fusion_attr结构体用来控制Fusion功能。
  • 传统的WDR,包括以下功能:

    • 可以去除鬼影。通过ot_isp_wdr_combine_attr 来选择融合区域是采用短帧还是长帧;
    • 可以通过short_threshold 和 long_threshold 来控制选择长短帧的范围。即对于大于short_threshold的像素选择短帧,小于long_threshold 的像素选择长帧,而对于在两者之间的像素采用长短帧融合的方式;
    • 可以通过force_long_low_threshold和force_long_hig_threshold来控制运动区域选择长帧,对于亮度小于force_long_low_threshold的运动区域强制选择长帧,亮度大于force_long_hig_threshold的运动区域不强制选择长帧,对于亮度在两者之间的运动区域采用长短帧融合的方式;
    • 可以通过md_thr_low_gain,md_thr_hig_gain来控制运动检测;
    • 可以通过md_ref_flicker 来决定运动检测是否参考Flicker检测结果;
    • 可以通过short_expo_chk 来控制WDR融合是否检查短帧数据大小。
  • Fusion功能指适用于一般的室内场景(非宽动态)以及夜晚场景,用来改善工频闪问题。其中fusion_threshold [4]是用来控制Fusion选择时每帧的阈值。

API参考

ss_mpi_isp_set_fswdr_attr

【描述】

设置帧合成参数。

【语法】

td_s32 ss_mpi_isp_set_fswdr_attr(ot_vi_pipe vi_pipe, const ot_isp_wdr_fs_attr *fswdr_attr)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号

输入

fswdr_attr

帧合成参数

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV608不支持。

【举例】

无

【相关主题】

ss_mpi_isp_get_fswdr_attr

ss_mpi_isp_get_fswdr_attr

【描述】

获取帧合成参数。

【语法】

td_s32 ss_mpi_isp_get_fswdr_attr (ot_vi_pipe vi_pipe, ot_isp_wdr_fs_attr *fswdr_attr )

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号

输入

fswdr_attr

帧合成参数

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV608不支持。

【举例】

无

【相关主题】

ss_mpi_isp_set_fswdr_attr

数据类型

OT_ISP_WDR_RATIO_NUM

【说明】

定义用于gain插值的WDR曝光比档位数。

【定义】

#define OT_ISP_WDR_RATIO_NUM            10

【注意事项】

无。

【相关数据类型及接口】

ot_isp_fswdr_auto_attr

ot_isp_wdr_merge_mode

【说明】

定义ISP合成方式属性。

【定义】

typedef enum {
    OT_ISP_MERGE_WDR_MODE      = 0,
    OT_ISP_MERGE_FUSION_MODE   = 1,
    OT_ISP_MERGE_BUTT
} ot_isp_wdr_merge_mode;

【成员】

成员名称

描述

OT_ISP_MERGE_WDR_MODE

传统WDR模式。

OT_ISP_MERGE_FUSION_MODE

FUSION模式。

OT_ISP_MERGE_BUTT

无效值

【注意事项】

无。

【相关数据类型及接口】

ot_isp_wdr_fs_attr

ot_isp_fswdr_mdt_attr

【说明】

定义ISPFSWDR运动检测属性。

【定义】

typedef struct {
    td_bool short_expo_chk;
    td_u16  short_check_threshold;
    td_bool md_ref_flicker;
    td_u8   mdt_still_threshold;
    td_u8   mdt_full_threshold;
    td_u8   mdt_long_blend;
    ot_op_mode op_type;
    ot_isp_fswdr_manual_attr manual_attr;
    ot_isp_fswdr_auto_attr   auto_attr;
} ot_isp_fswdr_mdt_attr;

【成员】

成员名称

描述

short_expo_chk

运动检测是否检查短帧数据大小,

取值范围:[0, 0x1]

0:WDR融合时不检查短帧数据大小;

1:WDR融合时检查短帧数据大小。

short_check_threshold

短帧检查阈值。当短帧亮度小于该阈值时,WDR强制输出长帧。

取值范围:[0,0xFFF]

md_ref_flicker

运动检测是否参考Flicker检测结果。

取值范围:[0,0x1]

0:做运动判断时不参考Flicker检测结果;

1:做运动判断时参考Flicker检测结果。

Hi3516CV610不支持。

mdt_still_threshold

运动检测中判断为静止的阈值,当运动程度小于该阈值时,判断该像素点为静止

取值范围:[0,0xFE]

mdt_full_threshold

运动检测中判断为全运动的阈值,当运动程度大于该阈值时,判断该像素点为全运动。仅支持3合1WDR。

取值范围:[0,0xFE]

Hi3519DV500和Hi3516CV610不支持。

mdt_long_blend

运动区域叠加长帧的权重,当该值为0xFE时,运动区域全部选择长帧。

取值范围:[0,0xFE]

op_type

FSWDR工作类型。

  • OT_OP_MODE_AUTO:自动;
  • OT_OP_MODE_MANUAL:手动。

manual_attr

FSWDR手动参数。

auto_attr

FSWDR自动参数。

【注意事项】

无。

【相关数据类型及接口】

ot_isp_wdr_fs_attr

ot_isp_wdr_combine_attr

【说明】

定义ISPFSWDR combine属性。

【定义】

typedef struct {
    td_bool motion_comp;
    td_u16  short_threshold;
    td_u16  long_threshold;
    td_bool force_long;
    td_u16  force_long_low_threshold;
    td_u16  force_long_hig_threshold;
    ot_isp_fswdr_mdt_attr wdr_mdt;
} ot_isp_wdr_combine_attr;

【成员】

成员名称

描述

motion_comp

WDR运动补偿使能使能开关。

取值范围:[0, 0x1]

0:关闭;

1:使能。

在某些室内日光灯场景下,运动补偿会加重频闪带来的横条纹现象,此时可以关闭运动补偿。

short_threshold

短曝光门限值,超过门限值的图像数据只选择短曝光数据。

取值范围:[0,0xFFF]

long_threshold

长曝光门限值,低于门限值的图像数据只选择长曝光数据。

取值范围:[0, 0xFFF]

force_long

强制输出长帧使能。

取值范围:[0,0x1]

1:使能;

0:禁止。

force_long_low_threshold

强制输出长帧的低阈值,亮度低于该阈值的运动区域强制输出长帧

取值范围:[0x0, 0xFFF]

force_long_hig_threshold

强制输出长帧的高阈值,亮度大于该阈值的运动区域不强制输出长帧

取值范围:[0x0, 0xFFF]

wdr_mdt

FSWDR运动检测参数,具体参见ot_isp_fswdr_mdt_attr。

【注意事项】

注意force_long_low_threshold应小于等于force_long_hig_threshold, long_threshold应小于等于short_threshold。

【相关数据类型及接口】

ot_isp_wdr_fs_attr

ot_isp_fusion_attr

【说明】

定义ISP FUSION属性。

【定义】

typedef struct {
    td_bool fusion_blend_en;
    td_u8   fusion_blend_wgt;
    td_u16  fusion_threshold[OT_ISP_WDR_MAX_FRAME_NUM];
    td_bool  fusion_force_gray_en;
    td_u8   fusion_force_blend_threshold;
} ot_isp_fusion_attr;

【成员】

成员名称

描述

fusion_blend_en

Fusion的两种模式选择。取值范围:[0, 0x1]

0:fusion_pixel模式;

1:fusion_blend模式。

Hi3516CV610不支持。

fusion_blend_wgt

fusion_blend模式选择长短帧会根据插值出的G通道的值决定,fusion_blend_wgt决定了G通道插值接近局部均值还是局部最大值。其值越大,G通道插值越接近均值。

取值范围:[0, 0x10]

Hi3516CV610不支持。

fusion_threshold[OT_ISP_WDR_MAX_FRAME_NUM]

Fusion模式下超短帧,短帧,中帧,长帧的阈值,将输入数据限制在阈值以下。

取值范围:[0, 0xFFF]

fusion_force_gray_en

仅fusion_blend模式有效,打开时能避免部分曝光异常场景出现过曝区域偏粉的情况。

取值范围:[0, 0x1]

0:关闭;

1:使能。

Hi3516CV610不支持。

fusion_force_blend_threshold

仅fusion_blend模式有效,其值越大当前区域越有可能使用blend模式。

取值范围:[0, 0xF]

Hi3516CV610不支持。

【注意事项】

无。

【相关数据类型及接口】

ot_isp_wdr_fs_attr

ot_isp_wdr_wb_gain_pos

【说明】

定义白平衡增益在ISP的位置属性。

【定义】

typedef enum {
    OT_ISP_WDR_WBGAIN_IN_DG1         = 0,
    OT_ISP_WDR_WBGAIN_IN_WB          = 1,
    OT_ISP_WDR_WBGAIN_POS_BUTT
} ot_isp_wdr_wb_gain_pos;

【成员】

成员名称

描述

OT_ISP_WDR_WBGAIN_IN_DG1

0x0:白平衡增益配置在WDR合成前的DG1处

OT_ISP_WDR_WBGAIN_IN_WB

0x1:白平衡增益配置在WB处。

OT_ISP_WDR_WBGAIN_POS_BUTT

无效值。

【注意事项】

Hi3519DV500仅支持白平衡增益配置在WB处。

【相关数据类型及接口】

无

ot_isp_fswdr_manual_attr

【说明】

定义ISP FSWDR手动属性。

【定义】

typedef struct {
    td_u8 md_thr_low_gain;
    td_u8 md_thr_hig_gain;
} ot_isp_fswdr_manual_attr;

【成员】

成员名称

描述

md_thr_low_gain

手动模式下运动程度判断的低阈值系数。值越大,运动程度越小。取值范围:[0, 0xFF]

md_thr_hig_gain

手动模式下运动程度判断的高阈值系数。值越大,运动程度越小。取值范围:[0, 0xFF]

【注意事项】

注意md_thr_low_gain应小于等于md_thr_hig_gain。

【相关数据类型及接口】

ot_isp_fswdr_mdt_attr

ot_isp_fswdr_auto_attr

【说明】

定义ISP FSWDR自动属性。

【定义】

typedef struct {
    td_u8 md_thr_low_gain[OT_ISP_WDR_RATIO_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8 md_thr_hig_gain[OT_ISP_WDR_RATIO_NUM][OT_ISP_AUTO_ISO_NUM];
} ot_isp_fswdr_auto_attr;

【成员】

成员名称

描述

md_thr_low_gain[OT_ISP_WDR_RATIO_NUM][OT_ISP_AUTO_ISO_NUM]

自动模式下运动程度判断的低阈值系数。值越大,运动程度越小。

取值范围:[0, 0xFF]

md_thr_hig_gain[OT_ISP_WDR_RATIO_NUM][OT_ISP_AUTO_ISO_NUM]

自动模式下运动程度判断的高阈值系数。值越大,运动程度越小。

取值范围:[0, 0xFF]

表 1 md_thr_low_gain/md_thr_hig_gain 在不同曝光比下对应的设置

md_thr_low_gain/md_thr_hig_gain 下标

曝光比

[0]

128

[1]

256

[2]

512

[3]

1024

[4]

1536

[5]

2048

[6]

2560

Hi3516CV610不支持。

[7]

3072

Hi3516CV610不支持。

[8]

3584

Hi3516CV610不支持。

[9]

4096

Hi3516CV610不支持。

【相关数据类型及接口】

ot_isp_fswdr_mdt_attr

ot_isp_wdr_fs_attr

【说明】

定义ISP FSWDR属性。

【定义】

typedef struct {
    ot_isp_wdr_merge_mode   wdr_merge_mode;
    ot_isp_wdr_combine_attr wdr_combine;
    ot_isp_fusion_attr      fusion_attr;
} ot_isp_wdr_fs_attr;

【成员】

成员名称

描述

wdr_merge_mode

合成方式。

取值范围:[0,0x1]

0:传统的WDR合成;

1:Fusion合成。

在室内正常照度下存在工频闪时或者夜晚场景,建议采用Fusion合成,具体参见ot_isp_wdr_merge_mode。

wdr_combine

传统的WDR合成结构体,具体参见ot_isp_wdr_combine_attr。

fusion_attr

Fusion合成结构体,具体参见ot_isp_fusion_attr。

【注意事项】

WDR功能分为自动和手动:

  • op_type 为OT_OP_MODE_AUTO,使用自动WDR功能。
  • op_type 设置为OT_OP_MODE_MANUAL,使用手动WDR功能。

【相关数据类型及接口】

ss_mpi_isp_set_fswdr_attr

AWB量产标定工具

功能描述

CAUTION:

AWB量产标定结果通过修正AWB的静态白平衡系数实现个体差异校正。因此,用户通过MPI接口ot_isp_awb_attr配置static_wb修改静态白平衡系数,会导致量产标定失效。 AWB量产标定实现的是系统初始化时补偿AWB的静态白平衡系数,系统启动后不再变化。如果客户需要根据产品运行情况实时修改静态白平衡系数,可以通过MPI接口ot_isp_awb_attr配置static_wb。

AWB量产标定工具实现在量产过程中,针对不同机器的差异进行对AWB差异参数校正的功能。用户可以调用ss_mpi_isp_get_lightbox_gain接口,在色温范围4500K到6500K的均匀光源下的均匀背景环境下,获取图像中心若干个块的Rgain和Bgain的均值,即AWB增益,用于量产过程中矫正不同机器的AWB差异参数。

AWB差异参数的校正过程:

  1. 小规模试产过程中进行:取若干台样机,分别放置到量产标定环境(色温范围4500K到6500K,均匀光源,均匀背景),待AE稳定后(避免RGrGbB任一分量饱和),调用ss_mpi_isp_get_lightbox_gain接口,得到每台样机在量产标定环境的AWB增益值(请参考ot_isp_awb_calibration_gain结构体定义)。
  2. 小规模试产过程中进行:根据步骤1中若干台样机在量产标定环境的AWB增益,由用户自己确定其中一台机器作为GoldenSample。推荐基于GoldenSample机器完成AWB, CCM标定,同时GoldenSample作为AWB差异参数校准的基准。
  3. 取GoldenSample,采集多个色温下24色卡Raw数据,完成AWB、CCM标定流程(标定得到静态白平衡系数、普朗克曲线参数、色温曲线参数、多色温CCM矩阵系数等)。
  4. 将GoldenSample标定得到的AWB、CCM参数通过cmos.c文件的cmos_get_awb_default接口配置。定义cmos.c文件的GOLDEN_RGAIN=GoldenSample在量产标定环境得到的avg_r_gain,定义cmos.c文件的GOLDEN_BGAIN=GoldenSample在量产标定环境得到的avg_b_gain。
  5. 若用户不进行步骤1、2,则任意选取一台机器作为GoldenSample,完成步骤3、4的操作。
  6. 量产过程中进行:取任意一台需要矫正的机器作为Sample,重复步骤1,得到该台机器在量产标定环境的AWB增益。通过cmos.c中的sensor_set_init对Sample的AWB增益进行配置。(请参考ot_isp_init_attr和ot_isp_awb_calibration_gain结构体定义。ot_isp_init_attr. sample_r_gain =Sample在量产标定环境得到的avg_r_gain,ot_isp_init_attr sample_b_gain =Sample在量产标定环境得到的avg_b_gain)。
  7. AWB程序将会根据GoldenSample机器的AWB增益以及Sample机器的AWB增益实现对Sample机器的AWB差异参数的校正,改善机器个体之间的颜色一致性。

    图 1 AWB小规模试产过程中确定GoldenSample流程图

API参考

请参考2.2小节中的ss_mpi_isp_get_lightbox_gain。

数据类型

请参考2.3小节中的ot_isp_awb_calibration_gain。

ColorTone

功能描述

ColorTone提供色调调节接口,用户可通过该接口实现图像颜色偏红、偏绿、偏蓝等喜好调节。

API参考

ss_mpi_isp_set_color_tone_attr

【描述】

设置色调的参数。

【语法】

td_s32 ss_mpi_isp_set_color_tone_attr(ot_vi_pipe vi_pipe, const ot_isp_color_tone_attr *ct_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi Pipe号

输入

*ct_attr

色调的参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_color_tone_attr

ss_mpi_isp_get_color_tone_attr

【描述】

获取色调的参数。

【语法】

td_s32 ss_mpi_isp_get_color_tone_attr(ot_vi_pipe vi_pipe, ot_isp_color_tone_attr *ct_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi Pipe号

输入

ct_attr

色调的参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_color_tone_attr

数据类型

ot_isp_color_tone_attr:定义色调调整属性。

ot_isp_color_tone_attr

【说明】

定义色调调整属性。

【定义】

typedef struct {
    td_u16 red_cast_gain;
    td_u16 green_cast_gain;
    td_u16 blue_cast_gain;
} ot_isp_color_tone_attr;

【成员】

成员名称

描述

red_cast_gain

R通道增益,8bit小数精度。

取值范围:[0x100, 0x180]

green_cast_gain

G通道增益,8bit小数精度。

取值范围:[0x100, 0x180]

blue_cast_gain

B通道增益,8bit小数精度。

取值范围:[0x100, 0x180]

【注意事项】

ColorTone支持客户调节固定的颜色风格,与色温无关。

【相关数据类型及接口】

无

LDCI

功能描述

LDCI是局域自动对比度增强的简称(Local Dynamic Contrast Improvement)。该算法采用局域直方图均衡来增强图像局部对比度,提升暗区细节。

API参考

ss_mpi_isp_set_ldci_attr

【描述】

设置LDCI属性参数。

【语法】

td_s32 ss_mpi_isp_set_ldci_attr(ot_vi_pipe vi_pipe, const ot_isp_ldci_attr *ldci_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

ldci_attr

LDCI属性参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_ldci_attr

ss_mpi_isp_get_ldci_attr

【描述】

获取LDCI属性参数。

【语法】

td_s32 ss_mpi_isp_get_ldci_attr(ot_vi_pipe vi_pipe, ot_isp_ldci_attr *ldci_attr) ;

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

ldci_attr

LDCI属性参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_ldci_attr

数据类型

ot_isp_ldci_gauss_coef_attr

【说明】

定义GAUSS分布属性参数。

【定义】

typedef struct {
    td_u8 wgt;
    td_u8 sigma;
    td_u8 mean;
} ot_isp_ldci_gauss_coef_attr;

【成员】

成员名称

描述

wgt

Gauss分布曲线最大值

取值范围:[0x0, 0xFF]

sigma

Gauss分布曲线均方差,取值范围:[0x1, 0xFF]

mean

Gauss分布曲线数学期望,取值范围:[0x0, 0xFF]

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_ldci_he_wgt_attr

【说明】

定义直方图均衡与原图融合权重属性参数。

【定义】

typedef struct {
    ot_isp_ldci_gauss_coef_attr  he_pos_wgt;
    ot_isp_ldci_gauss_coef_attr  he_neg_wgt;
} ot_isp_ldci_he_wgt_attr;

【成员】

成员名称

描述

he_pos_wgt

直方图均衡结果与原图融合权重曲线,可根据原图亮度控制提亮程度;曲线呈高斯分布,横坐标为亮度。

he_neg_wgt

直方图均衡结果与原图融合权重曲线,可根据原图亮度控制减暗程度;曲线呈高斯分布,横坐标为亮度。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_ldci_manual_attr

【说明】

定义LDCI手动模式属性参数。

【定义】

typedef struct {
    ot_isp_ldci_he_wgt_attr  he_wgt;
    td_u16                blc_ctrl;
} ot_isp_ldci_manual_attr;

【成员】

成员名称

描述

he_wgt

手动模式下控制直方图均衡结果与原图融合权重曲线,可根据原图亮度分开控制提亮减暗程度;曲线呈高斯分布,横坐标为亮度。

blc_ctrl

手动模式下暗区增益控制强度,用于抑制暗区噪声,取值范围:[0x0, 0x1FF]

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_ldci_auto_attr

【说明】

定义LDCI自动模式下属性参数。

【定义】

typedef struct {
    ot_isp_ldci_he_wgt_attr  he_wgt[OT_ISP_AUTO_ISO_NUM];
    td_u16                 blc_ctrl[OT_ISP_AUTO_ISO_NUM];
} ot_isp_ldci_auto_attr;

【成员】

成员名称

描述

he_wgt[OT_ISP_AUTO_ISO_NUM]

自动模式下控制直方图均衡结果与原图融合权重曲线,可根据原图亮度分开控制提亮减暗程度;曲线呈高斯分布,横坐标为亮度。

blc_ctrl[OT_ISP_AUTO_ISO_NUM]

自动模式下暗区增益控制强度,用于抑制暗区噪声,取值范围:[0x0, 0x1FF]

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_ldci_attr

【说明】

定义LDCI属性参数。

【定义】

typedef struct {
    td_bool                 enable;
    td_u8                   gauss_lpf_sigma;
    ot_op_mode              op_type;
    ot_isp_ldci_manual_attr manual_attr;
    ot_isp_ldci_auto_attr  auto_attr;
    td_u16                  tpr_incr_coef;
    td_u16                  tpr_decr_coef;
} ot_isp_ldci_attr;

【成员】

成员名称

描述

enable

LDCI功能使能开关。

gauss_lpf_sigma

LPF滤波强度,其值越小说明LDCI作用越局域,取值范围:[0x1, 0xFF]

op_type

LDCI工作类型。

  • OT_OP_MODE_AUTO:自动;
  • OT_OP_MODE_MANUAL:手动。

默认值为OT_OP_MODE_AUTO。

manual_attr

LDCI手动参数。

auto_attr

LDCI自动参数。

tpr_incr_coef

画面由暗到亮变化时域滤波系数,值越大,当前帧像素比重越大,取值范围:[0x0, 0x100]

tpr_decr_coef

画面由亮到暗变化时域滤波系数,值越大,当前帧像素比重越大,取值范围:[0x0, 0x100]

【注意事项】

无

【相关数据类型及接口】

无

Radial Crop

功能描述

Hi3519DV500是在YUV域对图像进行radial crop操作,将设定半径之外的地方直接拉黑掉。

API参考

ss_mpi_isp_set_rc_attr

【描述】

设定Radial Crop 属性。

【语法】

td_s32 ss_mpi_isp_set_rc_attr(ot_vi_pipe vi_pipe, const ot_isp_rc_attr *rc_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Pipe号。

输入

rc_attr

Radial Crop属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持。

【举例】

无。

【相关主题】

ss_mpi_isp_get_rc_attr

ss_mpi_isp_get_rc_attr

【描述】

获取Radial Crop属性。

【语法】

td_s32 ss_mpi_isp_get_rc_attr (ot_vi_pipe vi_pipe, ot_isp_rc_attr *rc_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Pipe号。

输入

rc_attr

Radial Crop 属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持。

【举例】

无。

【相关主题】

ss_mpi_isp_set_rc_attr

数据类型

ot_isp_rc_attr:定义ISP Radial Crop属性。

ot_isp_rc_attr

【说明】

定义ISP Radial Crop 属性。

【定义】

typedef struct {
    td_bool enable;
    ot_point center_coord;
    td_u32 radius;
} ot_isp_rc_attr;

【成员】

成员名称

描述

enable

Radial Crop 功能开关。

取值范围:[0,1]

0:禁止;

1:使能。

默认值0。

center_coord

中心点的坐标配置信息。

  • 取值范围:

    x:[0, width - 1]

    y:[0, height - 1]

  • 默认值:

    x:width/2

    y:height/2

radius

Radial Crop 的半径,图像到中心点的距离大于半径的区域直接拉黑。

取值范围:[0, ]

默认值

【注意事项】

  • 中心点的坐标以及半径的配置值可以直接采用fisheye算法的标定结果,分辨率切换之后,对应的中心点坐标与半径也要随之更新,以避免图像的不正常。
  • 当VI配置输出是raw时,需要将radial crop使能关闭,否则会出现异常。需要注意在使用vi_chn_dump的dump工具时,如果需要输出after wdr之后的raw,需要关闭radial crop功能。
  • Hi3516CV610不支持。

【相关数据类型及接口】

CSC

功能描述

色彩空间转换模块(Color Space Conversion),用来将RGB信号转换成符合标准的YUV信号。

API参考

ss_mpi_isp_set_csc_attr

【描述】

设定CSC(色彩空间转换)属性。

【语法】

td_s32 ss_mpi_isp_set_csc_attr (ot_vi_pipe vi_pipe, const ot_isp_csc_attr *csc_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Pipe号。

输入

csc_attr

CSC属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_csc_attr

ss_mpi_isp_get_csc_attr

【描述】

获取CSC(色彩空间转换)属性。

【语法】

td_s32 ss_mpi_isp_get_csc_attr (ot_vi_pipe vi_pipe, ot_isp_csc_attr *csc_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Pipe号。

输入

csc_attr

CSC属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_csc_attr

数据类型

OT_ISP_CSC_DC_NUM

【说明】

YUV偏移量的个数。

【定义】

#define OT_ISP_CSC_DC_NUM               3

【注意事项】

无。

【相关数据类型及接口】

ot_isp_csc_matrx

OT_ISP_CSC_COEF_NUM

【说明】

YUV转换系数的个数。

【定义】

#define OT_ISP_CSC_COEF_NUM             9

【注意事项】

无。

【相关数据类型及接口】

ot_isp_csc_matrx

ot_isp_csc_attr

【说明】

定义ISP 色彩空间转换模块属性。

【定义】

typedef struct {
    td_bool enable;             /* RW; Range:[0, 1];Format:1.0; Enable/Disable CSC Function */
    ot_color_gamut color_gamut; /* RW; Range: [0, 3]; Color gamut type; Not Support COLOR_GAMUT_BT2020 */
    td_u8   hue;              /* RW; Range:[0, 100];Format:8.0; Csc Hue Value */
    td_u8   luma;             /* RW; Range:[0, 100];Format:8.0; Csc Luma Value */
    td_u8   contr;            /* RW; Range:[0, 100];Format:8.0; Csc Contrast Value */
    td_u8   satu;             /* RW; Range:[0, 100];Format:8.0; Csc Saturation Value */
    td_bool limited_range_en; /* RW; Range: [0x0, 0x1];
                                 Enable/Disable: Enable Limited range output mode(default full range output) */
    td_bool ext_csc_en;       /* RW; Range: [0x0, 0x1]; Enable/Disable: Enable extended luma range */
    td_bool ct_mode_en;       /* RW; Range: [0x0, 0x1]; Enable/Disable: Enable ct mode */
    ot_isp_csc_matrx csc_magtrx;     /* RW; Color Space Conversion matrix */
} ot_isp_csc_attr;

【成员】

成员名称

描述

enable

CSC 功能开关。

取值范围:[0,1]

0:禁止;

1:使能。

默认值1。

color_gamut

色彩空间类型枚举。

取值范围:[0, 3]

默认值OT_COLOR_GAMUT_BT709。Hi3519DV500/Hi3516CV610不支持OT_COLOR_GAMUT_BT2020。

hue

目标YUV空间色调。

取值范围:[0,100],默认值50。

luma

目标YUV空间亮度

取值范围:[0,100],默认值50。

contr

目标YUV空间对比度

取值范围:[0,100],默认值50。

satu

目标YUV空间饱和度

取值范围:[0,100],默认值50。

limited_range_en

目标YUV空间动态范围选择。

取值范围:[0,1]

0:输出为Full Range;

1:输出为Limited Range。

默认值0。

ext_csc_en

亮度调整模式选择(与luma配合)。

取值范围:[0, 1]

1: 表示luma可以调节更宽的亮度变化

默认值1。

ct_mode_en

输出的对比度调整模式选择

取值范围:[0, 1]

1:改变contr画面亮度不会变化

默认值1。

csc_magtrx

色彩空间转换矩阵系数。

【注意事项】

  • enColorGamut中可选择OT_COLOR_GAMUT_BT601,OT_COLOR_GAMUT_BT709,OT_COLOR_GAMUT_BT2020,OT_COLOR_GAMUT_USER四种模式。Hi3519DV500/Hi3516CV610不支持OT_COLOR_GAMUT_BT2020模式。在选择OT_COLOR_GAMUT_USER模式下,可根据实际情况自由设定csc_magtrx的参数来进行色彩空间转换。
  • 如果将contr值调小(20左右)时,在平坦区域容易出现等高线,出现的原因是因为contr值调小后,会影响画面的动态范围,导致原本0~255(或者10bit 0~1023)的动态范围缩小到原来的20%左右,因此在平坦区域如果有亮度变化,则非常容易产生量化误差出现等高线。
  • Hue,luma,contr,satu参数实现的色调,亮度,对比度,饱和度调节的功能是在当前的色彩空间转换矩阵基础上进行的。当这些参数不在默认值时,会对YUV值的范围产生影响,即VI输出端的YUV数据不会准确的在Full range或Limited range规定的值的范围内。建议limited_range_en配置为Full range。
  • CSC后的模块,比如Sharpen,LDCI,CA等模块,会对YUV数据进行处理。当开启这些模块时,VI输出端的YUV数据不会准确的在Full range或Limited range规定的值的范围内。建议limited_range_en配置为Full range。
  • 当需要系统最终输出的YUV数据在Limited range规定的数值范围内时,可以将CSC的limited_range_en配置为Full range。设置ot_nr_v1中的limit_range_en参数,在VPSS输出端得到Limited range的YUV数据。ot_nr_v1的定义请参见《Hi35xxVxxx 3DNR参数配置说明》。
  • 当系统接入YUV数据,需要通过CSC进行YUV和RGB数据之间的转换时,可以按照需要将CSC的limited_range_en配置为Full range或Limited range,或者配置ot_isp_csc_matrx参数。
  • 当调节CSC的hue,luma,contr,satu等参数观察颜色变化,觉得变化较慢时,需要注意3DNR的tfs参数是否调节到12以下。tfs设置12以上的时候会有比较强的帧间延时,导致有CSC参数响应不及时的感觉。

【相关数据类型及接口】

ot_isp_csc_matrx

【说明】

定义色彩空间转换矩阵系数。

【定义】

typedef struct {
    td_s16 csc_in_dc[OT_ISP_CSC_DC_NUM]; /* RW; Range:[-1024, 1023]; Format: 11.0;
                                         Input dc component for csc matrix */
    td_s16 csc_out_dc[OT_ISP_CSC_DC_NUM]; /* RW; Range:[-1024, 1023]; Format: 11.0;
                                         Output dc component for csc matrix */
    td_s16 csc_coef[OT_ISP_CSC_COEF_NUM]; /* RW; Range:[-4096, 4095]; Format: 5.10; 
                                          3x3 coefficients for csc matrix */
} ot_isp_csc_matrx;

【成员】

成员名称

描述

csc_in_dc[OT_ISP_CSC_DC_NUM]

CSC转换矩阵,输入直流分量。

取值范围:[-1024,1023]

csc_out_dc[OT_ISP_CSC_DC_NUM]

CSC转换矩阵,输出直流分量。

取值范围:[-1024,1023]

csc_coef[OT_ISP_CSC_COEF_NUM]

CSC转换矩阵,3x3系数。

取值范围:[-4096, 4095]

【注意事项】

无

【相关数据类型及接口】

ot_isp_csc_attr

CLUT

功能描述

COLOR_3D_LUT是利用线性RGB空间17x17x17分格的3D LUT实现复杂的颜色调整操作,比如亮度的调整,饱和度的调整,色调的调整。阴影区域,中间亮度区域,高亮区域分别调整。

它将像素的RGB信号的bit高位用来查找像素点位于表中的位置,利用RGB信号的bit低位用来在表的一个方格中插值出精确的偏移量。将偏移量应用于原像素值,得到调整后的最终像素值,从而使颜色得到调节。

图 1 COLOR_3D_LUT示意图

该单元通过查表的方式,获取R、G以及B分别的调节量ΔR、ΔG和ΔB。

总共需要三类查找表,R、G和B各一张表。

Hi3519DV500:大小分别为R:17x17x17x10bit,G:17x17x17x10bit,B:17x17x17x10bit,即R的调节量为[-511,511],G的调节量为[-511,511],B的调节量为[-511,511]。

CLUT调节量处理的数据是[0, 4095]范围的12bit线性RGB数据。

API参考

ss_mpi_isp_set_clut_attr

【描述】

设置CLUT属性。

【语法】

td_s32 ss_mpi_isp_set_clut_attr (ot_vi_pipe vi_pipe, const ot_isp_clut_attr *clut_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

clut_attr

CLUT属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

头文件:ot_common_isp.h、ss_mpi_isp.h

库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持。

【举例】

无。

【相关主题】

ss_mpi_isp_get_clut_attr

ss_mpi_isp_get_clut_attr

【描述】

获取CLUT属性。

【语法】

td_s32 ss_mpi_isp_get_clut_attr (ot_vi_pipe vi_pipe, ot_isp_clut_attr *clut_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

clut_attr

CLUT属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

头文件:ot_common_isp.h、ss_mpi_isp.h

库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持。

【举例】

无。

【相关主题】

ss_mpi_isp_set_clut_attr

ss_mpi_isp_set_clut_coeff

【描述】

设置CLUT系数。

【语法】

td_s32 ss_mpi_isp_set_clut_coeff(ot_vi_pipe vi_pipe, const ot_isp_clut_lut *clut_lut);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

clut_lut

CLUT系数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持

【举例】

无

【相关主题】

ss_mpi_isp_get_clut_coeff

ss_mpi_isp_get_clut_coeff

【描述】

获取CLUT系数。

【语法】

td_s32 ss_mpi_isp_get_clut_coeff (ot_vi_pipe vi_pipe, ot_isp_clut_lut *clut_lut);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

clut_lut

CLUT系数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持

【举例】

无

【相关主题】

ss_mpi_isp_set_clut_coeff

数据类型

OT_ISP_CLUT_LUT_LENGTH

【说明】

CLUT表转换成芯片专用格式后的存储长度。

【定义】

#define OT_ISP_CLUT_LUT_LENGTH                    5508

【注意事项】

无。

【相关数据类型及接口】

ot_isp_clut_lut

ot_isp_clut_attr

【说明】

定义CLUT的增益。

【定义】

typedef struct {
    td_bool enable; /* RW; Range:[0, 1];Format:1.0; Enable/Disable CLUT Function */
    td_u32  gain_r; /* RW; Range:[0, 4095];Format:12.0 */
    td_u32  gain_g; /* RW; Range:[0, 4095];Format:12.0 */
    td_u32  gain_b; /* RW; Range:[0, 4095];Format:12.0 */
} ot_isp_clut_attr;

【成员】

成员名称

描述

enable

CLUT使能,取值范围:[0,1]

gain_r

R通道增益,取值范围:[0,4095]

gain_g

G通道增益,取值范围:[0,4095]

gain_b

B通道增益,取值范围:[0,4095]

【注意事项】

  • 增益设定为512时,相当于增益是1.0。增益和LUT查表得出的调整量相乘,得到实际调整量。实际调整量和输入RGB值相加得到输出RGB值。Hi3519DV500建议默认增益为512。
  • Hi3516CV610不支持

【相关数据类型及接口】

无

ot_isp_clut_lut

【说明】

定义CLUT的查找表。

【定义】

typedef struct {
    td_u32 lut[OT_ISP_CLUT_LUT_LENGTH];
} ot_isp_clut_lut;

【成员】

成员名称

描述

lut

查找表

Hi3519DV500取值范围:[0, 1073741823]

【注意事项】

由于采用了压缩存储的格式,这个表的内容会由PQTools生成。一般用户在PQTools界面调试后可以生成这个格式的LUT,不需要关心数据格式。

LUT内容在PQTools生成时符合取值范围的规定。如果客户自行生成的LUT内容超出取值范围,通过接口可以配置,但是会导致图像颜色异常。所以需要按照下面规则来生成LUT。

  • 对于Hi3519DV500的用户:

    如果用户不使用PQTools,需要将自行生成的3D LUT表加载到芯片。需要做的工作是将17x17x17x3的LUT放入8x3的LUT,然后将8x3的LUT紧凑排列填入长度为5508的LUT。

    17x17x17x3的LUT每个元素的范围为[-511, 511],使用10bit有符号数表示。

    将17x17x17x3的LUT取成8x3的LUT的过程为:

    三维表的下标为偶数时定义为0,下标为奇数时定义为1。R[i][j][k],G[i][j][k],B[i][j][k]中的i代表r的分格,j代表b的分格,k代表g的分格,即ijk代表三维表的地址坐标,对应的是rbg的排列顺序。R[i][j][k],G[i][j][k],B[i][j][k]的值是deltaR,deltaG,deltaB的值。用C代表RGB,真值表如下所示:

    上图对应的伪代码如下所示:

    for(k = 0; k < 17; k++)
             {
                      for(j = 0; j < 17; j++)
                      {
                                for(i = 0; i < 17; i++)
                                {
                                         switch((i&1) + ((j&1)<<1) + ((k&1)<<2))
                                         {
                                         case 0:R0[n0]=R[i][j][k];
                              G0[n0]=G[i][j][k];
                              B0[n0]=B[i][j][k];
                                         case 1:R1[n1]=R[i][j][k];
                              G1[n1]=G[i][j][k];
                              B1[n1]=B[i][j][k];
                                         case 2:R2[n2]=R[i][j][k];
                              G2[n2]=G[i][j][k];
                              B2[n2]=B[i][j][k];
                                         case 3:R3[n3]=R[i][j][k];
                              G3[n3]=G[i][j][k];
                              B3[n3]=B[i][j][k];
                                         case 4:R4[n4]=R[i][j][k];
                              G4[n4]=G[i][j][k];
                              B4[n4]=B[i][j][k];
                                         case 5:R5[n5]=R[i][j][k];
                              G5[n5]=G[i][j][k];
                              B5[n5]=B[i][j][k];
                                         case 6:R6[n6]=R[i][j][k];
                              G6[n6]=G[i][j][k];
                              B6[n6]=B[i][j][k];
                                         case 7:R7[n7]=R[i][j][k];
                              G7[n7]=G[i][j][k];
                              B7[n7]=B[i][j][k];
                                          }
                                }
                     }
           }
    

    用C代表RGB,取成的8个LUT分别为c0[729]、c1[648]、c2[648]、c3[576]、c4[648]、c5[576]、c6[576]、c7[512]。

    下面的描述用_0代表一维数组c0[729]第0个数据,_1代表一维数组c0[729]第1个数据。

    8x3的LUT按照每3个数据紧凑排列到1个32bit数据内的格式定义为:

    {2’b00,B0_0,G0_0,R0_0},

    {2’b00,B1_0,G1_0,R1_0},

    {2’b00,B2_0,G2_0,R2_0},

    {2’b00,B3_0,G3_0,R3_0},

    {2’b00,B0_1,G0_1,R0_1},

    {2’b00,B1_1,G1_1,R1_1},

    {2’b00,B2_1,G2_1,R2_1},

    {2’b00,B3_1,G3_1,R3_1},

    {......},

    上述格式可视化如下图所示:

    整体看如下图所示:

    8x3的LUT按照c0[729] 占用空间729 x 4 = 2916和c4[648]占用空间648 x 4 = 2592连续存储成一个长度为5508的一维数组。

  • Hi3516CV610不支持

【相关数据类型及接口】

无

获取ISP模块虚拟地址

功能描述

从地址空间来分,当前ISP模块可分为五个部分:AE库、AWB库、AF库、ISP物理寄存器模块、ISP其他模块。

API参考

ss_mpi_isp_get_isp_reg_attr:获取ISP基地址属性。

ss_mpi_isp_get_isp_reg_attr

【描述】

获取ISP基地址属性。

【语法】

td_s32 ss_mpi_isp_get_isp_reg_attr(ot_vi_pipe vi_pipe, ot_isp_reg_attr *isp_reg_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

isp_reg_attr

ISP模块虚拟地址属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

当前ISP模块虚拟地址不提供AF模块的虚拟地址。

【举例】

无

【相关主题】

无

数据类型

ot_isp_reg_attr:定义ISP各子模块寄存器的虚拟地址属性。

ot_isp_reg_attr

【说明】

定义ISP各子模块寄存器的虚拟地址属性。

【定义】

typedef struct {
    td_void *isp_ext_reg_addr;
    td_u32  isp_ext_reg_size;
    td_void *ae_ext_reg_addr;
    td_u32  ae_ext_reg_size;
    td_void *awb_ext_reg_addr;
    td_u32  awb_ext_reg_size;
} ot_isp_reg_attr;

【成员】

成员名称

描述

isp_ext_reg_addr

ISP外部(虚拟)寄存器模块对应的起始虚拟地址。

isp_ext_reg_size

ISP外部(虚拟)寄存器模块对应的大小。

ae_ext_reg_addr

ISP AE库对应的起始虚拟地址。

ae_ext_reg_size

ISP AE库对应的大小。

awb_ext_reg_addr

ISP AWB库对应的起始虚拟地址。

awb_ext_reg_size

ISP AWB库对应的大小。

【注意事项】

无

【相关数据类型及接口】

ss_mpi_isp_get_isp_reg_attr

查询内部状态信息

功能描述

Inner State Information接口的作用是输出数个与ISO相关的参数其逻辑寄存器当前配置的真实值。

用户在调试过程中可以通过MPI接口读取这些真实值参数,观察参数强度是否正确配置。通过该接口用户只可以获取参数,而非操作改变该寄存器里的值。

API参考

ss_mpi_isp_query_inner_state_info:获取内部寄存器实际强度配置信息和内部状态。

ss_mpi_isp_query_inner_state_info

【描述】

获取内部寄存器实际强度配置和内部状态。

【语法】

td_s32 ss_mpi_isp_query_inner_state_info(ot_vi_pipe vi_pipe, ot_isp_inner_state_info *inner_state_info);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

inner_state_info

内部寄存器实际配置信息和状态值。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

  • 当用户切换分辨率或者在线性模式和WDR模式之间切换时候,可以调用这个接口来查询切换是否已经完成。
  • 分辨率/帧率切换时,只查询 res_switch_finish标记。模式切换时,只查询 wdr_switch_finish标记。
  • 业务正常运转时,在不改变WDR模式的情况下,合法调用ss_mpi_isp_set_pub_attr,查询到的wdr_switch_finish始终为1。

【举例】

无

【相关主题】

无

数据类型

ot_isp_inner_state_info:定义内部寄存器实际配置信息参数。

ot_isp_inner_state_info

【说明】

定义内部寄存器实际配置信息参数。

【定义】

typedef struct {
    td_u16 texture_strength[OT_ISP_SHARPEN_GAIN_NUM];
    td_u16 edge_strength[OT_ISP_SHARPEN_GAIN_NUM];
    td_u16 texture_freq;
    td_u16 edge_freq;
    td_u8  over_shoot;
    td_u8  under_shoot;
    td_u8  shoot_sup_strength;
    td_u8   nr_lsc_ratio;
    td_u16  coarse_strength[OT_ISP_BAYER_CHN_NUM];
    td_u8   wdr_frame_strength[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u8   fine_strength;
    td_u16  coring_wgt;
    td_u16 dehaze_strength_actual;
    td_u16 drc_strength_actual;
    td_u32 wdr_exp_ratio_actual[OT_ISP_WDR_MAX_FRAME_NUM - 1];
    td_bool wdr_switch_finish;
    td_bool res_switch_finish;
    td_u16  black_level_actual[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
    td_u16  sns_black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
} ot_isp_inner_state_info;

【成员】

成员名称

描述

texture_strength[OT_ISP_SHARPEN_GAIN_NUM]

无方向的细节纹理的锐化强度。

取值范围:[0, 4095]

edge_strength[OT_ISP_SHARPEN_GAIN_NUM]

带方向的边缘的锐化强度。

取值范围:[0, 4095]

texture_freq

图像的无方向细节纹理的增强频段控制。

取值范围:[0, 4095]

edge_freq

图像的带方向的边缘的增强频段控制。

取值范围:[0, 4095]

over_shoot

图像的overshoot(锐化后的白边白点)的强度。

取值范围:[0, 127]

under_shoot

图像的undershoot(锐化后的黑边黑点)的强度。

取值范围:[0, 127]

shoot_sup_strength

图像overshoot和undershoot的抑制强度。用于在保证清晰度不明显下降的前提下,抑制锐化后的overshoot和undershoot的宽度和幅度。

取值范围:[0, 255]

nr_lsc_ratio

NR 参考LSC增益比例。

取值范围:[0x0, 0xF]

coarse_strength[OT_ISP_BAYER_CHN_NUM]

线性模式下亮度噪声整体去噪强度,四通道强度独立可调,值越大,亮噪去噪强度越大。

取值范围:[0, 0x360]

wdr_frame_strength[OT_ISP_WDR_MAX_FRAME_NUM]

WDR模式下每一融合帧的全局亮度去噪强度。

取值范围:[0, 0x40]

fine_strength

原始像素和去噪结果的融合比例,值越大,亮噪去除强度越大。

取值范围:[0x0, 0x80]

coring_wgt

原始像素回叠强敌,值越大,原始像素回叠越多。

取值范围:[0x0, 0xC80]

dehaze_strength_actual

去雾强度值

drc_strength_actual

DRC 强度生效值。

取值范围:[0x0, 0x3FF]

wdr_exp_ratio_actual[OT_ISP_WDR_MAX_FRAME_NUM - 1]

WDR 曝光比

2to1时用wdr_exp_ratio_actual[0]表示曝光比

3to1时用wdr_exp_ratio_actual[0]及wdr_exp_ratio_actual[1]表示曝光比

4to1时用wdr_exp_ratio_actual[0],wdr_exp_ratio_actual[1]

wdr_exp_ratio_actual[2]分别表示曝光比。

wdr_switch_finish

WDR切换是否完成标志。

res_switch_finish

分辨率切换是否完成标志。

black_level_actual[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]

实际生效的黑电平的值,表示R、Gr、Gb、B各分量的黑电平。

取值范围:[0x0, 0x3FFF]

sns_black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]

Sensor的黑电平值,表示R、Gr、Gb、B各分量的黑电平。

取值范围:[0x0, 0x3FFF]

【注意事项】

  • 使用user_black_level_en后,black_level_actual为user_black_level;不使能user_black_level_en时,black_level_actual与sns_black_level的值是一致的。
  • wdr_exp_ratio_actual是长短帧实际的曝光比,和wdr融合使用的曝光比不是同一个数值。因为sensor曝光精度问题,wdr_exp_ratio_actual的值可能会与wdr_exp_ratio有细微的偏差,有可能会超出wdr_exp_ratio的限制范围,这是符合预期的。

【相关数据类型及接口】

ss_mpi_isp_query_inner_state_info

DNG

功能描述

DNG (Digital Negative)是Adobe开发的一种开放的raw image file format,里面使用的tag基本上都定义在TIFF或者TIFF/EP中,在DNG Sepcification中只是定义或者建议了数据的组织方式,颜色空间的转换等等。DNG spec标准文档来定义和确定具体的dng数据格式,对标准文档中定义的标签和规定,根据实际应用场景和客户需求选择必要的最小集合实现。将raw数据封装成标准dng文件,可以由dng解析工具进行解析。

API参考

ss_mpi_isp_get_dng_image_static_info

【描述】

获取DNG静态信息。

【语法】

td_s32 ss_mpi_isp_get_dng_image_static_info(ot_vi_pipe vi_pipe , ot_isp_dng_image_static_info *dng_image_static_info);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe 号

输入

dng_image_static_info

DNG静态信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

无

ss_mpi_isp_set_dng_color_param

【描述】

设置DNG颜色信息。

【语法】

td_s32 ss_mpi_isp_set_dng_color_param(ot_vi_pipe vi_pipe , const ot_isp_dng_color_param *dng_color_param);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

dng_color_param

DNG颜色信息

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

无

ss_mpi_isp_get_dng_color_param

【描述】

获取DNG颜色信息。

【语法】

td_s32 ss_mpi_isp_get_dng_color_param(ot_vi_pipe vi_pipe, ot_isp_dng_color_param *dng_color_param);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

dng_color_param

DNG颜色信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

无

数据类型

OT_CFACOLORPLANE

【说明】

滤色阵列的数目。

【定义】

#define OT_CFACOLORPLANE           3

【注意事项】

无。

【相关数据类型及接口】

ot_isp_dng_raw_format

ot_isp_dng_image_static_info

【说明】

定义DNG静态格式信息。

【定义】

typedef struct {
    ot_isp_dng_raw_format dng_raw_format;
    ot_isp_dng_srational color_matrix1[OT_ISP_CCM_MATRIX_SIZE];
    ot_isp_dng_srational color_matrix2[OT_ISP_CCM_MATRIX_SIZE];
    ot_isp_dng_srational camera_calibration1[OT_ISP_CCM_MATRIX_SIZE];
    ot_isp_dng_srational camera_calibration2[OT_ISP_CCM_MATRIX_SIZE];
    ot_isp_dng_srational forward_matrix1[OT_ISP_CCM_MATRIX_SIZE];
    ot_isp_dng_srational forward_matrix2[OT_ISP_CCM_MATRIX_SIZE];
    td_u8  calibration_illuminant1;
    td_u8  calibration_illuminant2;
} ot_isp_dng_image_static_info;

【成员】

成员名称

描述

dng_raw_format

DNG raw格式。

color_matrix1

在第一组校正光源下,XYZ空间到参考相机颜色空间的转换矩阵。

color_matrix2

在第二组校正光源下,XYZ空间到参考相机颜色空间的第二组转换矩阵。

camera_calibration1

在第一组校正光源下,参考相机颜色空间到个体相机颜色空间转换矩阵。

camera_calibration2

在第二组校正光源下,参考相机颜色空间到个体相机颜色空间转换矩阵。

forward_matrix1

在第一组校正光源下,相机颜色到XYZ D50颜色的转换矩阵。

forward_matrix2

在第二组校正光源下,相机颜色到XYZ D50颜色的转换矩阵。

calibration_illuminant1

校正光源1。

calibration_illuminant2

校正光源2。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dng_color_param

【说明】

定义DNG白平衡校正系数。

【定义】

typedef struct {
    ot_isp_dng_wb_gain wb_gain1;
    ot_isp_dng_wb_gain wb_gain2;
    ot_isp_dng_ccm_tab ccm_tab1;
    ot_isp_dng_ccm_tab ccm_tab2;
} ot_isp_dng_color_param;

【成员】

成员名称

描述

wb_gain1

在低色温光源下校正的白平衡系数。推荐使用A光源。

wb_gain2

在高色温光源下校正的白平衡系数。推荐使用D50光源。

ccm_tab1

在低色温光源下校正的CCM。和wb_gain1在同光源下标定得到。

ccm_tab2

在高色温光源下校正的CCM。和wb_gain2在同光源下标定得到。

【注意事项】

判断高色温的条件为r_gain高,b_gain低。

【相关数据类型及接口】

无

ot_isp_dng_cfa_layout_type

【说明】

定义DNG 滤色阵列类型。

【定义】

typedef enum {
    OT_ISP_CFALAYOUT_TYPE_RECTANGULAR = 1,
    OT_ISP_CFALAYOUT_TYPE_A,
    OT_ISP_CFALAYOUT_TYPE_B,
    OT_ISP_CFALAYOUT_TYPE_C,
    OT_ISP_CFALAYOUT_TYPE_D,
    OT_ISP_CFALAYOUT_TYPE_E,
    OT_ISP_CFALAYOUT_TYPE_F,
    OT_ISP_CFALAYOUT_TYPE_G,
    OT_ISP_CFALAYOUT_TYPE_H,
    OT_ISP_CFALAYOUT_TYPE_BUTT
} ot_isp_dng_cfa_layout_type;

【成员】

成员名称

描述

OT_ISP_CFALAYOUT_TYPE_RECTANGULAR

滤色阵列像素点为方形。

OT_ISP_CFALAYOUT_TYPE_A

滤色阵列A类型,暂未支持。

OT_ISP_CFALAYOUT_TYPE_B

滤色阵列B类型,暂未支持。

OT_ISP_CFALAYOUT_TYPE_C

滤色阵列C类型,暂未支持。

OT_ISP_CFALAYOUT_TYPE_D

滤色阵列D类型,暂未支持。

OT_ISP_CFALAYOUT_TYPE_E

滤色阵列E类型,暂未支持。

OT_ISP_CFALAYOUT_TYPE_F

滤色阵列F类型,暂未支持。

OT_ISP_CFALAYOUT_TYPE_G

G滤色阵列类型,暂未支持。

OT_ISP_CFALAYOUT_TYPE_H

H滤色阵列类型,暂未支持。

OT_ISP_CFALAYOUT_TYPE_BUTT

滤色阵列类型结束。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dng_srational

【说明】

定义DNG 除法结构体。

【定义】

typedef struct {
    td_s32 numerator;
    td_s32 denominator;
} ot_isp_dng_srational;

【成员】

成员名称

描述

numerator

分子。

denominator

分母。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dng_black_level_repeat_dim

【说明】

定义黑电平像素重复维度。

【定义】

typedef struct {
    td_u16 repeat_row;
    td_u16 repeat_col;
} ot_isp_dng_black_level_repeat_dim;

【成员】

成员名称

描述

repeat_row

黑电平在行方向上像素重复次数。

repeat_col

黑电平在列方向上像素重复次数。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dng_default_scale

【说明】

定义将图像转换成方形像素默认的缩放系数。

【定义】

typedef struct {
    ot_isp_dng_srational default_scale_hor;
    ot_isp_dng_srational default_scale_ver;
} ot_isp_dng_default_scale;

【成员】

成员名称

描述

default_scale_hor

将图像转换成方形像素的默认水平缩放系数。

default_scale_ver

将图像转换成方形像素的默认垂直缩放系数。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dng_repeat_pattern_dim

【说明】

定义DNG颜色分量重复次数。

【定义】

typedef struct {
    td_u16 repeat_pattern_dim_row;
    td_u16 repeat_pattern_dim_col;
} ot_isp_dng_repeat_pattern_dim;

【成员】

成员名称

描述

repeat_pattern_dim_row

颜色分量在行方向上像素重复次数。

repeat_pattern_dim_col

颜色分量在列方向上像素重复次数。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dng_raw_format

【说明】

定义DNG RAW数据格式。

【定义】

typedef struct {
    td_u8 bits_per_sample;
    td_u8 cfa_plane_color[OT_CFACOLORPLANE];
    ot_isp_dng_cfa_layout_type cfa_layout;
    ot_isp_dng_black_level_repeat_dim black_level_repeat_dim;
    td_u32 white_level;
    ot_isp_dng_default_scale default_scale;
    ot_isp_dng_repeat_pattern_dim cfa_repeat_pattern_dim;
    td_u8 cfa_pattern[OT_ISP_BAYER_CHN_NUM];
} ot_isp_dng_raw_format;

【成员】

成员名称

描述

bits_per_sample

Raw数据位宽。

cfa_plane_color[OT_CFACOLORPLANE]

滤色阵列的颜色分量。

cfa_layout

滤色阵列排列类型。

black_level_repeat_dim

黑电平的重复维度。

white_level

白电平。

default_scale

默认缩放系数。

cfa_repeat_pattern_dim

在每个方向上的颜色分量个数。

cfa_pattern[OT_ISP_BAYER_CHN_NUM]

滤色阵列的颜色分量排列顺序。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dng_wb_gain

【说明】

定义DNG 白平衡校正系数。

【定义】

typedef struct {
    td_u16 r_gain;
    td_u16 g_gain;
    td_u16 b_gain;
} ot_isp_dng_wb_gain;

【成员】

成员名称

描述

r_gain

R通道增益,取值范围:[0, 0xFFF]

g_gain

G通道增益,取值范围:[0, 0xFFF]

b_gain

B通道增益,取值范围:[0, 0xFFF]

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_dng_ccm_tab

【说明】

定义DNG 的ccm校正系数。

【定义】

typedef struct {
    td_u16 color_temp;
    td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE]
} ot_isp_dng_ccm_tab;

【成员】

成员名称

描述

color_temp

色温。取值范围:[2000, 10000]

ccm

ccm矩阵。

【注意事项】

无

【相关数据类型及接口】

无

MeshShading量产标定工具

功能描述

本模块用于在Hi3519DV500上实现对单一光源的在线Mesh LSC标定功能。具体调用实例可参考开发包中的lsc_online_cali用例。本模块可针对单一光源生成符合Hi3519DV500中Mesh LSC的标定数据。

在使用本模块进行标定过程中,标定环境与离线标定MLSC时需要的标定环境相同。

在进行Mesh LSC在线标定前,首先需要确定mesh_scale的大小,具体做法为:在需要标定的一批次镜头中,挑选几个典型的镜头样本,将样本镜头在实验室环境运行量产Shading在线标定的用例并预设mesh_scale的值,例如预设的mesh_scale =1,运行用例的时候,报出以下打印Please set mesh scale to 2,表示当前挑选的镜头的Shading的倍数大于4倍,且小于8倍,将打印推荐的mesh_scale=2重新进行预设,并运行Mesh LSC在线标定程序得到MeshShading Table,将MeshShading Table和mesh_scale导入到PQ工具中,开启Mesh Shading校正模块,观察画面的四周的镜头阴影区是否得到合理校正且画面整体亮度无异常。如果镜头的Shading得到了合理的校正,接下来将实验室环境得到mesh_scale值,再大规模应用到产线标定中。

以上做法是基于假设同一批次的镜头,Shading的程度表现差异不大,如果不同批次的镜头,需要在实验室环境重新确定MeshScale的大小。

MeshShading差异的校正过程:

  1. 产线上Shading校正时,对于消费类sensor不同的模式,可以在线抓取其中最大分辨率下对应光源的RAW(如5000K色温),其余模式下的分辨率,可以根据与最大分辨率的相对位置,调用ss_mpi_isp_mesh_shading_calibration接口,标定得到对应光源RAW的MeshShading Table表。
  2. 在步骤1得到MeshShading Table表的基础上,用户调用ss_mpi_isp_set_mesh_shading_gain_lut_attr接口将生成的MeshShading Table表写入到板端的Flash,以便于下次机器上电能够获取到相关的Mesh Shading Table表。

API参考

ss_mpi_isp_mesh_shading_calibration:获取Mesh LSC在线标定结果。

ss_mpi_isp_mesh_shading_calibration

【描述】

获取Mesh LSC在线标定结果。

【语法】

td_s32 ss_mpi_isp_mesh_shading_calibration(ot_vi_pipe vi_pipe,const td_u16 *src_raw, ot_isp_mlsc_calibration_cfg *mlsc_cali_cfg, ot_isp_mesh_shading_table *mlsc_table)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

src_raw

输入待标定的Raw域图像。

输入

mlsc_cali_cfg

输入MLSC在线标定Cfg参数。

输入

mlsc_table

输出MLSC标定结果。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

请参考sample(mpp/sample/lsc_online_cali)当中的在线标定(lsc_online_cali)对该接口的使用方法。如果用户需要自行调用,请注意src_raw是一个指向图像Raw数据的指针,接口内部无法对传入数据的长度进行检验,必须在外部分配正确,否则会出现内存越界错误。分配的空间长度与mlsc_calib_cfg结构体中定义的长和宽相关,请按照下面的示例来分配Raw的内存空间:

src_raw = (td_u16 *)malloc(mlsc_calib_cfg->img_height * mlsc_calib_cfg->img_width * sizeof(td_u16))

【举例】

无

【相关主题】

无

数据类型

ot_isp_mlsc_calibration_cfg

【说明】

定义MLSC在线标定CFG参数信息。

【定义】

typedef struct {
    ot_isp_bayer_format bayer;
    ot_isp_bayer_raw_bit raw_bit;
    td_u16 img_height; 
    td_u16 img_width;
    td_u16 dst_img_height;
    td_u16 dst_img_width;
    td_u16 offset_x;
    td_u16 offset_y;
    td_u32 mesh_scale;
    td_u16 blc_offset_r;
    td_u16 blc_offset_gr;
    td_u16 blc_offset_gb;
    td_u16 blc_offset_b;
} ot_isp_mlsc_calibration_cfg;

【成员】

成员名称

描述

bayer

输入图像的Bayer域排布。

取值范围:[0, 3]

raw_bit

输入图像的Bit位宽。

只能配置8/10/12/14/16。

img_height

输入图像高度,要求4对齐。

取值范围:[0, MaxHeight]

Hi3519DV500: [0, 8192]

Hi3516CV610: [0, 4096]

img_width

输入图像宽度,要求4对齐。

取值范围:[0, MaxWidth]

Hi3519DV500: [0, 8192]

Hi3516CV610: [0, 4096]

dst_img_height

裁剪标定时目标图像的高度,要求4对齐;不需要裁剪时,与img_height一致

取值范围:[0, img_height]

dst_img_width

裁剪标定时目标图像的宽度,要求4对齐;不需要裁剪时,与img_width一致

取值范围:[0, img_width]

offset_x

裁剪标定时目标图像对于输入图像的偏移值的横坐标,要求2对齐;不需要裁剪时,设置为0

取值范围:[0, img_width – dst_img_width]

offset_y

裁剪标定时目标图像对于输入图像的偏移值的纵坐标,要求2对齐;不需要裁剪时,设置为0

取值范围:[0, img_height – dst_img_height]

mesh_scale

表示在MLSC矫正表的Gain值精度选择。

取值范围:[0,7]

blc_offset_r

输入图像的BLC值,R分量。

取值范围:[0, 4095]

blc_offset_gr

输入图像的BLC值,GR分量。

取值范围:[0, 4095]

blc_offset_gb

输入图像的BLC值,GB分量。

取值范围:[0, 4095]。

blc_offset_b

输入图像的BLC值,B分量。

取值范围:[0, 4095]

【注意事项】

mesh_scale的取值范围为[0, 7],其分别对应的Gain值精度选择如下:

mesh_scale

对应精度

标定结果范围

0

1.9

0~2

1

2.8

0~4

2

3.7

0~8

3

4.6

0~16

4

0.10

1~2

5

1.9

1~3

6

2.8

1~5

7

3.7

1~9

  • Mesh Shading在线标定时需要减去黑电平,设置各颜色通道的黑电平时要以12bit为基准,因此输入Raw的比特位宽也一定要相同。
  • 当使用裁剪的接口dst_img_height,dst_img_width,offset_x,offset_y时,注意偏移值和裁剪图像的宽高不要超出输入图像的宽高。

【相关数据类型及接口】

无

ot_isp_mesh_shading_table

【说明】

定义MLSC标定结果格式。

【定义】

typedef struct {
    td_u8   mesh_scale;
    td_u16  x_grid_width[OT_ISP_MLSC_X_HALF_GRID_NUM];
    td_u16  y_grid_width[OT_ISP_MLSC_Y_HALF_GRID_NUM];
    ot_isp_shading_gain_lut  lsc_gain_lut;
} ot_isp_mesh_shading_table;

【成员】

成员名称

描述

mesh_scale

表示在MLSC矫正表的Gain值精度选择。

取值范围:[0, 7]

x_grid_width[OT_ISP_MLSC_X_HALF_GRID_NUM]

储存MLSC每个Grid的宽度值

取值范围:[4, img_width/4 - 60]

y_grid_width[OT_ISP_MLSC_Y_HALF_GRID_NUM]

储存MLSC每个Grid的高度值

取值范围:[4, img_height/4 - 60]

lsc_gain_lut

存储各颜色分量上的Gain Table,是Mesh Shading表

取值范围:[0, 1023]

【注意事项】

无

【相关数据类型及接口】

无

Auto Flicker Type Detection

功能描述

Auto Flicker Type Detection (自动工频闪类型检测)是一个结合软件和硬件一起实现的算法。该算法能够计算出当前环境光源的频闪频率是50Hz还是60Hz。

须知:

  • 在某些环境中,当存在有50Hz光源和60Hz光源来回变动的情况时(比如在室内50Hz的灯光下,用户可能会关闭灯光,打开60Hz光源的电视),Camera无法应用合适的抗闪参数。所以此时需要检测出当前环境光源的工频闪频率,Camera根据当前环境光源的工频闪频率适配合适的抗闪参数。
  • 目前工频闪类型计算在vpss节点获取图像数据进行计算,前端的DIS、LDC、鱼眼校正等模块如果对图像的内容形态改变过大会影响工频闪类型计算的准确性。另外图像噪声过大,也会影响工频闪类型计算的准确性。

API参考

ss_mpi_isp_calc_flicker_type: 获取工频闪类型检测的结果。

ss_mpi_isp_calc_flicker_type

【描述】

输出帧信息,获取工频闪类型检测的结果。

【语法】

ss_mpi_isp_calc_flicker_type(ot_vi_pipe vi_pipe, ot_isp_calc_flicker_input *input_param, ot_isp_calc_flicker_output *output_param, ot_video_frame_info frame[], td_u32 array_size);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

input_param

自动计算工频闪输入相关参数指针。

输入

output_param

自动计算工频闪输出结果参数指针。

输出

frame[]

输入需要计算的连续帧数据

ot_video_frame_info具体请参考《MPP媒体处理软件Vx.y开发参考》“系统控制”章节。

输入

array_size

输入需要计算连续帧的个数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libcalcflicker.a

【注意】

  • 必须使用连续的3帧数据进行计算,输入的array_size帧数需要等于3。同时frame[]指向的数据必须保证有效。
  • 计算的帧数据的分辨率不能超过ISP模块最大能够处理的图像分辨率。
  • 为了加快计算速度,接口内部使用VGS硬件模块参与计算,所以用于计算工频闪的图像分辨率不能超过VGS的最大处理分辨率范围。
  • 在不同频闪混合的光源下,比如光源环境同时存在50Hz和60Hz的光源,或者工频闪光源只占整个环境光源非常小的一部分,容易出现误判。
  • Sample用例中有使用ss_mpi_vpss_get_grp_frame接口(接口具体信息请参见《MPP 媒体处理软件Vx.y开发参考》的VPSS章节)获取3帧数据,但此接口只在Vpss模块工作在离线模式时才有效。当Vpss处于在线模式时,无法获取有效帧数据进行工频闪类型计算。
  • 可以参考附录工频闪类型自适应Sample用例处理流程。

【举例】

ot_vi_pipe vi_pipe = 0;
td_u16 frame_num = 3;
ot_video_frame_info frame[3];
ot_isp_calc_flicker_input input_param;
ot_isp_calc_flicker_output output_param;
ot_isp_exp_info exp_info;
ss_mpi_isp_query_exposure_info(vi_pipe, &exp_info);
input_param. lines_per_second = exp_info.lines_per500ms*2
.. .. ..
获取3帧连续帧数据给 frame[3](此处略)
.. .. ..
ret = ss_mpi_isp_calc_flicker_type(vi_pipe, input_param, output_param, frame, frame_num);

【相关主题】

无

数据类型

ot_isp_calc_flicker_input

【说明】

定义计算工频闪输入参数。

【定义】

typedef struct {
    td_u32 lines_per_second;
} ot_isp_calc_flicker_input;

【成员】

成员名称

描述

lines_per_second

当前序列1秒的最大曝光总行数。

取值范围:[0x1F4,0xFFFFFFFF]。默认值0

【注意事项】

  • lines_per_second 等于1秒的最大总曝光行数,比如一帧的最大曝光时间为1125行,帧率为30fps,那么lines_per_second = 1125*30。通常,可以使用ot_isp_exp_info这个结构体成员变量lines_per500ms乘以2。
  • 需要注意这里的1行时间需要和1行数据的Readout Timing的时间相等,一般sensor的曝光行数单位时间和Readout 1行的时间相同,需要注意少部分sensor的Readout 1行时间等于2行,那么计算lines_per_second时需要除以2。其他等效倍率则除以相应的倍率。

【相关数据类型及接口】

ss_mpi_isp_calc_flicker_type

ot_isp_calc_flicker_output

【说明】

定义自动工频闪类型检测输出结果。

【定义】

typedef struct {
    ot_isp_calc_flicker_type flicker_type;  /*The calculate result of flicker type*/
} ot_isp_calc_flicker_output;

【成员】

成员名称

描述

flicker_type

ot_isp_calc_flicker_type: 工频闪计算结果。有以下4种状态:

  • OT_ISP_FLICKER_TYPE_NONE 无工频闪
  • OT_ISP_FLICKER_TYPE_UNKNOW 有工频闪,但不确定是哪种类型
  • OT_ISP_FLICKER_TYPE_50HZ 50Hz的工频闪
  • OT_ISP_FLICKER_TYPE_60HZ 60Hz的工频闪

【注意事项】

无

【相关数据类型及接口】

ss_mpi_isp_calc_flicker_type

Auto Color Shading

功能描述

Auto Color Shading (ACS)算法是一个软件上实现的算法,该算法能够根据场景自适应地生成LSC的校正表,通过配置Mesh Shading的Lut校正表,从而能够减轻或消除镜头和sensor造成的color shading。该算法需要在使用前进行标定,标定的数据预先放入cmos.c中。

API参考

ss_mpi_isp_set_auto_color_shading_attr

【描述】

设置Auto Color Shading属性参数。

【语法】

td_s32 ss_mpi_isp_set_auto_color_shading_attr(ot_vi_pipe vi_pipe, const ot_isp_acs_attr *acs_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

acs_attr

Auto Color Shading属性参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libacs.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_auto_color_shading_attr

ss_mpi_isp_get_auto_color_shading_attr

【描述】

获取Auto Color Shading属性参数。

【语法】

td_s32 ss_mpi_isp_get_auto_color_shading_attr(ot_vi_pipe vi_pipe, ot_isp_acs_attr *acs_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

acs_attr

Auto Color Shading属性参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libacs.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_auto_color_shading_attr

数据类型

ot_isp_acs_attr:定义Auto Color Shading属性参数。

ot_isp_acs_attr

【说明】

定义Auto Color Shading属性参数。

【定义】

typedef struct {
    td_bool enable;
    td_u16 y_strength;
    td_u16 run_interval;
    td_bool lock_en;
} ot_isp_acs_attr;

【成员】

成员名称

描述

enable

ACS模块使能。取值范围:[0x0, 0x1]

y_strength

ACS算法Luma Shading(Y Shading)的校正强度,默认256

取值范围:[0x0, 0x100]

run_interval

ACS算法的运行频率,默认为每2帧运行一次。增加此值可降低ACS算法的CPU占用率。

取值范围:[0x1, 0xff]

lock_en

固定ACS产生的Lut表,并保持当前的LSC校正表。

取值范围:[0x0, 0x1]

【注意事项】

  • ACS模块运行需要正确参考AWB统计,ACS未开启时,AWB统计模块位置ot_isp_awb_switch设置在OT_ISP_AWB_AFTER_DG;ACS开启时,会自动设置到OT_ISP_AWB_AFTER_EXPANDER,应保持该设置,若此后再手动设置为别的位置后,容易造成ACS震荡等问题。
  • ACS模块开关与LSC的模块开关互不影响。ACS算法通过调用LSC的接口来配置Lut校正表,需要看到ACS模块效果时,Mesh Shading模块开关必须使能。
  • 关闭ACS模块使能开关时,LSC的Lut表会恢复到未开ACS前的状态。
  • ACS会参考mesh_scale的值来配置LSC相应的Lut表,cmos中bit1_lsc使能时会参考cmos中LSC的mesh_scale配置。
  • 推荐mesh_scale的值取0~3,而不是4~7,因为4~7无法表示小于1倍的值,当y_strength的值较小时,校正Color Shading可能需要小于1倍的值。
  • 开启ACS模块时需要使能cmos中的bit1_acs,ACS会读取驱动文件中配置好的标定参数。当cmos中bit1_lsc使能时,ACS需要配置为golden sample的标定结果,同时lsc_lut.lsc_gain_lut[0]配置为golden sample在D50下标定的表,lsc_lut.lsc_gain_lut[1]配置为当前镜头模组在D50下标定的表,可以解决镜头的一致性问题,模组和golden之间的差异越小,校正的效果越好。如果只用当前模组进行标定,则需要关闭cmos中bit1_lsc使能,否则会影响校正效果。

【相关数据类型及接口】

无

Expander

功能描述

部分sensor内部会做多帧曝光的融合,融合后数据位宽会增大,导致输出成本增大。为减少输出的成本,sensor内部会做数据分段压缩,将数据压缩到一个比较小的位宽。在ISP中为了将数据还原,需要将sensor内部压缩的数据,进行解压缩。

API参考

ss_mpi_isp_set_expander_attr

【描述】

设置expander属性参数。

【语法】

td_s32 ss_mpi_isp_set_expander_attr(ot_vi_pipe vi_pipe, const ot_isp_expander_attr *expander_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

expander_attr

expander属性参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_expander_attr

ss_mpi_isp_get_expander_attr

【描述】

获取expander属性参数。

【语法】

td_s32 ss_mpi_isp_get_expander_attr(ot_vi_pipe vi_pipe, ot_isp_expander_attr *expander_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

expander_attr

expander属性参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_expander_attr

数据类型

OT_ISP_EXPANDER_NODE_NUM

【说明】

定义expander lut的深度。

【定义】

Hi3519DV500:

#define OT_ISP_EXPANDER_NODE_NUM   257

Hi3516CV610:

#define OT_ISP_EXPANDER_NODE_NUM   129

【注意事项】

无

【相关数据类型及接口】

ot_isp_expander_attr

OT_ISP_EXPANDER_POINT_NUM_MAX

【说明】

定义expander拐点数目的最大值。

【定义】

#define OT_ISP_EXPANDER_POINT_NUM_MAX ([OT_ISP_EXPANDER_NODE_NUM](#ZH-CN_TOPIC_0000001338276986) - 1)

【注意事项】

无

【相关数据类型及接口】

ot_isp_expander_attr

ot_isp_expander_attr

【说明】

定义expander属性参数。

【定义】

typedef struct {
    td_bool  enable;
    td_u8    bit_depth_in;
    td_u8    bit_depth_out;
    td_u16   knee_point_num;
    ot_point knee_point_coord[OT_ISP_EXPANDER_POINT_NUM_MAX];
} ot_isp_expander_attr;

【成员】

成员名称

描述

enable

expander模块的使能。

只能在sensor built-in模式下使能expander。

bit_depth_in

输入数据位宽。

取值范围:[0xC, 0x14],只能配置为偶数。

bit_depth_out

输出数据位宽。

  • Hi3519DV500取值范围:[0xC, 0x14],只能配置为偶数。
  • Hi3516CV610取值范围:[0xC, 0x14]。

knee_point_num

拐点坐标的数目。

  • Hi3519DV500取值范围:[1, 256]
  • Hi3516CV610取值范围:[1, 128]

knee_point_coord[OT_ISP_EXPANDER_POINT_NUM_MAX]

解压的拐点(包括横纵坐标)。

  • Hi3519DV500
    • 横坐标x的取值范围:[0x0, 0x100]
    • 纵坐标y的取值范围:[0x0, 0x100000]
  • Hi3516CV610
    • 横坐标x的取值范围:[0x0, 0x80]
    • 纵坐标y的取值范围:[0x0, 0x20000]

坐标必须是单调递增的。

【注意事项】

  • 在sensor手册中会给出sensor在sensor built-in模式下内部压缩时使用的拐点配置,需要将这几个拐点配置按照对应的原则进行转换,然后配置到knee_point_coord中即可。

    • Hi3519DV500转换原则如下:

      • knee_point_coord的横坐标x需要根据sensor压缩曲线转换到[0,256]之间(8bit),例如sensor压缩输出的后有效数据位宽是12bit,则需要将sensor压缩曲线拐点的纵坐标右移4bit得到knee_point_coord的横坐标x;
      • knee_point_coord的纵坐标y需要根据sensor压缩曲线转换到[0,1048576]之间(20bit),例如sensor合成有效数据未压缩之前有效位宽是16bit,则需要将sensor压缩曲线的拐点的横坐标左移4bit,得到knee_point_coord的纵坐标y。
      • 不必配置(0,0)的拐点坐标,代码内部在进行插值时,会自动将(0,0)作为第一个拐点坐标。
    • Hi3516CV610转换原则如下:

      • knee_point_coord的横坐标x需要根据sensor压缩曲线转换到[0,128]之间(7bit),例如sensor压缩输出的后有效数据位宽是12bit,则需要将sensor压缩曲线拐点的纵坐标右移5bit得到knee_point_coord的横坐标x;
      • knee_point_coord的纵坐标y需要根据sensor压缩曲线转换到[0,131072]之间(17bit),例如sensor合成有效数据未压缩之前有效位宽是16bit,则需要将sensor压缩曲线的拐点的横坐标左移1bit,得到knee_point_coord的纵坐标y。
      • 不必配置(0,0)的拐点坐标,代码内部在进行插值时,会自动将(0,0)作为第一个拐点坐标。
  • 高频次的动态修改expander的拐点配置,可能会导致同一幅图像使用不同的解压缩曲线

  • expander拐点会影响built-in模式下BE黑电平的配置,动态调节expander拐点,图像可能会有颜色的跳变。
  • Hi3516CV610不支持在线模式下配置expander参数,仅可配置使能参数。

【相关数据类型及接口】

Local BLC

功能描述

某些sensor在一些情况下会出现局部BLC不一致的情况,这样有可能会导致局部的偏色,Local BLC可以根据标定好的数据分区域校正BLC,使BLC在各个区域保持一致。

Local BLC算法使用Mesh(网格)方式对画面进行标定/矫正,算法会将整个Bayer域画面分割成32x32个子区域,这32x32个区域大小大致相等,算法将分别对RAW域中的每个通道进行处理。

FPN也可以校正局部BLC不一致,建议在FPN不方便使用的情况下考虑使用Local BLC。

Local BLC位于FE0,算法参数由离线标定工具生成,标定精度16bit,不建议手动调试。

说明:

Hi3516CV610不支持此模块。

API参考

ss_mpi_isp_set_lblc_attr

【描述】

设置Local BLC算法参数。

【语法】

td_s32 ss_mpi_isp_set_lblc_attr(ot_vi_pipe vi_pipe, const ot_isp_lblc_attr *lblc_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

lblc_attr

Local BLC算法参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a, libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_lblc_attr

ss_mpi_isp_get_lblc_attr

【描述】

获取Local BLC算法参数。

【语法】

td_s32 ss_mpi_isp_get_lblc_attr(ot_vi_pipe vi_pipe, ot_isp_lblc_attr *lblc_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

lblc_attr

Local BLC算法参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a, libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_lblc_attr

ss_mpi_isp_set_lblc_lut_attr

【描述】

设定Local BLC表属性。

【语法】

td_s32 ss_mpi_isp_set_lblc_lut_attr(ot_vi_pipe vi_pipe, const ot_isp_lblc_lut_attr *lblc_lut_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号

输入

lblc_lut_attr

Local BLC表属性

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_lblc_lut_attr

ss_mpi_isp_get_lblc_lut_attr

【描述】

获取Local BLC表属性。

【语法】

td_s32 ss_mpi_isp_get_lblc_lut_attr(ot_vi_pipe vi_pipe, ot_isp_lblc_lut_attr *lblc_lut_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

lblc_lut_attr

Local BLC表属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_lblc_lut_attr

数据类型

OT_ISP_LBLC_GRID_POINTS

【说明】

定义Local BLC分块格点的数量。

【定义】

#define OT_ISP_LBLC_GRID_COL              33
#define OT_ISP_LBLC_GRID_ROW              33
#define OT_ISP_LBLC_GRID_POINTS          (OT_ISP_LBLC_GRID_COL * OT_ISP_LBLC_GRID_ROW)

【注意事项】

无。

【相关数据类型及接口】

ot_isp_lblc_lut_attr

ot_isp_lblc_attr

【说明】

定义Local BLC算法的参数。

【定义】

typedef struct {
    td_bool  enable;
    td_u16  strength;   
} ot_isp_lblc_attr;

【成员】

成员名称

描述

enable

表示Local BLC使能。

取值范围:[0,1]

0:禁止;

1:使能。

strength

用来全局纠正Local BLC校正后的强度。

Hi3519DV500范围:[0, 1023]

【注意事项】

无

【相关数据类型及接口】

ot_isp_lblc_lut_attr

【说明】

定义Local BLC表的属性,该表一般通过标定获取,不建议手动调试。

【定义】

typedef struct {
    td_u16  offset_r;
    td_u16  offset_gr;
    td_u16  offset_gb;
    td_u16  offset_b;
    td_u16  mesh_blc_r[OT_ISP_LBLC_GRID_POINTS];
    td_u16  mesh_blc_gr[OT_ISP_LBLC_GRID_POINTS];
    td_u16  mesh_blc_gb[OT_ISP_LBLC_GRID_POINTS];
    td_u16  mesh_blc_b[OT_ISP_LBLC_GRID_POINTS];
} ot_isp_lblc_lut_attr;

【成员】

成员名称

描述

offset_r

R通道BLC值的均值。取值范围:[0, 16383]

offset_gr

Gr通道BLC值的均值。取值范围:[0, 16383]

offset_gb

Gb通道BLC值的均值。取值范围:[0, 16383]

offset_b

B通道BLC值的均值。取值范围:[0, 16383]

mesh_blc_r[OT_ISP_LBLC_GRID_POINTS]

R通道Mesh分块的BLC表,该数组表示画面从左至右、从上至下的网格交点处的R分量的数据值。取值范围:[0, 16383]

mesh_blc_gr[OT_ISP_LBLC_GRID_POINTS]

Gr通道Mesh分块的BLC表,该数组表示画面从左至右、从上至下的网格交点处的Gr分量的数据值。取值范围:[0, 16383]

mesh_blc_gb[OT_ISP_LBLC_GRID_POINTS]

Gb通道Mesh分块的BLC表,该数组表示画面从左至右、从上至下的网格交点处的Gb分量的数据值。取值范围:[0, 16383]

mesh_blc_b[OT_ISP_LBLC_GRID_POINTS]

B通道Mesh分块的BLC表,该数组表示画面从左至右、从上至下的网格交点处的B分量的数据值。取值范围:[0, 16383]

【注意事项】

增益表的默认配置与ot_isp_cmos_alg_key中的bit1_lblc 标志位有关,如果bit1_lblc=1,则采用cmos_ex.h中的配置值作为默认值;否则默认配置为4096。

【相关数据类型及接口】

统计信息

概述

ISP提供的3A统计信息、运动区域占比统计信息及相关配置。

功能描述

AE统计信息

实现自动曝光信息的统计,软件根据统计信息调节sensor可实现自动曝光的功能。AE统计信息包含分区间的R/Gr/Gb/B均值统计、带权重的全局R/Gr/Gb/B均值、1024段直方图信息。

AE 区域统计信息

每个分块均可以输出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

【注意事项】

Hi3519DV500支持:

  • 最大支持17×15分块。
  • 输入最小分辨率为64x64。
  • 分区域统计信息每块最小分辨率为20x15。
  • 输入分辨率宽高必须是偶数。
  • 默认分块情况下支持最小分辨率为340x226。

Hi3516CV610支持:

  • 最大支持32×32分块。
  • 输入最小分辨率为120x120。
  • 分区域统计信息每块最小分辨率为20x15。
  • 输入分辨率宽高必须是偶数。
  • 当分辨率小于640x480时,分块数变为17*15,当分辨率小于340x226时,分块数变成6*8。
带权重的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分块,最小支持图像的2x2分块,每个分块均可以输出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分块,最小支持图像的2x2分块,每个分块均可以输出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。其物理意义与分块统计一致。

运动区域占比统计信息

detail_stats分块统计信息

  • detail_stats统计整幅图像,ss_mpi_isp_set_stats_cfg接口设置的crop信息无法作用在detail_stats统计信息上。detail_stats统计的是整幅图像的分块统计信息,包括ae分块统计信息和awb分块统计信息,相比AE 区域统计信息、AWB区域统计信息而言,提供的分块更精细, 分块数更多,占用内存较大。打开detail_stats统计信息统计功能,系统性能会降低,多占用VIPROC性能=帧率/interval.
  • detail_stats统计信息,只受BE中的blc和isp_dgain模块影响,不受其他模块影响,调节其他模块效果,detail_stats统计信息不受影响。
  • ss_mpi_isp_set_detail_stats_cfg接口设置分块数,col代表列划分大块数,最大值为OT_ISP_DETAIL_STATS_MAX_COLUMN, row代表行划分大块数,最大值为OT_ISP_DETAIL_STATS_MAX_ROW。划分块数需要满足须知分辨率要求:

    例如原始图像分辨率为(2688, 1520), 划分块数设置为col=6, row=4, 则每块的分辨率(448, 380), 小于(640, 480), 则划分不满足要求, 划分块数应该小于col <= 4 (2688/640), row <= 3 (1520/480)。除此之外,划分块数越多,则消耗内存越大,可根据实际情况进行划分,detail_stats使能时,对图像分辨率和col、row都存在约束,详细请见ss_mpi_isp_set_detail_stats_cfg接口约束。

  • 根据ss_mpi_isp_set_detail_stats_cfg接口设置的col和row进行划分后,ISP会根据大块数,细分颗粒度更小的分块,最终输出AE detail分块统计信息和AWB detail分块统计信息.

  • 获取到的detail_stats统计信息,数据量较大,勿使用栈内存进行存放,推荐使用堆或者MMZ内存进行存放。

须知:

当detail_stats使能时,并且图像分辨率较小,设置分块数时,需要考虑到每块的分辨率是否小于640x480,如果每块的分辨率小于640x480,那么需要减少分块数,以免每块过小,否则VI创建pipe将会失败。建议在分辨率小的情况下,使用较少的分块数。

detail AE分块统计信息

AE最大支持OT_ISP_DETAIL_AE_ZONE_ROW x OT_ISP_DETAIL_AE_ZONE_COLUMN分块,每个分块均可以输出16bit R,Gr,Gb,B均值(Average R/Gr/Gb/B)。对应的结构体请见ot_isp_detail_ae_stats中的be_zone_avg, 实际块数计算方式请见ot_isp_detail_ae_stats,结构体中的ot_isp_detail_ae_grid_info代表每个小块的起始坐标,用户可以通过此坐标信息查询到具体某块的AE分块统计信息。

须知:

为了节省获取统计信息接口的耗时,存放detail_stats的内存,如果曾经获取过坐标信息, 则ot_isp_detail_ae_grid_info中status会被置为1。在分辨率不变并且分块个数不变的情况下,坐标信息不会改变,status的状态位可以不清除,再次获取统计信息时,ISP内部将不会重新更新坐标信息,可节省接口耗时。

detail AWB分块统计信息

AWB中最大支持OT_ISP_DETAIL_AWB_ZONE_NUM个分块,每个分块均可以输出R、G、B均值(Average R/G/B)。其中统计的像素点均为16bit,分块内统计有效点个数Count All,点数统计值均已根据ot_isp_detail_ae_grid_info图像大小做了归一化处理,归一化到16bit。对应结构体为ot_isp_detail_awb_stats中zone_avg_r、zone_avg_g、zone_avg_b和zone_count_all,实际块数计算方式请见ot_isp_detail_awb_stats,结构体中的ot_isp_detail_awb_grid_info代表每个小块的起始坐标,获取到统计信息之后,可以通过此坐标信息查询到具体某块的AWB 分块统计信息。

须知:

为了节省获取统计信息接口的耗时,存放detail_stats的内存,如果曾经获取过坐标信息, 则ot_isp_detail_awb_grid_info中status会被置为1。在分辨率不变并且分块个数不变的情况下,坐标信息不会改变,status的状态位可以不清除,再次获取统计信息时,ISP内部将不会重新更新坐标信息,可节省接口耗时。

API参考

须知:

统计信息的API接口必须在调用ss_mpi_isp_init接口之后才能调用。

须知:

ss_mpi_isp_set_stats_cfg

【描述】

设置ISP统计信息配置。

【语法】

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_mpi_isp.a、libss_mpi_isp.a

【注意】

用户可以关闭不需要的统计信息,以提高系统性能。

【举例】

无

【相关主题】

ss_mpi_isp_get_stats_cfg

ss_mpi_isp_get_stats_cfg

【描述】

获取ISP统计信息配置。

【语法】

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_mpi_isp.a、libss_mpi_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_mpi_isp.a、libss_mpi_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_mpi_isp.a、libss_mpi_isp.a

【注意】

  • 只有使用FE0和FE2拼接才有拼接后的1024段直方图信息和均值信息,其他路拼接只有256段直方图信息。
  • ot_isp_ae_stitch_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
  • Hi3516CV610不支持。

【举例】

无

【相关主题】

无

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_mpi_isp.a、libss_mpi_isp.a

【注意】

Hi3516CV610不支持。

【举例】

无

【相关主题】

无

ss_mpi_isp_get_wb_stats

【描述】

获取WB统计信息。

【语法】

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_mpi_isp.a、libss_mpi_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_mpi_isp.a、libss_mpi_isp.a

【注意】

  • ot_isp_wb_stitch_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
  • Hi3516CV610不支持。

【举例】

无

【相关主题】

无

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_mpi_isp.a、libss_mpi_isp.a

【注意】

ot_isp_af_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。

【举例】

无

【相关主题】

无

ss_mpi_isp_get_motion_stats

【描述】

获取运动区域占比统计信息。

【语法】

td_s32 ss_mpi_isp_get_motion_stats(ot_vi_pipe vi_pipe, ot_isp_motion_stats *motion_stats)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。取值范围:[0, OT_ISP_MAX_PIPE_NUM]

输入

motion_stats

运动占比统计信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

只有BNR中md开关和nr使能都打开,才支持获取运动占比统计信息,具体可见ot_isp_nr_attr中的md_en使能和enable(nr使能)。

【举例】

无

【相关主题】

无

ss_mpi_isp_set_detail_stats_cfg

【描述】

设置detail_stats统计信息的配置。

【语法】

td_s32 ss_mpi_isp_set_detail_stats_cfg(ot_vi_pipe vi_pipe, const ot_isp_detail_stats_cfg *detail_stats_cfg)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。取值范围:[0,3]

输入

detail_stats_cfg

detail_stats的配置信息

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 不需要detail_stats统计信息时,可以不调度此接口,系统会默认关闭detail_stats使能。打开detail_stats统计信息统计功能,系统性能会降低,多占用的viproc性能 = 帧率/ interval。
  • 只允许在VI创建pipe之前设置修改,之后不允许设置修改参数;只允许在ss_mpi_isp_mem_init之前设置并修改,mem_init之后将不允许修改如需修改,需要销毁vi和isp,再重新设置参数创建。此接口属于静态接口,不支持动态修改。
  • 限制只允许分辨率[1920*1080, 3840x2160]范围内,使能detail_stats, 否则VI pipe将会创建失败。
  • wdr模式、在线模式、aidrc、拼接场景不支持设置detail_stats功能使能,否则VI pipe将会创建失败。
  • detail_stats使能打开时,只允许《MPP 媒体处理软件 V6.0 开发参考》“视频输入”章节中ot_vi_pipe_attr的compress_mode设置为非压缩格式, 否则VI pipe将会创建失败。
  • detail_stats使能打开时,不支持模式切换, 需要销毁ISP并且关闭detail_stats使能进行切换, 否则因为wdr不支持detail_stats, VI pipe将会创建失败。
  • detail_stats使能打开时,如果进行分辨率切换,则需要保证原始分块数配置在新分辨率下满足要求,否则VI在重新创建pipe时,将创建失败。分块要求请见detail_stats分块统计信息。
  • detail_stats使能打开时,awb统计信息的位置不允许修改到ot_isp_awb_switch中的OT_ISP_AWB_AFTER_DRC位置,否则拿到的统计信息不准确。
  • detail_stats使能打开时,要求detail_stats统计信息分块数大于1,内部参数col和row不能同时等于1。
  • 用户可以增大interval统计信息写出间隔数,和控制ot_isp_detail_stats_ctrl中的ctrl参数(例如只统计写出AE统计信息),以提高系统性能。
  • Hi3516CV610不支持

【举例】

if(detail_cfg->enable){
pipe_info->pipe_attr.compress_mode = OT_COMPRESS_MODE_NONE;
ret = ss_mpi_isp_set_detail_stats_cfg(vi_pipe, detail_cfg);
if (ret != HI_SUCCESS) {
printf("ss_mpi_isp_set_detail_stats_cfg failed with %#x!\n", ret);
return ret;
}
}
……
ret = ss_mpi_vi_create_pipe(vi_pipe, &pipe_info->pipe_attr);
if (ret != HI_SUCCESS) {
vi_mst_trace("vi create pipe(%d) failed with %#x!\n", vi_pipe, ret);
return ret;
}
……
ret = ss_mpi_isp_mem_init(vi_pipe);
if (ret != HI_SUCCESS) {
printf("SS_MPI_ISP_MemInit failed with %#x!\n", ret);
return ret;
}

【相关主题】

ss_mpi_isp_get_detail_stats_cfg

ss_mpi_isp_get_detail_stats_cfg

【描述】

获取detail_stats统计信息的配置。

【语法】

td_s32 ss_mpi_isp_get_detail_stats_cfg(ot_vi_pipe vi_pipe, ot_isp_detail_stats_cfg *detail_stats_cfg);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。取值范围[0,3]

输入

detail_stats_cfg

detail_stats的配置信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

Hi3516CV610不支持

【举例】

无

【相关主题】

ss_mpi_isp_set_detail_stats_cfg

ss_mpi_isp_get_detail_stats

【描述】

获取detail_stats统计信息。

【语法】

td_s32 ss_mpi_isp_get_detail_stats(ot_vi_pipe vi_pipe, ot_isp_detail_stats *detail_stats);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。取值范围[0,3]

输入

detail_stats

detail_stats统计信息

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • detail_stats存放数据较大,请勿使用栈内存进行存放,推荐使用堆内存和MMZ内存进行存放。
  • detail_stats统计信息配置,ss_mpi_isp_set_stats_cfg接口设置的crop信息无法作用在detail_stats统计信息上,detail_stats统计图像宽高对应此ss_mpi_isp_set_pub_attr接口中的wnd_rect宽高, wb的分块个数配置也不会作用在detail_stats统计信息上。
  • 当VI FMU功能开启时,将获取不到detail_stats统计信息。FMU功能可参考《MPP媒体处理软件6.0开发参考》“视频输入”章节的ss_mpi_vi_set_chn_fmu_mode 接口。
  • 获取时需要按照帧率和interval进行获取. 如果获取太频繁, 获取得到的是上一次获取的统计信息,可以根据PTS进行区分。例如帧率是30,interval是60,则每60帧更新一次统计信息,如果每隔2帧来获取一次统计信息,统计信息还未更新,则获取得到的是上一次获取到的统计信息,可以修改成每60帧获取统计信息,与此同时,也可节省系统的CPU耗时。
  • detail_stats统计信息,只受BE中的blc和isp_dgain模块影响,不受其他模块影响,调节BE其他模块效果,detail_stats统计信息不受影响。
  • ot_isp_detail_stats结构体较大,调用该接口时推荐调用malloc动态分配空间。
  • Hi3516CV610不支持

【举例】

无

【相关主题】

无

数据类型

ot_isp_stats_cfg

【说明】

定义ISP 3A统计信息配置。

【定义】

typedef struct {
   ot_isp_stats_ctrl      ctrl;
   ot_isp_stats_ctrl      update;
   ot_isp_ae_stats_cfg    ae_cfg;
   ot_isp_wb_stats_cfg    wb_cfg;
   ot_isp_focus_stats_cfg focus_cfg;
   ot_isp_motion_stats_cfg motion_cfg;
} ot_isp_stats_cfg;

【成员】

成员名称

描述

ctrl

统计信息使能。

update

统计信息更新使能

ae_cfg

AE统计信息配置。

wb_cfg

AWB统计信息配置。

focus_cfg

AF统计信息配置。

motion_cfg

运动区域占比统计信息配置。

【注意事项】

无。

【相关数据类型及接口】

无

ot_isp_stats_ctrl

【说明】

定义ISP 3A统计信息使能。

【定义】

typedef union {
    td_u32  key;
    struct {
        td_u32  bit1_fe_ae_global_stat         : 1;   /* [0] */
        td_u32  bit1_fe_ae_local_stat          : 1;   /* [1] not support for Hi3516CV610 */
        td_u32  bit1_fe_ae_stitch_global_stat  : 1;   /* [2] not support for Hi3516CV610 */
        td_u32  bit1_fe_ae_stitch_local_stat   : 1;   /* [3] not support for Hi3516CV610 */
        td_u32  bit1_be_ae_global_stat         : 1;   /* [4] */
        td_u32  bit1_be_ae_local_stat          : 1;   /* [5] */
        td_u32  bit1_be_ae_stitch_global_stat  : 1;   /* [6] not support for Hi3516CV610 */
        td_u32  bit1_be_ae_stitch_local_stat   : 1;   /* [7] not support for Hi3516CV610 */
        td_u32  bit1_awb_stat1                 : 1;   /* [8] */
        td_u32  bit1_awb_stat2                 : 1;   /* [9] */
        td_u32  bit2_reserved0                 : 2;   /* [10:11] */
        td_u32  bit1_fe_af_stat                : 1;   /* [12] not support for Hi3516CV610 */
        td_u32  bit1_be_af_stat                : 1;   /* [13] */
        td_u32  bit2_reserved1                 : 2;   /* [14:15] */
        td_u32  bit1_dehaze                    : 1;   /* [16] */
        td_u32  bit1_mg_stat                   : 1;   /* [17] not support for Hi3516CV610 */
        td_u32  bit1_extend_stats              : 1;   /* [18] */
        td_u32  bit13_reserved                 : 13;   /* [19:31] */
    };
} ot_isp_stats_ctrl;

【成员】

成员名称

描述

bit1_fe_ae_global_stat

位于FE的AE全局统计信息使能。包括直方图和全局均值。Hi3516CV610不支持FE全局均值。

bit1_fe_ae_local_stat

位于FE的AE分块均值统计信息使能。Hi3516CV610不支持。

bit1_fe_ae_stitch_global_stat

拼接后位于FE的AE全局统计信息使能。包括直方图和全局均值。仅在拼接模式下生效。Hi3516CV610不支持。

bit1_fe_ae_stitch_local_stat

拼接后位于FE的AE分块均值统计信息使能。仅在拼接模式下生效。Hi3516CV610不支持。

bit1_be_ae_global_stat

位于BE的AE全局统计信息使能。包括直方图和全局均值。

bit1_be_ae_local_stat

位于BE的AE分块均值统计信息使能。

bit1_be_ae_stitch_global_stat

拼接后位于BE的 AE全局统计信息使能。包括直方图和全局均值。仅在拼接模式下生效。Hi3516CV610不支持。

bit1_be_ae_stitch_local_stat

拼接后位于BE的 AE分块均值统计信息使能。仅在拼接模式下生效。Hi3516CV610不支持。

bit1_awb_stat1

Bayer域AWB全局统计信息使能。

bit1_awb_stat2

Bayer域AWB分区间统计信息使能。

bit2_reserved0

保留位。

bit1_fe_af_stat

位于FE的AF统计信息使能。Hi3516CV610不支持。

bit1_be_af_stat

位于BE的AF统计信息使能。

bit2_reserved1

保留位。

bit1_dehaze

Dehaze统计信息使能。

bit1_mg_stat

MG统计信息使能。Hi3516CV610不支持。

bit1_extend_stats

扩展统计信息使能。

bit13_reserved

保留位。

【注意事项】

  • 用户可以关闭不使用的统计信息,如此就不会读相应统计信息,从而提高系统性能。
  • 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 ot_isp_stats_cfg中update中相应的bit来关掉中断服务程序中相关统计信息的更新以达到降低CPU占用率的目的。update中bit顺序定义也是bit1_fe_ae_global_stat~ bit13_reserved。

    例如:可以置零update的bit0来停止更新fe_ae_global_stat统计信息。

  • 如果用户需要使用FE统计信息估算出来的BE统计信息,则需要打开bit1_extend_stats扩展统计信息使能。

【相关数据类型及接口】

ot_isp_stats_cfg

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];
    td_u8 be_weight[OT_ISP_BE_AE_ZONE_ROW][OT_ISP_BE_AE_ZONE_COLUMN];
} ot_isp_ae_stats_cfg;

【成员】

成员名称

描述

ae_switch

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配置为同一模式。Hi3516CV610不支持。

crop

AE输入图像裁剪BE模块配置。

fe_crop

AE输入图像裁剪FE模块配置。

weight

15x17个区间的AE权重表,取值范围:[0, 15]

Hi3519DV500 FE和BE都是15*17的统计信息,使用weight同时对FE,BE的统计权重进行更新。

be_weight

32X32个区间的AE权重表,取值范围:[0, 15]

Hi3516CV610 BE提供32*32的统计信息,需用通过be_weight对BE权重表更新,FE仍然使用的weight_table的权重表。

Hi3519DV500不支持

【注意事项】

  • 线性模式数据流走的是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和行车记录仪,感兴趣区域一般在画面的中下部分,那么可适当加大场景中下部分区域的权重,使得感兴趣区域得到合理曝光。
  • HI3516CV610小分辨率时,根据该分辨率下的分块数n*m,be_weight的左上角n*m块生效。
  • WDR模式下,hist_mode、aver_mode、max_gain_mode推荐使用root模式(不开方模式),但是如果BLC偏移导致AE统计信息误差偏大,可以切换为normal模式(开方模式),减少统计信息误差。

【相关数据类型及接口】

无

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的大面积单色判断功能关闭。
  • AE统计模块在ISP pipeline BE的位置在DG后时,统计结果会受DG配置值影响;位置在WB后时,统计结果会受DG和WB配置值影响;位置在DRC后时,统计结果会受DG,WB和DRC配置值影响。位置在WB或DRC后时,如果DG增益或者WB增益配置为全0,会导致画面变黑,统计信息不对,AE调节过亮等问题。详细架构图请参考《ISP图像调优指南》2.2 ISP功能框图章节描述。

【相关数据类型及接口】

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的大面积单色判断功能关闭。
  • Hi3516CV610 FE统计信息不支持four_plane_mode。

【相关数据类型及接口】

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 enable;
    td_u16  x;
    td_u16  y;
    td_u16  width;
    td_u16  height;
} ot_isp_ae_crop;

【成员】

成员名称

描述

enable

使能Crop,0为Crop不使能,1为Crop使能。

x

Crop X 起始位置

取值范围:

  • Hi3519DV500:[0, 图像宽度 – 256]
  • Hi3516CV610:[0, 图像宽度 –120]

y

Crop Y 起始位置

取值范围:[0, 图像高度 – 120]

w

Crop 宽度。

取值范围:

  • Hi3519DV500:[256, 图像宽度]
  • Hi3516CV610:[120, 图像宽度]

h

Crop 高度

取值范围:[120, 图像高度]

【注意事项】

  • 默认分块数下,当图像裁剪分辨率小于340X226时,仅全局直方图可用。
  • 水平方向起始位置与Crop宽度之和应小于图像宽度,垂直方向起始位置与Crop高度之和应小于图像高度。
  • 对于BE的AE统计信息,ISP BE分块场景下,不支持AE CROP(输入图像裁剪)功能。
  • AE CROP(输入图像裁剪)参数会同步对MG模块生效。

【相关数据类型及接口】

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后。

【注意事项】

Expander模块在Digital Gain前,设置AWB统计在Expander后时,AWB统计输出未做Dgain增益处理。极低照度下,AWB统计输出的R, G, B均值在黑电平附近波动,准确度较差。不推荐在低照度下使用Expander后统计信息。

【相关数据类型及接口】

ot_isp_wb_stats_cfg

ot_isp_awb_crop

【说明】

对AWB模块输入图像进行裁剪。

【定义】

typedef struct {
    td_bool enable;
    td_u16  x;
    td_u16  y;
    td_u16  width;
    td_u16  height;
} ot_isp_awb_crop;

【成员】

成员名称

描述

enable

使能Crop,0为Crop不使能,1为Crop使能。

x

Crop X 起始位置

取值范围:[0, 图像宽度 – 20 * zone_col]

y

Crop Y 起始位置

取值范围:[0, 图像高度 – 15 * zone_row]

width

Crop 宽度

取值范围:[20 * zone_col, 图像宽度]

height

Crop 高度

取值范围:[15 * zone_row, 图像高度]

【注意事项】

  • AWB要求每个分块的最小分辨率为20*15,当裁剪后的图像分辨率较小,分块数较多时,如果每块的分辨率小于20*15,那么需要减少分块数,以免每块过小。
  • 水平方向起始位置与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,对应的枚举类型OT_ISP_AWB_AFTER_DG,在Digital Gain后。

zone_row

WB统计垂直方向分块个数。取值范围:[ceil(ImageHeight/1024), min(0x20, ImageHeight / 15)]。

默认值与图像高度相关(保证每个分块的高度不小于15):

如果图像高度大于等于480,默认值为0x20

如果图像高度小于480,默认值为ImageHeight/15。

垂直方向最小分块个数和图像高度相关,需保证每个分块的高度小于等于1024,比如图像高度为2160,最小分块数是3。

zone_col

WB统计水平方向分块个数,取值范围:[max(BlkNum, ceil(ImageWidth/1024), min(0x20, ImageWidth/20)], BlkNum为ISP BE的分块数目。

默认值与图像的宽度相关(保证每个分块的宽度小于20):

如果图像宽度大于640,默认值为0x20。

如果图像宽度小于640,默认值为ImageWidth/20。

水平方向最小分块个数和图像宽度相关,需保证每个分块的宽度小于等于1024,比如图像宽度为3840,最小分块数是4。

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, cb_max]

cr_max

统计白点(灰点)信息时,色差R/G的最大值,8bit精度,默认值512。取值范围:[0x0, 0xFFF]

cr_min

统计白点(灰点)信息时,色差R/G的最小值,8bit精度,默认值128。取值范围:[0x0, cr_max]

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_be_ae_grid_info

【说明】

定义AE分区间统计信息的坐标信息。

【定义】

typedef struct {
    td_u16 grid_y_pos[OT_ISP_BE_AE_ZONE_ROW + 1];
    td_u16 grid_x_pos[OT_ISP_BE_AE_ZONE_COLUMN + 1];
    td_u8  status;
} ot_isp_be_ae_grid_info;

【成员】

成员名称

描述

grid_y_pos

AE每个分区Y方向坐标值。

grid_x_pos

AE每个分区X方向坐标值。

status

AE统计信息坐标更新状态。

【注意事项】

Hi3519DV500 不支持。

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_BE_AE_ZONE_ROW][OT_ISP_BE_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM];
    ot_isp_ae_grid_info fe_grid_info;
    ot_isp_be_ae_grid_info be_grid_info;
    td_u64 pts;
} ot_isp_ae_stats;

【成员】

成员名称

描述

fe_hist1024_value

FE全局1024段直方图信息。取值范围:[0x0, 0xFFFFFFFF]

fe_global_avg

FE全局统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

Hi3516CV610不支持。

fe_zone_avg

FE分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

Hi3516CV610不支持。

be_estimate_hist1024_value

根据FE直方图信息估算的BE全局1024段直方图信息。取值范围:[0x0, 0xFFFFFFFF]

be_hist1024_value

BE全局1024段直方图信息。取值范围:[0x0, 0xFFFFFFFF]

be_global_avg

BE全局统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

be_zone_avg

BE分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

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保持一致,无需单独配置。如果DG增益或者WB增益配置为全0,会导致统计信息不对,AE调节过亮等问题。
  • 当图像宽小于600或高小于200时,分区间统计信息不可用。
  • be_estimate_hist1024_value仅在2合1WDR模式下可使用,且仅支持估算DG后的统计信息,该直方图形式不支持FourPlaneMode。噪声会对BE统计信息有影响,在噪声大的场景,开启BNR之后,估算的统计信息不能接近真实的BE统计信息。另外DPC、CRB(Hi3519dv500, Hi3516CV610不支持)、LSC等模块也会影响统计信息的估算。
  • YUV模式不支持获取统计信息pts。
  • pts每帧都会覆盖更新,若需要获取到每一帧raw对应的统计信息pts,则需要以帧间隔调用此接口;否则,统计信息pts与raw pts可能不是一一对应的。
  • 帧合成WDR通路,长帧送FE0,短帧送FE1。为了AE看到统计信息和普通WDR模式保持一致,会将FE1的数据放在索引0,FE0的数据放在索引1。

  • fe_hist1024_value、be_hist1024_value分别表示位于FE及BE的全局1024段直方图统计信息。该统计信息取自输入数据流中的高10bit数据统计,每个bin中的数据表示该灰度值对应的像素个数。全局1024段直方图受分区间权重的影响,1024个bin的数据之和即为带权重统计的像素点个数。目前,AE算法默认使用Gr通道的统计信息,在大面积红色时,采用R和Gb通道的统计信息,在大面积蓝色时,采用B和Gr通道的统计信息。

  • 当MIPI、VI DEV的data_rate配置为DATA_RATE_X2时,fe_hist1024_value中的pixel_count、pixel_weight数目会减半。
  • fe_global_avg、be_global_avg分别表示位于FE及BE的全局R/Gr/Gb/B 4分量取高16bit统计得到的均值,取值范围:[0, 0xFFFF]。全局4分量平均值受分区间权重影响。
  • fe_zone_avg、be_zone_avg分别表示位于FE及BE的15*17区间每个区间R/Gr/Gb/B 4分量取高16bit统计得到的均值,取值范围:[0, 0xFFFF]
  • AE统计模块可将输入数据开方后再进行统计。数据开方,指对输入数据归一化至1后做开方处理。以1024段直方图统计为例:

    • 若输入数据为12bit,某个像素值为2048,若数据开方关闭,直接取高10bit数据进行统计,为灰度值512对应的bin像素个数加1;
    • 若数据开方使能,像素值2048归一化至1后为0.5,0.5开方为0.707,用10bit表示0.707为724,此时在直方图上表现为灰度值724对应的bin像素个数加1。

    由此可见,像素值较小的数据开方处理后像素值显著增大,相当于通过压缩亮区的统计精度来提升暗区的统计精度。建议在WDR模式下数据开方使能,线性模式下数据开方关闭。在开方模式下,统计精度为11bit,低5bit值为0,因此16bit最大值为0xFFE0。此外,AE统计模块在ISP pipeline的位置可以变化。

  • hmax_time * vmax * fps = 1s,其中vmax 和 fps都由sensor驱动内部确定,hmax_time依据此公式计算,单位ns。

表 1 统计信息ot_isp_ae_stats的成员变量默认配置说明

成员名称

主要统计信息

默认位置

黑电平

权重表影响

fe_hist1024_value

WDR合成前1024段直方图

FE-WB之后

未减

是

fe_global_avg

WDR合成前全局均值

FE-WB之后

未减

是

fe_zone_avg

WDR合成前分块均值

FE-WB之后

未减

否

be_hist1024_value

WDR合成后1024段直方图

BE-WB之后

已减

是

be_global_avg

WDR合成后全局均值

BE-WB之后

已减

是

be_zone_avg

WDR合成后分块均值

BE-WB之后

已减

否

说明:

  • 表1中指出仅在ISP默认配置下生效,实际会受到黑电平配置及AE统计信息位置的影响。
  • WDR合成前(FE)统计信息为固定在WB模块之后,不可配置。使用FE统计信息时需要减去黑电平,直方图应减去10bit黑电平,均值应减去16bit黑电平。WDR合成前(FE)统计信息受到位于FE AE之前处理模块(在Hi3519DV500中,FE AE之前的处理模块包括DG/WB)增益影响,这些模块的FE增益值由算法内部确保与BE保持一致,无需单独配置。
  • 在Hi3519DV500中第0路FE统计信息会经过水平下采样,因此点数减半。
  • 线性模式推荐使用WDR合成前(FE)1024段直方图。WDR模式推荐使用WDR合成前(FE)1024段直方图,或者使用WDR合成后(BE)开方模式的1024段直方图。离线模式下业务压力大时,WDR合成前(FE)实时性更好,因此离线模式下推荐使用FE统计信息。SDK提供的AE算法在如果采用的是BE统计信息,默认在线性模式下使用(BE)不开方模式的统计信息,在WDR模式下使用(BE)开方模式的统计信息。如果线性模式下使用(BE)开方模式的统计信息,或者WDR模式下使用(BE)不开方模式的统计信息,会导致SDK提供AE算法异常。
  • Hi3519DV500: FE通路中只有FE0,FE2支持分块统计信息,全局均值统计信息和1024段直方图。FE1,FE3只支持256段直方图。
  • Hi3516CV610: FE通路只支持256段直方图,不支持分块统计信息和全局均值统计信息。
  • 仅当使用FE0和FE2拼接时,才有拼接后的1024段直方图信息和均值信息,其他路径拼接仅有256段直方图信息。

【相关数据类型及接口】

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_STITCH_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_STITCH_NUM][OT_ISP_BE_AE_ZONE_ROW][OT_ISP_BE_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM];
    td_u64 pts;
} ot_isp_ae_stitch_stats;

【成员】

成员名称

描述

fe_hist1024_value

FE全局1024段直方图信息。取值范围:[0x0, 0xFFFFFFFF]

fe_global_avg

FE全局统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

fe_zone_avg

FE分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

be_hist1024_value

BE全局1024段直方图信息。取值范围:[0x0, 0xFFFFFFFF]

be_global_avg

BE全局统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

be_zone_avg

BE分区间统计平均值,按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

pts

AE拼接统计信息对应的主pipe raw pts。取值范围:[0x0, 0xFFFFFFFFFFFFFFFF]

【注意事项】

  • 拼接后统计信息仅在拼接模式下生效,并且仅在拼接主路可以获取。
  • 拼接后的分块均值只有参与拼接的Pipe分区间均值有效,其余Pipe的均值无效。如Pipe0和Pipe1进行拼接,则OT_ISP_MAX_STITCH_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可能不是一一对应的。
  • Hi3516CV610不支持。

【相关数据类型及接口】

无

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统计信息,会出现图像与统计信息不对应的情况,为避免这种问题,故提供每个分区的起始坐标信息。
  • Hi3516CV610不支持。

【相关数据类型及接口】

无

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分量的平均值。取值范围:[0x0, 0xFF]

grid_info

MG分区间统计信息的坐标值。

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

无

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裁剪配置。Hi3516CV610不支持。

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_mode为OT_ISP_AF_STA_SUM_NORM模式时,对分区间内每个像素的输出值求和即为分区间统计值;
  • 当square_mode为OT_ISP_AF_STA_SUM_SQUARE模式时,对分区间内每个像素的滤波器输出值求平方和即为分区间统计值。

OT_ISP_AF_STA_PEAK

  • 当square_mode为OT_ISP_AF_STA_SUM_NORM模式时,先对分区间内一行中每个像素的滤波器输出值取最大值,再对多行的最大值求和即为分区间统计值;
  • 当square_mode为OT_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 enable;
    td_u16  x;
    td_u16  y;
    td_u16  width;
    td_u16  height;
} ot_isp_af_crop;

【成员】

成员名称

描述

enable

使能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]

Hi3519DV500, Hi3516CV610不支持

gamma_value

AF模块gamma类型。

取值范围:[0x0, 0x1]

bayer_format

设置Bayer pattern,支持BAYER_RGGB,BAYER_GRBG,BAYER_GBRG,BAYER_BGGR四种。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_af_pre_filter_cfg

【说明】

AF模块预滤波器配置。

【定义】

typedef struct {
    td_bool             enable;
    td_u16              strength;
} ot_isp_af_pre_filter_cfg;

【成员】

成员名称

描述

enable

使能AF 预滤波模块。

strength

设置滤波强度,取值范围:[0x0, 0xFFFF]

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_af_level_depend

【说明】

AF Level Depend Gain 模块配置。

【定义】

typedef struct {
    td_bool     enable;
    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;

【成员】

成员名称

描述

enable

使能Level Depend Gain模块。

threshold_low

设置暗侧阈值,取值范围:[0x0, 0xFF]

gain_low

设置暗侧最小增益,取值范围:[0x0, 0xFF]

slope_low

设置暗侧斜率,取值范围:[0x0, 0xF]

threshold_high

设置亮侧阈值,取值范围:[0x0, 0xFF]

gain_high

设置亮侧最小增益,取值范围:[0x0, 0xFF]

slope_high

设置亮侧斜率,取值范围:[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统计值输出。
  • iir_shift Hi3519DV500, Hi3516CV610不支持。可以使用iir_shift_lut进行替代。

【相关数据类型及接口】

无

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值用unsinged 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滤波器的统计值,取值范围:[0x0, 0xFFFF]。

h1

分区间统计的AF水平方向奇数行IIR滤波器的统计值 ,取值范围:[0x0, 0xFFFF]。

v2

分区间统计的AF垂直方向偶数列FIR滤波器的统计值,取值范围:[0x0, 0xFFFF]。

h2

分区间统计的AF水平方向偶数行IIR滤波器的统计值,取值范围:[0x0, 0xFFFF]。

y

分区间统计的AF亮度统计值,区块中每个像素点的亮度累加值,取值范围:[0x0, 0xFFFF]。

hl_cnt

分区间统计的AF亮度超阈值计数器值。

  • Hi3519DV500 取值范围:[0x0, 0xFFFF]
  • Hi3516CV610 取值范围:[0x0, 0x7FFF]

【注意事项】

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分块统计信息。

【注意事项】

Hi3516CV610不支持

【相关数据类型及接口】

无

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统计信息。Hi3516CV610不支持。

be_af_stat

ISP BE的AF统计信息。

fe_af_grid_info

ISP FE 的AF分区间统计信息的坐标。Hi3516CV610不支持。

be_af_grid_info

ISP BE 的AF分区间统计的信息坐标。

pts

AF统计信息对应的raw pts。

【注意事项】

  • 线性模式下离线模式推荐使用FE的统计信息(实时性更佳)。
  • WDR模式下推荐使用BE DRC后的统计信息(参考ot_isp_af_stats_pos)。
  • Hi3519DV500中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统计信息的索引也要相应调整。
  • Hi3516CV610 FE没有AF统计模块,因此FE相关的AF配置都不生效。

【相关数据类型及接口】

无

ot_isp_detail_stats_cfg

【说明】

定义detail_stats统计信息的配置。

【定义】

typedef struct {
    td_bool enable;
    ot_isp_detail_stats_ctrl ctrl;
    td_u8 row;
    td_u8 col;
    td_u16 interval;
} ot_isp_detail_stats_cfg;

【成员】

成员名称

描述

enable

detail_stats统计信息的使能开关,取值范围[0, 1]。

ctrl

detail_stats统计信息读取的控制使能。请见ot_isp_detail_stats_ctrl 接口。

row

detail_stats的垂直分块行数。取值范围[1, 4], 当col=1,enable=true时,row取值范围为(1, 4]。

col

detail_stats的水平分块列数。取值范围[1, 6], 当row=1,enable=true时,col取值范围为(1, 6]。

interval

detail_stats的统计信息的统计间隔,单位:帧数。取值范围[1, 0xfffff]。

【注意事项】

  • 接口注意事项请见ss_mpi_isp_set_detail_stats_cfg接口描述
  • detail_stats的enable等于true时,col和row不能同时等于1。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ss_mpi_isp_set_detail_stats_cfg

ss_mpi_isp_get_detail_stats_cfg

ot_isp_detail_stats_ctrl

【说明】

定义detail_stats中读取统计信息的控制使能。

【定义】

typedef union {
    td_u32  key;
    struct {
        td_u32  bit1_ae         : 1;
        td_u32  bit1_awb        : 1;
        td_u32  bit30_reserved  : 30;
    };
} ot_isp_detail_stats_ctrl;

【成员】

成员名称

描述

bit1_ae

detail_stats统计信息的ae统计使能开关,取值范围[0, 1]。

bit1_awb

detail_stats统计信息的awb统计使能开关,取值范围[0, 1]。

bit30_reserved

保留位。

【注意事项】

  • 当bit1_ae等于0时,关闭AE统计detail_stats统计信息使能,将获取不到对应的AE detail_stats统计信息。
  • 当bit1_awb等于0时,关闭AWB统计detail_stats统计信息使能,将获取不到对应的AWB detail_stats统计信息。
  • detail_stats的enable等于true时,bit1_ae和bit1_awb不能同时等于0。
  • Hi3516CV610不支持。

【相关数据类型及接口】

ss_mpi_isp_set_detail_stats_cfg

ss_mpi_isp_get_detail_stats_cfg

ot_isp_detail_stats

【说明】

定义detail_stats中统计信息。

【定义】

typedef struct {
    ot_isp_detail_ae_stats ae_stats;
    ot_isp_detail_awb_stats awb_stats;
    td_u64 pts;
} ot_isp_detail_stats;

【成员】

成员名称

描述

ae_stats

detail_stats统计信息的ae分块统计信息。具体请见ot_isp_detail_ae_stats。

awb_stats

detail_stats统计信息的awb分块统计信息。具体请见ot_isp_detail_awb_stats 。

pts

统计信息对应帧的pts值

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

ss_mpi_isp_get_detail_stats

ot_isp_detail_ae_stats

【说明】

定义AE的detail_stats统计信息。

【定义】

typedef struct {
    td_u16 be_zone_avg[OT_ISP_DETAIL_AE_ZONE_ROW][OT_ISP_DETAIL_AE_ZONE_COLUMN][OT_ISP_BAYER_CHN_NUM];
    ot_isp_detail_ae_grid_info ae_grid_info;
} ot_isp_detail_ae_stats;

【成员】

成员名称

描述

be_zone_avg

detail_stats统计信息的ae分块统计信息。

按顺序分别表示R,Gr,Gb,B分量的平均值。取值范围:[0x0, 0xFFFF]

ae_grid_info

detail_stats统计信息的ae分块统计信息中各分块的坐标。

【注意事项】

【相关数据类型及接口】

ot_isp_detail_stats

ss_mpi_isp_get_detail_stats

ot_isp_detail_awb_stats

【说明】

定义AWB的detail_stats统计信息。

【定义】

typedef struct {
    td_u16 zone_avg_r[OT_ISP_DETAIL_AWB_ZONE_NUM];
    td_u16 zone_avg_g[OT_ISP_DETAIL_AWB_ZONE_NUM];
    td_u16 zone_avg_b[OT_ISP_DETAIL_AWB_ZONE_NUM];
    td_u16 zone_count_all[OT_ISP_DETAIL_AWB_ZONE_NUM];
    ot_isp_detail_awb_grid_info awb_grid_info;
} ot_isp_detail_awb_stats;

【成员】

成员名称

描述

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]

awb_grid_info

Awb detail_stats分区间统计信息的坐标信息。

【注意事项】

【相关数据类型及接口】

ot_isp_detail_stats

ss_mpi_isp_get_detail_stats

ot_isp_detail_ae_grid_info

【说明】

定义AE的detail_stats分区间统计信息的坐标信息。

【定义】

typedef struct {
    td_u16 grid_y_pos[OT_ISP_DETAIL_AE_ZONE_ROW + 1];
    td_u16 grid_x_pos[OT_ISP_DETAIL_AE_ZONE_COLUMN + 1];
    td_u8 status;
} ot_isp_detail_ae_grid_info;

【成员】

成员名称

描述

grid_y_pos

AE detail_stats统计信息每个分区Y方向坐标值。

grid_x_pos

AE detail_stats统计信息每个分区X方向坐标值。

status

AE detail_stats统计信息坐标更新状态。

【注意事项】

  • AE detail分块统计信息的坐标信息,status标志位代表坐标信息已更新。存放统计信息的内存如果已经获取过坐标信息,可以不清除status状态位,同样分辨率和同样分块数时,坐标信息不变,ISP内部可根据此标志位,节省计算坐标的耗时,从而节省获取统计信息接口的耗时。
  • Hi3516CV610不支持此结构体的功能。

【相关数据类型及接口

ot_isp_detail_ae_stats

ot_isp_detail_stats

ss_mpi_isp_get_detail_stats

ot_isp_detail_awb_grid_info

【说明】

定义AWB detail_stats分区间统计信息的坐标信息。

【定义】

typedef struct {
    td_u16 grid_y_pos[OT_ISP_AWB_ZONE_ORIG_ROW * OT_ISP_DETAIL_STATS_MAX_ROW + 1];
    td_u16 grid_x_pos[OT_ISP_AWB_ZONE_ORIG_COLUMN * OT_ISP_DETAIL_STATS_MAX_COLUMN + 1];
    td_u8 status;
} ot_isp_detail_awb_grid_info;

【成员】

成员名称

描述

grid_y_pos

AWB每个分区Y方向坐标值。

grid_x_pos

AWB每个分区X方向坐标值。

status

AWB统计信息坐标更新状态。

【注意事项】

  • AWB detail分块统计信息的坐标信息,status标志位代表坐标信息已更新。存放统计信息的内存如果已经获取过坐标信息,可以不清除status状态位,同样分辨率和同样分块数时,坐标信息不变,ISP内部可根据此标志位,节省计算坐标的耗时,从而节省获取统计信息接口的耗时。
  • Hi3516CV610不支持

【相关数据类型及接口】

ot_isp_detail_awb_stats

ot_isp_detail_stats

ss_mpi_isp_get_detail_stats

OT_ISP_DETAIL_AE_ZONE_ROW

【说明】

定义AE的detail_stats分块统计信息垂直方向的分块行数。

【定义】

#define OT_ISP_DETAIL_AE_ZONE_ROW  (OT_ISP_AE_ZONE_ROW * OT_ISP_DETAIL_STATS_MAX_ROW)

【注意事项】

无。

【相关数据类型及接口】

ot_isp_detail_ae_grid_info

ot_isp_detail_ae_stats

OT_ISP_DETAIL_AE_ZONE_COLUMN

【说明】

定义AE的detail_stats分块统计信息水平方向的分块列数。

【定义】

#define OT_ISP_DETAIL_AE_ZONE_COLUMN  (OT_ISP_AE_ZONE_COLUMN* OT_ISP_DETAIL_STATS_MAX_COLUMN)

【注意事项】

无。

【相关数据类型及接口】

ot_isp_detail_ae_grid_info

ot_isp_detail_ae_stats

OT_ISP_DETAIL_AWB_ZONE_NUM

【说明】

定义AWB的detail_stats分块统计信息分块个数。

【定义】

#define OT_ISP_DETAIL_AWB_ZONE_NUM (OT_ISP_AWB_ZONE_NUM* OT_ISP_DETAIL_STATS_BLK_NUM_MAX)

【注意事项】

无。

【相关数据类型及接口】

无。

OT_ISP_DETAIL_STATS_MAX_ROW

【说明】

定义detail_stats分块统计信息垂直方向的最大分块个数。

【定义】

#define OT_ISP_DETAIL_STATS_MAX_ROW    4

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_DETAIL_STATS_BLK_NUM_MAX

OT_ISP_DETAIL_AE_ZONE_ROW

ot_isp_detail_awb_grid_info

OT_ISP_DETAIL_STATS_MAX_COLUMN

【说明】

定义detail_stats分块统计信息水平方向的最大分块列数。

【定义】

#define OT_ISP_DETAIL_STATS_MAX_COLUMN    6

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_DETAIL_AE_ZONE_COLUMN

OT_ISP_DETAIL_STATS_BLK_NUM_MAX

ot_isp_detail_awb_grid_info

OT_ISP_DETAIL_STATS_BLK_NUM_MAX

【说明】

定义detail_stats分块统计信息水平方向的最大分块行数。

【定义】

#define OT_ISP_DETAIL_STATS_BLK_NUM_MAX (OT_ISP_DETAIL_STATS_MAX_COLUMN * OT_ISP_DETAIL_STATS_MAX_ROW)

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_DETAIL_AWB_ZONE_NUM

ot_isp_motion_stats_cfg

【说明】

定义运动区域占比统计信息的配置。

【定义】

typedef struct {
    td_bool motion_stats_en;
    td_u8 motion_thr;
} ot_isp_motion_stats_cfg;

【成员】

成员名称

描述

motion_stats_en

运动占比统计信息的使能开关,取值范围:[0, 1]

motion_thr

运动占比统计阈值,取值范围:[0, 0x10], 超过此阈值认为是运动区域,默认值为7。

【注意事项】

  • 只有BNR中md开关和nr使能都打开,才支持获取运动占比统计信息,motion_stats_en才能配置为true. 具体可见ot_isp_nr_attr中的md_en使能和enable(nr使能)。否则不支持motion_stats_en配置为true。
  • 当motion_stats_en=true时,需要将BNR的buf个数增加到3个,才能获取到正确的运动区域占比统计信息,修改接口请见《MPP 媒体处理软件 V6.0 开发参考》“视频输入”章节的ss_mpi_vi_set_pipe_bnr_buf_num。

【相关数据类型及接口】

ss_mpi_isp_set_stats_cfg

ss_mpi_isp_get_stats_cfg

ot_isp_motion_stats

【说明】

定义运动区域占比统计信息。

【定义】

typedef struct {
    td_u8 motion_ratio;
    td_u64 pts;
} ot_isp_motion_stats;

【成员】

成员名称

描述

motion_ratio

运动区域占比百分比,取值范围:[0, 100]

pts

时间戳信息。

【注意事项】

  • 只有BNR中md开关和nr使能都打开,才支持获取运动占比统计信息,具体可见ot_isp_nr_attr中的md_en使能和enable(nr使能)。
  • 只有ot_isp_motion_stats_cfg中的motion_stats_en打开,才支持获取运动占比统计信息。

【相关数据类型及接口】

ss_mpi_isp_get_motion_stats

Debug

概述

ISP提供Debug MPI供客户调用,以方便客户定位相关图像质量问题。

功能描述

Debug提供记录ISP在运行过程中的状态信息,以方便记录在ISP运行过程中出现的异常状态,需要记录的帧数可以由用户自己指定。

API参考

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_mpi_isp.a、libss_mpi_isp.a

【注意】

  • 调试信息的成员变量为SYS,可以设置使能开关。
  • 需要用户来分配内存以存储相应的调试信息,且需要将分配的内存地址作为输入传入。
  • 调用该接口的进程需要与isp主进程是不同进程。
  • 该接口主要提供给PQT使用,不建议其他功能使用。

【举例】

td_s32 ret = 0;
td_u32  depth   = 10;
td_u32  size    = 0;
ot_isp_debug_info  debug_ifo;td_void *virt_Addr   = TD_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_Addr, 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;
debug_ifo.debug_type = OT_ISP_DEBUG_BLC;
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_mpi_isp.a、libss_mpi_isp.a

【注意】

该接口主要提供给PQT使用,不建议其他功能使用。

【举例】

无

数据类型

ot_isp_debug_info

【说明】

定义ISP调试信息属性。

【定义】

typedef struct {
    ot_isp_debug_type debug_type;
    td_bool debug_en;
    td_u64  phys_addr;
    td_u32  depth;
} ot_isp_debug_info;

【成员】

成员名称

描述

debug_type

获取调试信息的算法

debug_en

使能调试。

phys_addr

调试信息的物理地址。

depth

调试深度,即需要获取调试信息的帧数。

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_debug_type

【说明】

定义ISP调试信息的算法。

【定义】

typedef enum {
    OT_ISP_DEBUG_AE = 0,
    OT_ISP_DEBUG_AWB,
    OT_ISP_DEBUG_BLC,
    OT_ISP_DEBUG_DEHAZE,
    OT_ISP_DEBUG_BUTT,
} ot_isp_debug_type;

【成员】

成员名称

描述

OT_ISP_DEBUG_AE

AE调试信息。

OT_ISP_DEBUG_AWB

AWB调试信息。

OT_ISP_DEBUG_BLC

BLC调试信息。

OT_ISP_DEBUG_DEHAZE

DEHAZE调试信息。

【注意事项】

无

【相关数据类型及接口】

ot_isp_debug_info

ot_isp_debug_attr

【说明】

定义ISP调试属性

【定义】

typedef struct {
    td_u32  reserved;
} ot_isp_debug_attr;

【成员】

成员名称

描述

reserved

预留配置信息

【注意事项】

无

【相关数据类型及接口】

无

ot_isp_debug_status

【说明】

定义ISP调试参数

【定义】

typedef struct {
    td_u32  frame_num_begain;
    td_u16  black_level_actual[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
    td_u16  black_level_original[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
    td_u32  frame_num_end;
} ot_isp_debug_status;

【成员】

成员名称

描述

frame_num_begain

统计黑电平起始帧

black_level_actual

最终输出的黑电平

black_level_original

逻辑里读出的黑电平

frame_num_end

统计黑电平结束帧

【注意事项】

black_level_original只在动态黑电平打开时才能获取到。

【相关数据类型及接口】

无

错误码

ISP API错误码如Tableau 1所示。

表 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_TIMEOUT

等待超时

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为准。

  • 算法Proc信息是在用户态更新,若算法proc信息与cat命令查看信息同时操作,则cat查看不到算法proc信息,需要再次执行cat命令。

【信息查看方法】

  • 在控制台上可以使用cat命令查看信息,例如cat /proc/umap/isp;也可以使用其他常用的文件操作命令,例如cp /proc/umap/isp ./ -rf,将ISP的proc文件拷贝到当前目录。
  • 在应用程序中可以将上述文件当作普通只读文件进行读操作,例如fopen、fread等。

说明:

参数在描述时有以下2种情况需要注意:

  • 取值为{0, 1}的参数,如未列出具体取值和含义的对应关系,则参数为1时表示肯定,为0时表示否定。
  • 取值为{aaa, bbb, ccc}的参数,未列出具体取值和含义的对应关系,但可直接根据取值aaa、bbb或ccc判断参数含义。

ISP

【调试信息】

[ISP] Version: [Hi3519DV500_MPP_V1.0.0.0 B010 Release], Build Time[Oct 26 2022, 14:03:12]
----------------------------------------ISP framework: 25122701---------------------------------------------------------
----------------------------------------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            20           frame end      normal

----------------------------------------detail stats info---------------------------------------------------------------
 enable       ctrl        col       row  interval
     1     ae awb          2         2         1

 blk_w0      blk_w1      blk_h0     blk_h1 
   960        960         1080       1080 

----------------------------------------isp mode------------------------------------------------------------------------
stitch_mode    running_mode       block_num    data_mode    run_once
normal             online             1         raw            0

----------------------------------------sensor info---------------------------------------------------------------------
sensor_type       dev
i2c               0

----------------------------------------drv info------------------------------------------------------------------------
   vi_pipe        int_cnt          int_t      max_int_t      avg_int_t      int_gap_t      max_gap_t        int_rat
         0           2439            214            272            214          33291          33542             31

  int_type    pt_int_cnt       pt_int_t   pt_max_int_t   pt_int_gap_t   pt_max_gap_t     pt_int_rat      reset_cnt
     start             0              0              0              0              0              0              2

 fe_stat_t fe_stat_max_t    cp_stat_t  cp_stat_max_t      be_stat_t be_stat_max_t   be_stat_lost
        27            34           31             58             83            101              7

  be_end_t  be_end_max_t   sensor_cfg_t   sensor_max_t   sensor_avg_t             
         0             0              7             34              7                                    

 sync_cfg_gap   sync_cfg_gap_max   sync_cfg_gap_min  ldci_comp_err_cnt   stitch_pts_cnt     sync_id_err_cnt
        33290              33542              32950                  0                0                   0
    usr_t      max_usr_t       cros_cnt     cros_end_t     cros_usr_t     cros_run_t  cros_switch_t    cros_lock_t
       961           2190              0              0              0              0              0              0

 cros_pre_run_t      cros_pre_swi_t     cros_pre_lock_t
              0                   0                   0

----------------------------------------pubattr info--------------------------------------------------------------------
wnd_x       wnd_y       wnd_w       wnd_h       sns_w       sns_h    sns_mode      flip      mirror       bayer
0           0           1920        1080        1920        1080           0         0           0        rggb

crop_en      crop_x      crop_y      crop_w      crop_h     wdr_mode
0            0           0           1920        1080         linear

----------------------------------------send raw isp frame info---------------------------------------------------------

----------------------------------------fe roi info---------------------------------------------------------------------
fe_roi_en    fe_roi_x    fe_roi_y    fe_roi_w    fe_roi_h
0             0             0              1919        1079

----------------------------------------share mem info------------------------------------------------------------------
   share_all_en    share[0]    share[1]    share[2]    share[3]    share[4]
              0        1982


[AE] Version: [Hi3519DV500_MPP_V1.0.0.0 B010 Release], Build Time[Oct 25 2022, 17:27:11]
----------------------------------------ae info-------------------------------------------------------------------------
sys_gain    line  ae_inter  in_crmnt               exp    1st_time
1024        554         1       256               15375    566666

comp    ev_bias    ori_ave     offset      speed       tole     error       fps  real_fps   b_delay   w_delay
56       1024         45            9       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
1124      65535          62416      38485       2048     4691562       0         0       0            0       0

wdr_mode    anflick   slow_mod    gain_th   au_ir_en    ir_type   ma_ir_en  dbg_ir_st     stat_pos  
linear        0          1        4691562        0       dc_iris       0          0           BE    

face_luma   pep_luma  noroi_cnt   exp_coef
        0          0        349       1024

node_id       int_time       sys_gain       iris_ape                  up_stgy        dw_stgy                mltply
0                1             1024              1                     0                  4                    1024
1             1124             1024              1                     1                  0                 1150976
2             1124           4691562             1                     4                  1               5273315688


----------------------------------------isp ae info---------------------------------------------------------------------
again      dgain     isp_dg        iso
1024       1024       1024        100

int_time[0]    int_time[1]    int_time[2]    int_time[3]   ae_inter       sns_ratio
262403              0                0                   0                 1                  64

piris_valid      piris_pos     piris_gain     hmax_times       vmax
0              0                  1                  29603            1126


[AWB] Version: [Hi3519DV500_MPP_V1.0.0.0 B010 Release], Build Time[Oct 25 2022, 17:27:11]
----------------------------------------awb info------------------------------------------------------------------------
manuen     sat      zones   speed
0          128     32         256

sector_en    hue0    hue1    hue2    hue3    hue4    hue5
        1      20      20       0      20      20      20

             sat0    sat1    sat2    sat3    sat4    sat5
               20      20      20      20      20      20

----------------------------------------isp awb info--------------------------------------------------------------------
gain0   gain1   gain2   gain3  cotemp
0x1d2   0x100   0x100   0x185    5988

color00 color01 color02 color10 color11 color12 color20 color21 color22
0x1ca    0x80a9  0x8021  0x8040   0x1b5  0x8075  0x8009  0x8086   0x18f


----------------------------------------dpc info------------------------------------------------------------------------
enable    strength blend_ratio
1           0           0
1           0           0

----------------------------------------crosstalk info------------------------------------------------------------------
enable   slope   sensi_slope   threshold    sensi_th    strength   filter_md
1         9           9            300           300      128             0

----------------------------------------fswdr info-------------------------------------------------------------------
motion_comp_en  long_thr   short_thr   md_thr_low_gain  md_thr_high_gain
0        3008          4032             0                  0

----------------------------------------fpn correct info(Hi3519DV500)----------------------------------------------------------------
en     op_type      strength    offset    aibnr_mode
0      --             --           --             --
----------------------------------------fpn correct info(Hi3516CV610)----------------------------------------------------------------
      en op_type  strength offset0 offset1
       0      --        --      --      --
----------------------------------------black level actual info---------------------------------------------------------
mode   user_en  blc_mode  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     global        960        960        960        960        960        960        960        960

offset      ob_x       ob_y   ob_width  ob_height  blc_clamp_info
0            0          0       1920         10               1

----------------------------------------bayernr info(Hi3519DV500)--------------------------------------------------
enable     tnr_enable    sfm0_coarse_str1    sfm0_coarse_str2    sfm0_coarse_str3    sfm0_coarse_str4
1              1                 108                   108                 108                  108
nr_lsc_enable          coring_wgt       fine_strength        sfm0_de_prot    coring_mot_ratio
0                         50                      128              16                    0
sfm1_strength       sfm1_adp_strength       sfm6_strength       sfm7_strength                 sth
512                            2                   64                       64                100
md_mode   md_size_ratio         tfs       sfr_r       sfr_g       sfr_b   md_sta_ratio   md_mot_ratio
1                    32        255         26           32           26           26              13
user_def_md      user_def_slope       user_def_dark      user_def_color     md_anti_fli_str     md_sta_fine_str
0                            0                 90                16                  32                   32
dering_strength       dering_thresh        dering_sta_strength       dering_mot_strength
64                         64                          16                          16
snr_sfm0_wdr_str0   snr_sfm0_wdr_str1   snr_sfm0_wdr_str3   snr_sfm0_fus_str0   snr_sfm0_fus_str1
16                            16                  16                  16                   16
md_wdr_str0         md_wdr_str1         md_fus_str0         md_fus_str1
16                         16                  16                 16
snr_wdr_sfm6_str0   snr_wdr_sfm6_str1   snr_wdr_sfm7_str0   snr_wdr_sfm7_str1
64                             16                64                    16
snr_fus_sfm6_str0   snr_fus_sfm6_str1   snr_fus_sfm7_str0   snr_fus_sfm7_str1
64                            16                  64                    16
bnr_proc_iso              k              b
237                 0.067507       0.025618
----------------------------------------bayernr info(Hi3516CV610)-------------------------------------
    enable     md_en  nr_lsc_enable  fine_strength   sfm0_de_prot       tss     coring_wgt
         1         1              0            128             16         0             50

    sfm0_coarse_str1    sfm0_coarse_str2    sfm0_coarse_str3    sfm0_coarse_str4       ref_mode    load_ref_en
                 108                 108                 108                 108        md_mode              0

   md_mode       tfs   md_sta_ratio        md_mot_ratio     md_sta_fine_str
         2       255             26                  13                  32

     md_anti_fli_str         user_def_md      user_def_slope       user_def_dark       sfr_r       sfr_g       sfr_b
                  32                   0                   0                  90          26          32          26

   snr_sfm0_wdr_str0   snr_sfm0_wdr_str1   snr_sfm0_wdr_str3   snr_sfm0_fus_str0   snr_sfm0_fus_str1
                  16                  16                  16                  16                  16

         md_wdr_str0         md_wdr_str1         md_fus_str0         md_fus_str1
                  16                  16                  16                  16
   bnr_proc_iso              k              b
          25118       4.303804       9.501861
----------------------------------------acs info------------------------------------------------------------------------
enable      y_strength    run_interval     lock_enable
0             256               2               0
----------------------------------------radial_crop info----------------------------------------------------------------
enable      center_ver      center_hor     radius
0               0            3839             540
----------------------------------------drc info------------------------------------------------------------------------
en         manu_en        strength
0               0               0
----------------------------------------dehaze info------------------------------------------------------------------------
en         manu_en        manu_strength        auto_strength
0               0                 0                               0
----------------------------------------cac info------------------------------------------------------------------------
enable     edge_thr[0]     edge_thr[1]       edge_gain cac_rb_strength
0               0               0               0               0
satu_low_thd   satu_high_thd    purple_alpha      edge_alpha          cr_str          cb_str
0               0               0                    0                0               0

----------------------------------------bayershp info-------------------------------------------------------------------
enable         mf_gain         hf_gain       dark_gain       overshoot      undershoot
1               3               2               1             128             128
mf_strength:
       0       0      32      32      32      32      32      32

hf_strength:
       0       0      16      32      32      16      16       0

dark_strength:
       0       0      16      16       4       2       0       0
----------------------------------------demosaic info-------------------------------------------------------------------
enable      nondir_str   nondir_mf_str   nondir_hf_str   de_smth_range
1              48              82               0               2
color_noise_thdf    color_noise_strf    color_noise_thdy    color_noise_stry
0                   8                   1                  10

----------------------------------------anti false color info-----------------------------------------------------------
en   threshold    strength
1          10          12

----------------------------------------sharpen info(Hi3519DV500)-----------------------------------------------------------
sharpen_en
1
luma_wgt(0-7):
[31      31      31      31      31      31      31      31]

luma_wgt(8-15):
[31      31      31      31      31      31      31      28]

luma_wgt(16-23):
[23      23      23      23      23      23      23      23]

luma_wgt(24-31):
[23      23      23      23      23      23      23      23]

texture_strength(0-7):
[153     172     186     201     217     233     251     269]

texture_strength(8-15):
[286     300     308     312     313     311     306     297]

texture_strength(16-23):
[285     273     263     255     249     243     234     224]

texture_strength(24-31):
[216     208     201     195     188     181     175     171]

edge_strength(0-7):
[195     210     235     260     295     320     340     350]

edge_strength(8-15):
[360     360     355     345     335     330     325     320]

edge_strength(16-23):
[315     310     305     295     285     280     275     265]

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
180            128          60          60               8         128

edge_filt_str   edge_filt_max_cap  r_gain  g_gain  b_gain   skin_gain
60                  18              12      32      18          30

shoot_sup_adj   detail_ctrl_thr  max_sharp_gain   skin_umax   skin_umin   skin_vmax   skin_vmin
9               180               30                 128         100         150         135

----------------------------------------sharpen info(Hi3516CV610)--------------------------------------------------------------------
      sharpen_en
               1
luma_wgt(0-15):
     30     30     30     30     30     30     30     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

texture_strength(0-15):
    153    167    178    192    208    223    239    255    271    287    298    306    309    310    309    306

texture_strength(16-31):
    299    290    280    270    258    247    237    227    217    207    200    194    187    180    174    170

edge_strength(0-15):
    195    209    234    259    294    318    338    348    358    358    353    344    334    329    324    319

edge_strength(16-31):
    314    309    304    294    285    280    275    265    250    240    220    200    180    160    140    125

edge_gain_by_rly(0-15):
     32     32     32     32     32     32     32     32     32     32     32     32     32     32     32     32

edge_rly_by_mot(0-15):
     16     16     16     16     16     16     16     16     16     16     16     16     16     16     16     16

edge_rly_by_luma(0-15):
     16     16     16     16     16     16     16     16     16     16     16     16     16     16     16     16

mf_gain_by_mot(0-15):
     32     32     32     32     32     32     32     32     32     32     32     32     32     32     32     32

hf_gain_by_mot(0-15):
     32     32     32     32     32     32     32     32     32     32     32     32     32     32     32     32

lmf_gain_by_mot(0-15):
     16     16     16     16     16     16     16     16     16     16     16     16     16     16     16     16

texture_freq   edge_freq  over_shoot under_shoot   shoot_sup_str detail_ctrl 
         190         100          62          62               7         128

 edge_filt_str   edge_filt_max_cap  r_gain  g_gain  b_gain   skin_gain
            58                  18      16      32      20          30

 shoot_sup_adj   detail_ctrl_thr  max_sharp_gain   skin_umax   skin_umin   skin_vmax   skin_vmin
             8               160              30         128         100         150         135

 shoot_inner_threshold shoot_outer_threshold shoot_protect_threshold 
                     0                     0                       0 

 edge_rly_fine_threshold edge_rly_coarse_threshold edge_over_shoot  edge_under_shoot 
                       0                         0              20               120

----------------------------------------ldci info-----------------------------------------------------------------------
enable   manual  gauss_lpf_sigma
1        0               36

he_pos_wgt  he_pos_sigma   he_pos_mean   he_neg_wgt  he_neg_sigma   he_neg_mean   blc_ctrl
50            80            32           60            80             128         20

----------------------------------------ca info-------------------------------------------------------------------------
enable   iso_ratio
1        1024

----------------------------------------lblc info-----------------------------------------------------------------------
enable           strength        offset_r       offset_gr       offset_gb           offset_b
0                   256            4096            4096              4096               409

----------------------------------------alg run time info---------------------------------------------------------------
        ae:  199       awb:  145     fswdr:   15   flicker:   12       blc:   17        nr:  136       drc:   11

    dehaze:   78  demosaic:   14   sharpen:   15      ldci:   22       all:  734
----------------------------------------isp proc end[0]-----------------------------------------------------------------

【调试信息分析】

记录当前ISP模块的使用情况。

【参数说明】

参数

描述

ISP framework:25122701(ISP framework版本信息)

NA

无

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算法运行的选择。

detail stats info

enable

表示detail_stats的使能开关,不使能时,detail stats info的proc信息将不显示

ctrl

表示detail_stats的控制开关,ae、awb分辨代表读取ae、awb的detail统计信息

col

表示detail_stats划分列方向块数

row

表示detail_stats划分行方向块数

interval

表示detail_stats统计信息统计写出的间隔。单位:帧数

blk_w

表示行方向划分的各块的宽度,序号表示第几块的宽度

blk_h

表示列方向划分的各块的高度,序号表示第几块的高度

isp mode

stitch_mode

ISP拼接模式。

running_mode

ISP运行模式。

block_num

ISP BE的分块数目

data_mode

ISP处理的数据类型(raw/yuv)

run_once

表示使用runone模式。

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。

avg_int_t

ISP中断的平均占用时间,单位:us。

int_gap_t

ISP相邻两中断之间的时间间隔,单位:us。

max_gap_t

ISP相邻两中断之间的最大时间间隔,单位:us。

int_rat

每秒ISP中断个数。

reset_cnt

ISP复位的次数。

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中断个数。

fe_stat_t

获取fe统计信息耗时,单位:us。

fe_stat_mat_t

获取fe统计信息的最大时间,单位:us。

cp_stat_t

拷贝fe统计信息耗时,单位:us。

cp_stat_t

拷贝fe统计信息的最大时间,单位:us。

be_stat_max_t

获取be统计信息耗时,单位:us。

be_stat_max_t

获取be统计信息的最大时间,单位:us。

be_stat_lost

BE统计信息不及时次数。

be_end_t

BE_END中断占用时间,单位:us。

be_end_max_t

BE_END中断的最大占用时间,单位:us。

sensor_cfg_t

Sensor配置耗时,单位:us。

sensor_max_t

Sensor配置的最大时间,单位:us。

sensor_avg_t

Sensor配置的平均时间,单位:us。

sync_cfg_gap

同步节点配置时间间隔。单位:us。

sync_cfg_gap_max

同步节点配置时间最大间隔。单位:us。

sync_cfg_gap_min

同步节点配置时间最小间隔。单位:us。

ldci_comp_err_cnt

LDCI曝光补偿参数异常次数。

stitch_pts_cnt

统计信息拼接成功次数。

Hi3516CV610不支持拼接,默认为0。

sync_id_err_cnt

帧信息中sync_id异常计数(仅run_be通路有效)。

usr_t

用户态run线程上一次运行时间。单位:us

max_usr_t

用户态run线程过去1000帧最大运行时间。单位:us

cros_cnt

用户态线程运行跨帧计数,debug信息

cros_end_t

出现跨帧后,runbe场景,上一次2帧be_end中断之间的gap耗时,单位:us

cros_usr_t

出现跨帧后,上一次用户态线程完成运行耗时,单位:us

cros_run_t

出现跨帧当帧用户态线程运行时isp_run函数的整体运行耗时,单位:us

cros_switch_t

出现跨帧当帧用户态线程运行时switch_mode函数的运行耗时,单位:us

cros_lock_t

出现跨帧当帧用户态线程运行时加锁耗时,单位:us

cros_pre_run_t

出现跨帧前一帧用户态线程运行时isp_run函数的整体运行耗时,单位:us

cros_pre_swi_t

出现跨帧前一帧用户态线程运行时switch_mode函数的运行耗时,单位:us

cros_pre_lock_t

出现跨帧前一帧用户态线程运行时加锁耗时,单位:us

be_cfg info

be_cfg

离线模式下,ISP BE寄存器配置buffer的物理地址。

free

be_cfg_buf此时free节点的个数

busy

be_cfg_buf此时busy节点的个数, free+busy=总个数

use

其他模块此时占用了be_cfg_buf多少次

hold_max

其他模块最多同时占用了多少个be_cfg_buf

pubattr info

wnd_x

水平方向起始位置。

wnd_y

垂直方向起始位置。

wnd_w

图像宽度。

wnd_h

图像高度。

sns_w

Sensor图像宽度。

sns_h

Sensor图像高度。

sns_mode

Sensor初始化序列选择值。

flip

flip使能值。

mirror

mirror使能值。

bayer

输入Bayer图像数据格式。

crop_en

mipi裁剪使能值。

crop_x

mipi裁剪水平方向起始位置。

crop_y

mipi裁剪垂直方向起始位置。

crop_w

mipi裁剪宽度。

crop_h

mipi裁剪高度。

wdr_mode

表示wdr模式。

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模式。

fe roi info

fe_roi_en

fe_roi使能

fe_roi_x

fe_roi区域起始横坐标

fe_roi_y

fe_roi区域起始纵坐标

fe_roi_w

roi区域宽度。

fe_roi_h

roi区域高度。

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

当前曝光量,为快门、增益、光圈值的乘积。

1st_time

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。

stat_pos

ae统计信息位置。

face_luma

人脸亮度

pep_luma

人形亮度

noroi_cnt

smartae连续没有获取到人脸或人形亮度的帧数。

exp_coef

smartae的曝光系数

sys_gain

系统增益,10bit精度。

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_id_sf

短帧节点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精度。仅在WDR模式支持。isp_dg与isp_dg_sf只有isp_dg是实际的isp_dgain, isp_dg_sf不实际生效到isp_dgain中。

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

自动白平衡收敛速度。

sector_en

CCM颜色分区调节使能。

hue0

红色色调调节量。

hue1

肤色色调调节量。

hue2

黄色色调调节量。

hue3

绿色色调调节量。

hue4

蓝色色调调节量。

hue5

紫色色调调节量。

sat0

红色饱和度调节量。

sat1

肤色饱和度调节量。

sat2

黄色饱和度调节量。

sat3

绿色饱和度调节量。

sat4

蓝色饱和度调节量。

sat5

紫色饱和度调节量。

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 功能。

slope

设置Crosstalk门限之上的处理强度。值越大,表示在门限值threshold之上整体处理强度衰减得越慢。

sensi_slope

设置Crosstalk敏感度值。值越大,表示在门限值sensi_threshold之上,边沿上的处理强度衰减得越慢。

threshold

设置Crosstalk门限值。值越大,表示整体处理的强度越大。

sensi_th

设置Crosstalk敏感度门限值。值越大,表示在更强的边沿上也会有绿平衡处理。

strength

设置Crosstalk强度值。值越大,处理强度越大。

filter_md

设置Crosstalk的滤波模式。值越大,滤波强度越大。Hi3516CV610不支持。

np_offset

设置Noise Profile值。值越大,表示抗噪能力越大。

Hi3519DV500不支持。

fswdr info

motion_comp_en

运动检测使能。

long_thr

长曝光门限值,低于门限值的图像数据只选择长曝光数据。

short_thr

短曝光门限值,超过门限值的图像数据只选择短曝光数据。

md_thr_low_gain

手动模式下判断是否运动的低阈值系数。值越大,运动程度越小。

md_thr_high_gain

手动模式下判断是否运动的高阈值系数。值越大,运动程度越小。

fpn correct info

en

FPN使能开关

op_type

FPN模式类型

strength

FPN强度值

offset

FPN强度偏移

aibnr_mode

aibnr模式

black level actual info

mode

黑电平的工作模式

user_en

自定义黑电平的使能,Hi3516CV610不支持

blc_mode

黑电平模式,Hi3516CV610不支持

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模式下的黑电平补偿,Hi3516CV610不支持

ob_x

ob区实际生效统计范围的起始点坐标x,Hi3516CV610不支持

ob_y

ob区实际生效统计范围的起始点坐标y,Hi3516CV610不支持

ob_width

ob区实际生效统计范围的宽度,Hi3516CV610不支持

ob_height

ob区实际生效统计范围的高度,Hi3516CV610不支持

blc_clamp_info

sensor_clamp开关的信息,Hi3516CV610不支持

bayernr info(Hi3519DV500)

enable

NR使能开关。

tnr_enable

NR时域使能开关。

nr_lsc_enable

NR参考LSC使能开关。

sfm0_coarse_str1

控制亮度噪声整体去噪强度,R通道。

sfm0_coarse_str2

控制亮度噪声整体去噪强度,Gr通道。

sfm0_coarse_str3

控制亮度噪声整体去噪强度,Gb通道。

sfm0_coarse_str4

控制亮度噪声整体去噪强度,B通道。

coring_wgt

原始像素回叠,值越大,回叠噪声越大,去噪效果越弱。

fine_strength

原始像素和去噪结果加权,值越大,去噪效果越强。

sfm0_de_prot

sfm0细节保留的比例,值越大,细节保留越多。

coring_mot_ratio

前景区域的原始像素回叠,值越大,回叠的原始像素越多。

sfm1_strength

sfm1滤波强度,值越大,滤波越强,但整体滤波强度较弱。

sfm1_adp_strength

sfm1适应性滤波强度。

sfm6_strength

线性模式下,sfm6混合滤波结果。

sfm7_strength

线性模式下,sfm7混合滤波结果。

sth

混合滤波器sfm6\sfm7的门限值。

md_mode

运动检测类型:

0:运动检测对小运动更敏感。

1:运动检测对大运动判断更加准确。

md_size_ratio

值越大,运动检测对运动判决更加准确。

tfs

整体时域强度控制,值越大,时域越强。

sfr_r

R分量的空域混入比例。

sfr_g

G分量的空域混入比例。

sfr_b

B分量的空域混入比例。

md_sta_ratio

运动检测,静止和运动区域的比例调节,值越大,判断为静止区域的部分越多。

md_mot_ratio

运动检测,静止和运动区域的比例调节,值越小,判断为运动区域的部分越多。

user_def_md

用户自定义模式下的运动检测模式。

user_def_slope

用户自定义模式下,运动检测阈值随亮度变化率。

user_def_dark

用户自定义模式下,暗区的运动检测阈值。

user_def_color

用户自定义模式下,颜色区域的运动检测阈值。

md_anti_fli_str

运动检测对颜色运动与噪声鲁棒性的权衡系数。

md_sta_fine_str

运动检测,静止和运动区域的精细比例调节,值越大,判断为静止区域的部分越多。

dering_strength

取值大于0表示dering处理开启,值越大,表示处理强度越大。

dering_thresh

dering处理门限值,值越大,回叠的原始像素越少,处理效果越强。

dering_sta_strength

静止区域dering处理可调,值越大,表示处理强度越大。

dering_mot_strength

运动区域dering处理可调,值越大,表示处理强度越大。

snr_sfm0_wdr_str0

wdr模式下短帧区域的sfm0去噪强度。

snr_sfm0_wdr_str1

wdr模式下长帧区域的sfm0去噪强度。

snr_sfm0_wdr_str3

wdr模式下融合区域的sfm0去噪强度。

snr_sfm0_fus_str0

fusion模式下短帧区域的sfm0去噪强度。

snr_sfm0_fus_str1

fusion模式下长帧区域的sfm0去噪强度。

md_wdr_str0

wdr模式下短帧区域的时域滤波强度。

md_wdr_str1

wdr模式下全图区域的时域滤波强度。

md_fus_str0

fusion模式下短帧区域的时域滤波强度。

md_fus_str1

fusion模式下全图区域的时域滤波强度。

snr_wdr_sfm6_str0

wdr模式下短帧的sfm6滤波结果。

snr_wdr_sfm6_str1

wdr模式下长帧的sfm6滤波结果。

snr_wdr_sfm7_str0

wdr模式下短帧的sfm7滤波结果。

snr_wdr_sfm7_str1

wdr模式下长帧的sfm7滤波结果。

snr_fus_sfm6_str0

fusion模式下短帧的sfm6滤波结果。

snr_fus_sfm6_str1

fusion模式下长帧的sfm6滤波结果。

snr_fus_sfm7_str0

fusion模式下短帧的sfm7滤波结果。

snr_fus_sfm7_str1

fusion模式下长帧的sfm7滤波结果。

bnr_proc_iso

BNR实际处理对应的iso值。

k

噪声模型标定结果k值。

b

噪声模型标定结果b值。

bayernr info(Hi3516CV610)

enable

NR使能开关。

md_en

NR运动检测使能开关。

nr_lsc_enable

NR参考LSC使能开关。

fine_strength

原始像素和去噪结果加权,值越大,去噪效果越强。

sfm0_de_prot

sfm0细节保留的比例,值越大,细节保留越多。

tss

静止区域的空域滤波效果,值越大,静止区域越光滑。

coring_wgt

原始像素回叠,值越大,回叠噪声越大,去噪效果越弱。

sfm0_coarse_str1

控制亮度噪声整体去噪强度,R通道。

sfm0_coarse_str2

控制亮度噪声整体去噪强度,Gr通道。

sfm0_coarse_str3

控制亮度噪声整体去噪强度,Gb通道。

sfm0_coarse_str4

控制亮度噪声整体去噪强度,B通道。

ref_mode

BNR支持的三种模式:ISP_PURE_TNR_MODE、ISP_MD_MODE、ISP_3DNR_MODE。

load_ref_en

PURE_TNR_MODE模式,是否重新加载参考帧。

md_mode

运动检测类型:

0:运动检测对小物体运动判断更准确。

1:运动检测对中物体运动判断更准确。

2:运动检测对大物体运动判断更准确。

tfs

时域滤波强度,值越大,时域越强。

md_sta_ratio

运动检测,静止和运动区域的比例调节,值越大,判断为静止区域的部分越多。

md_mot_ratio

运动检测,静止和运动区域的比例调节,值越小,判断为运动区域的部分越多。

md_sta_fine_str

运动检测,静止和运动区域的精细比例调节,值越大,判断为静止区域的部分越多。

md_anti_fli_str

运动检测对颜色运动与噪声鲁棒性的权衡系数。

user_def_md

用户自定义模式下的噪声模型值。

user_def_slope

用户自定义模式下,噪声模型k值,数值越大,去噪趋势越强。

user_def_dark

用户自定义模式下,噪声模型b值,数值越大,去噪趋势越强。

sfr_r

R分量的空域混入比例。

sfr_g

G分量的空域混入比例。

sfr_b

B分量的空域混入比例。

snr_sfm0_wdr_str0

wdr模式下短帧区域的sfm0去噪强度。

snr_sfm0_wdr_str1

wdr模式下长帧区域的sfm0去噪强度。

snr_sfm0_wdr_str3

wdr模式下融合区域的sfm0去噪强度。

snr_sfm0_fus_str0

fusion模式下短帧区域的sfm0去噪强度。

snr_sfm0_fus_str1

fusion模式下长帧区域的sfm0去噪强度。

md_wdr_str0

wdr模式下短帧区域的时域滤波强度。

md_wdr_str1

wdr模式下全图区域的时域滤波强度。

md_fus_str0

fusion模式下短帧区域的时域滤波强度。

md_fus_str1

fusion模式下全图区域的时域滤波强度。

bnr_proc_iso

BNR实际处理对应的iso值。

k

噪声模型标定结果k值。

b

噪声模型标定结果b值。

acs info

enable

ACS模块使能

y_strength

控制ACS算法Luma Shading也就是Y Shading的校正强度

run_interval

表示ACS算法多少帧运行一次

lock_enable

表示是否固定ACS产生的Lut表保持当前的LSC校正表

radial_crop info

enable

radial crop模块使能

center_ver

radial crop中心点垂直坐标

center_hor

radial crop中心点水平坐标

radius

radial crop半径

drc info

en

DRC 使能开关

manu_en

DRC手动使能开关

strength

DRC强度值

cac info

enable

cac使能

edge_thr

边缘检测阈值。两个阈值分别代表高低阈值,小于edge_thr[0]的为平坦区域,大于edge_thr[1]的是强边缘

edge_gain

边缘检测强度,该值越大,检测的边缘越多

cac_rb_strength

根据色差进行校正的强度,值越大表示校正越强

satu_low_thd

紫色检测饱和度阈值下限,大于该阈值的方为紫色的区域

satu_high_thd

紫色检测饱和度阈值上限,小于该阈值的方为紫色的区域

purple_alpha

参考紫色的权重。该值越大,表示参考紫色进行校正色差的越多。

edge_alpha

参考边缘的权重。该值越大,表示参考边缘进行校正色差的越多。

cr_str

局部色差校正的R通道校正强度

cb_str

局部色差校正的B通道校正强度

bayershp info

enable

Bayer sharpen使能的开关

mf_gain

整体中频增益,值越大,画面整体中频增强越强。

hf_gain

整体高频增益,值越大,画面整体高频增强越强。

dark_gain

整体暗区增益,值越大,画面暗区增强越强。

overshoot

整体图像增强的白边控制强度。值越大,白边越重。

undershoot

整体图像增强的黑边控制强度。值越大,黑边越重。

mf_strength

中频增强强度,值越大,锐化越强,但是会有点粗。

hf_strength

高频增强强度,值越大,纹理越多。

dark_strength

暗区增强强度,值越大,锐化越强。

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

边缘锐化强度。

edge_gain_by_rly

边缘估计分数锐化增益。Hi3519DV500不支持。

edge_rly_by_mot

运动边缘检测分数增益。Hi3519DV500不支持。

edge_rly_by_luma

亮度边缘检测分数增益。Hi3519DV500不支持。

mf_gain_by_mot

运动区域中频锐化增益。Hi3519DV500不支持。

hf_gain_by_mot

运动区域高频锐化增益。Hi3519DV500不支持。

lmf_gain_by_mot

运动区域中低频锐化增益。Hi3519DV500不支持。

texture_freq

纹理的细碎度调节强度。

edge_freq

边缘锐化后的纤薄度调节。

over_shoot

锐化后的白边白点强度。

under_shoot

锐化后的黑边黑点强度。

shoot_sup_str

黑白边宽窄的单独调节强度。

detail_ctrl

图像的细节纹理区的shoot强度的控制。

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值。

shoot_inner_threshold

抑制过亮和过暗区域的shoot阈值参数。Hi3519DV500不支持。

shoot_outer_threshold

抑制过亮和过暗区域的shoot阈值参数。Hi3519DV500不支持。

shoot_protect_threshold

不受shoot_inner_threshold和shoot_outer_threshold参数影响的shoot保护阈值参数。Hi3519DV500不支持。

edge_rly_fine_threshold

精细边缘检测阈值。Hi3519DV500不支持。

edge_rly_coarse_threshold

粗略边缘检测阈值。Hi3519DV500不支持。

edge_over_shoot

图像边缘的overshoot的强度。Hi3519DV500不支持。

edge_under_shoot

图像边缘的undershoot的强度。Hi3519DV500不支持。

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增益

lblc info

enable

LBLC模块使能

strength

LBLC模块校正强度

offset_r

R通道BLC值的均值

offset_gr

Gr通道BLC值的均值

offset_gb

Gb通道BLC值的均值

offset_b

B通道BLC值的均值

alg run time info

ae/awb/fswdr...等各个算法名

注册的各个算法的run耗时,只有大于10us的算法才会打印,小于10us的算法省略

all

所有注册算法run的总耗时

【注意事项】

用户通过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中的基础算法单元的部分,仍需要参考"3A开发使用者指南"部分的内容实现,以保证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驱动提供同步回调功能,参考“AE/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 (ret != TD_SUCCESS) {
        printf("ss_mpi_isp_get_focus_stats error!(ret = 0x%x)\n", ret);
        return TD_FAILURE;
    }

    // User Auto Focus Alg Source
    usr_af_alg_run();
    // Update Lens Position
    lens_drv_zoom_to_dest_pos(pos, pps);
    lens_dry_focus_to_dest_pos(pos, pps);
}

AF统计信息使用说明

概述

被动式自动对焦一般是通过分析图像特征得出图像清晰度值FV(Focus Value), 通过驱动对焦马达调节焦点到最佳位置,如图1所示,图像越清晰FV值越大,Peak点对应聚焦清晰点。获取图像清晰度算法有多种,如灰度梯度法,高频分量法等,Hi3519DV500和Hi3516CV610采用高频分量法来计算FV,即图像越清晰的时候高频部分幅值越大,将图像通过高通滤波器便可以得到高频分量。它们一共提供四个滤波器和亮度信息,分别为水平方向滤波H1,H2,垂直方向滤波V1,V2,以及Y和高亮计数器HlCnt。Hi3519DV500提供FE(Front End)及BE(Behind End)两个独立的AF统计信息获取模块。AF模块支持的最小分辨率为256*120,低于该分辨率AF逻辑功能无法支持。

图 1 FV曲线

Hi3519DV500提供Bayer域或者YUV域进行统计,配置MPI中的stats_pos字段即可以进行统计位置的调整。WDR模式下,非宽动态场景的Bayer域(即RAW域)统计信息无明显变化趋势,推荐使用YUV域统计信息。首先对图像进行预处理滤波,去除椒盐噪声对统计值的干扰,用户可以设置pre_flt_cfg.enable来使能PreFilter。配置pre_flt_cfg.strength来控制滤波强度。在经过水平垂直四组滤波器后会对输出做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等效。 Hi3519DV500只支持gamma_value为0或1。

抑制光源对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 曲线

    须知:

    由于点光源有如上所述特性,会导致H和V的滤波器都不准确,因此推荐用上述方法减轻这种影响。

Coring

将滤波器输出通过Coring模块可以提高FV曲线的抗噪声能力,如图1所示,设置图中3个参数便可以确定coring曲线的形状,通过设置合理的参数便可以实现不统计噪声,以及增加有效信号对统计信息的贡献,从而提升统计信息在低照度场景中的性能。

图 1 Coring 曲线

统计模式配置

统计模块支持以下两种模式:

  • 峰值配置模式

    设置为peak模式时,block的统计值为滤波后图像每行最大值之和,而非peak模式下,则直接将每个点的值求和。求和模式适用于噪声较大场景。

  • 平方配置模式,有以下两种选择。

    • 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和position的计算,需要注意的是因为LINUX user space任务调度不能保证一致的实时性,建议将需要保证实时性的驱动配置放在kernel space完成。

FV值计算

一般的推荐最终生成如图1所示的两条曲线,我们将low BandPass filter生成的FV命名为FV1,High BandPass filter生成的命名为FV2,“FV计算参考代码”中变量focus_cfg的值为默认推荐使用的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, {0x0, 0x1, 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 滤波器设计工具使用说明

PQ工具提供了自动对焦参数仿真插件,使图像质量调试人员可以:

工具界面

从PQ工具主界面工具栏的外挂插件下拉框中选择“PQ Auto Focus Simulator”,可以打开自动对焦参数仿真工具,如图1所示。

图 1 自动对焦参数仿真工具

工具分为For Horizental 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 Frequencies处输入截止频率的低频和高频后,点击“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删除所有参考组。

AE/AF同步回调

当一帧图像最后一个pixel通过AF模块后,统计值即更新,推荐用户通过ss_mpi_isp_get_vd_time_out同步获取3A统计值,例如AutoFocus和ZoomTracking算法完成目标focus和zoom position的计算。

如果用户使用的是LINUX系统,因为user space任务调度不能保证一致的实时性,建议将需要保证实时性的驱动配置放在kernel space完成。ISP提供同步回调接口的注册,可以实现与VD同步。在本章有相应的接口使用描述,用户可以将实时性要求较高的任务放在同步回调里面,底层提供HwIRQ,Workqueue两种方式实现,可以选择相应的实现方式以确定实时级别。HwIRQ是指任务放在中断服务中实现,实时性最高;Workqueue的实时性取决于linux系统调用。

目前在sample_ist.c提供了注册同步任务的示例,可以在内核态及时获取AE/AF的统计信息,用于及时性要求较高的特性,但是需要注意使用此种方式获取AE/AF统计信息,中断耗时过长,需注意在中断获取和配置的总耗时是否会出现跨帧,出现跨帧则可能达不到预期效果。

图 1 AE/AF同步回调

【注意事项】

  • 注册ot_sample_ist.ko之后,将调度ot_isp_sync_task_register,将同步节点注册到ISP内。如果同步节点只需要AE同步任务处理,可以将AF同步任务进行删除, 减少中断冗余耗时,反之AF亦然。
  • sample_ist.c文件中只提供了AF和AE打印分块统计信息的示例(info打印级别,需要修改isp的打印等级才可以看到示例打印信息),如果需要其他统计信息,可以按需完成回调函数isp_sync_tsk_callback的实现。
  • AE和AF统计信息只提供了统计信息,皆未提供坐标信息。
  • 使用同步任务获取AE/AF统计信息时,需要注意增加的中断耗时,勿出现跨帧处理。

  • API参考

  • 数据类型

API参考

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

【说明】

定义同步回调方法,决定实时性。

【定义】

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_ae_stats *ae_stat;
} ot_isp_sync_task_node;

【成员】

成员名称

描述

method

回调方式。

isp_sync_tsk_callback

回调函数,用户注册时传入。

data

回调函数参数,用户注册时传入。

sz_id

节点ID

list

list节点,用于管理多个回调节点,无需关注。

focus_stat

AF统计信息结构体。

ae_stat

AE统计信息结构体

【举例】

获取AF统计信息同步节点

ot_isp_sync_task_node  sync_node= {
    .method = ISP_SYNC_TSK_METHOD_HW_IRQ,
    .isp_sync_tsk_callback = sync_af_calc,
    .data = 0,
    .focus_stat = &g_focus_stat, /* if don't need af stats, can delete this task or */
                                     /* set focus_stat = TD_NULL and let isp_sync_tsk_callback do nothing */
    .ae_stat = TD_NULL,
    .sz_id = "hw_0"
};

获取AE统计信息同步节点

ot_isp_sync_task_node  sync_node= {
    .method = ISP_SYNC_TSK_METHOD_HW_IRQ,
    .isp_sync_tsk_callback = sync_ae_calc,
    .data = 1,
    .focus_stat = TD_NULL,
    .ae_stat = &g_ae_stats, /* if don't need ae stats, can delete this task or */
    /* set ae_stat = TD_NULL and let isp_sync_tsk_callback do nothing */
    .sz_id = "hw_0"
};

【注意事项】

  • 如果不需要使用AF统计信息,可以将focus_stat置为TD_NULL,ae_stat赋为有效值,不注册focus_stat有效的同步任务节点。

    中断根据注册的同步任务节点中ae_stat和focus_stat的有效性,来决定获取AE还是AF统计信息,如果只需其中一个,可以将另一个置为NULL,节省中断耗时。

  • AE统计信息复用ot_isp_ae_stats的结构体,其中的坐标信息未赋值,内核态获取的AE统计信息规格同接口层获取的AE统计信息,请见ot_isp_ae_stats的结构体。

【相关数据类型及接口】

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帧生效曝光参数。具体可参考hy_s0603的驱动代码进行适配。

    需要注意将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_ae_lib_reg_callback和ss_mpi_isp_awb_lib_reg_callback这两个接口是ISP firmware库提供的钩子函数,用于开发3A算法库时实现注册动作。例如SDK 提供的3A算法库的ss_mpi_ae_register和ss_mpi_awb_register接口,在实现时调用了相应的钩子函数,所以调用ss_mpi_ae_register能实现AE算法库向ISP firmware库注册。

同样的,3A算法库同样也提供了钩子函数,用于Sensor库实现向3A算法库注册的动作。例如ss_mpi_ae_sensor_reg_callback和ss_mpi_awb_sensor_reg_callback,在xxx_cmos.c中可以看到调用了这些钩子函数的函数sensor_register_callback。用户在开发3A算法库时,也可以通过提供钩子函数的方式,实现Sensor库向3A算法库的注册。

当然,ISP firmware库也提供了钩子函数,用于Sensor库实现向ISP firmware库注册的动作。例如ss_mpi_isp_sensor_reg_callback,在xxx_cmos.c中可以看到调用了该钩子函数的函数sensor_register_callback。

所以,当用户调用ss_mpi_ae_register、ss_mpi_awb_register和sensor_register_callback就完成了3A算法库向ISP firmware库注册、Sensor库向3A算法库和ISP firmware库注册。

说明:

用户开发3A算法库时,请自行实现ss_mpi_axx_register接口。同时也请自行实现ss_mpi_axx_sensor_reg_callback钩子函数,并在sensor_register_callback中增加调用该钩子函数的代码,相关代码可以参考ISP firmware库的开源代码。

扩展性的设计考虑

在代码中有ot_vi_pipe、ot_isp_3a_alg_lib、ot_sensor_id这样一些概念,这些概念是出于架构扩展性的考虑。

  • ot_vi_pipe主要考虑的是支持多个ISP单元的情形。无论是多个ISP硬件单元,或是一个ISP硬件单元分时复用,从软件意义上讲,需要预留出扩展性。
  • ot_isp_3a_alg_lib主要考虑的是支持多个算法库,并动态切换的情形。例如用户实现了一套AE算法代码,但注册两个库,分别用于正常场景和抓拍场景,那么这时候需要用结构体中的handle来进行区分。例如用户实现了一套AWB算法代码,同时又想在某些场景下使用AWB算法库,那么这时候可以用结构体中的lib_name进行区分。当用户注册多个AE库,或AWB库时,ISP firmware将会全部对它们进行初始化,但是在运行时,仅会调用有效的库,设置有效库的接口是ss_mpi_isp_set_bind_attr,通过此接口可以快速切换运算的库。
  • ot_sensor_id仅起一个校验作用,确认注册给ISP firmware库和3A算法库的是同一款sensor。

这些概念仅是设计时预留的冗余,如果完全不需要这些概念,可以在开发时去掉这些概念。

3A架构的设计思路

设计思路基本是这样,ISP firmware初始化并销毁各个算法单元;在运行时,提供前一帧的统计信息,并根据返回值配置寄存器,其他内容,均由用户开发。所以当用户替换自己的3A算法后,当前的AE/AWB的MPI不可复用,cmos.c中的AE/AWB相关的内容不可复用,对于AE的权重配置和AWB的找白点配置的内容不可复用,这几个配置理论上是由3A算法配置,而不是从ISP firmware获取,ISP firmware中仅有简单的初始化值。

3A算法并不需要显式地去配置ISP寄存器,只需将需要配置的ISP寄存器值写到ot_isp_ae_result和ot_isp_awb_result结构体中即可;也不需要显式地去读取ISP寄存器,只需从ot_isp_ae_info和ot_isp_awb_info结构体中读取即可。

外部寄存器的说明

在_录像机_的应用中,通常除了业务主程序进程外,板端还会有另外的进程去支持PC端的工具来调节图像质量。ISP的各个算法的许多状态、参数均驻留于全局变量中,不足以支持多进程的访问,所以引入外部寄存器的概念,用以支持多进程的业务场景。用户通过PC端工具与板端进程通信,调用SDK提供的MPI,实际是改变外部寄存器中的内容,从而改变业务主程序中的ISP的各个算法的状态和参数。

外部寄存器还能与实际的硬件寄存器通过统一的接口读写,形式上与实际的硬件寄存器无差别。

用户如果使用外部寄存器的话,有这些已封装好的接口可以使用,当然用户也可以有其他方案实现多进程的支持。外部寄存器的地址空间是自定义的,只要不冲突即可。详细请参考开源代码,接口定义在isp_vreg.h文件中。

工频闪类型自适应Sample用例处理流程

图 1 工频闪类型自适应Sample用例处理流程

  • 以上为工频闪类型自适应Sample用例的处理流程(calcflicker sample用例0)。此用例使用多次检测的结果进行确认后自动适配相应的抗闪参数。此用例作为使用Auto Flicker Type Detection(自动工频闪类型检测)接口进行自适应抗闪的参考。
  • 检测结果为OT_ISP_FLICKER_TYPE_UNKNOW(有未知类型的工频闪)的原因有几种情况:

  • Camera摇晃导致检测不稳定。

  • 图像中存在大面积的运动物体。
  • 环境光源为同时存在50Hz和60Hz的混合光源。
  • 环境光源为既不是50Hz也不是60Hz频率的非通用频率光源。以上这几种情况可根据实际情况灵活处理。

缩略语

Numerics

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