IMP

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

Sharpen

功能描述

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

API参考

  • ss_mpi_isp_set_sharpen_attr:设置图像锐化属性。

  • ss_mpi_isp_get_sharpen_attr:获取图像锐化属性。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_sharpen_attr

数据类型

  • OT_ISP_SHARPEN_LUMA_NUM:亮度锐化权重区间数

  • OT_ISP_SHARPEN_GAIN_NUM:细节锐化权重区间数

  • ot_isp_sharpen_manual_attr:定义ISP Sharpen手动属性。

  • ot_isp_sharpen_auto_attr:定义ISP Sharpen自动属性。

  • ot_isp_sharpen_detail_map:是否显示图像细节灰度图。

  • ot_isp_sharpen_attr:定义ISP Sharpen属性。

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_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_attr;

【成员】

成员名称

描述

luma_wgt

亮度锐化权重。满量程0-255的亮度被32个等分点平均分为32段亮度区间,每一段亮度区间对应一个亮度权重。比如0-7的亮度区间的权重是luma_wgt[0],8-15的亮度区间的权重是luma_wgt[1],依次类推。如图6-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。

motion_edge_strength

带方向的边缘的锐化强度,设置运动区域图像带方向的边缘的锐度。

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

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

motion_texture_freq

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

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

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

motion_edge_freq

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

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

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

motion_over_shoot

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

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

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

motion_under_shoot

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

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

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

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强度,shoot越大,细节纹理区的清晰度越高。

取值范围:[0, 0xFF],该值等于128,则图像的细节纹理区域的shoot强度和大边缘的shoot强度一致,都分别等于over_shoot和under_shoot。该值大于128,则图像的细节纹理的shoot强度大于大边缘,大边缘的shoot强度分别等于over_shoot和under_shoot。该值小于128,则图像的细节纹理的shoot强度小于大边缘,大边缘的shoot强度分别等于over_shoot和under_shoot。

detail_ctrl_threshold

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

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

edge_filt_strength

边缘滤波强度调试参数:实现图像锐化边缘的范围和边缘平滑强度的控制。该值越大,判为边缘的区域越多、也越宽,edge_strength起作用的图像边缘就越多,而且,该值越大,沿着边缘方向的平滑滤波强度也越大,边缘就越平滑。反之,判为边缘的区域越少、也越窄,edge_strength起作用的图像区域越少,边缘平滑就越弱。

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

edge_filt_max_cap

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

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

r_gain

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

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

g_gain

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

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

b_gain

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

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

skin_gain

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

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

max_sharp_gain

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

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

图 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个强度值,用户可以通过设置该曲线上的32个强度值来为平坦区域、弱纹理区域、纹理区域和强纹理区域设置不同的锐化强度。这4个区域并没有明显的区分界限,都是连续过渡,用户可以通过实际效果来调整纵坐标强度来为不同的区域设置不同的强度。

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

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

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

【成员】

成员名称

描述

luma_wgt

亮度锐化权重。满量程0-255的亮度被32个等分点平均分为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。

motion_edge_strength

带方向的边缘的锐化强度,设置运动区域图像带方向的边缘的锐度。

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

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

motion_texture_freq

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

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

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

motion_edge_freq

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

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

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

motion_over_shoot

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

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

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

motion_under_shoot

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

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

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

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强度,shoot越大,细节纹理区的清晰度越高。

取值范围:[0, 0xFF],该值等于128,则图像的细节纹理区域的shoot强度和大边缘的shoot强度一致,都分别等于over_shoot和under_shoot。该值大于128,则图像的细节纹理的shoot强度大于大边缘,大边缘的shoot强度分别等于over_shoot和under_shoot。该值小于128,则图像的细节纹理的shoot强度小于大边缘,大边缘的shoot强度分别等于over_shoot和under_shoot。

detail_ctrl_threshold

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

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

edge_filt_strength

边缘滤波强度调试参数:实现图像锐化边缘的范围和边缘平滑强度的控制。该值越大,判为边缘的区域越多、也越宽,edge_strength起作用的图像边缘就越多,而且,该值越大,沿着边缘方向的平滑滤波强度也越大,边缘就越平滑。反之,判为边缘的区域越少、也越窄,edge_strength起作用的图像区域越少,边缘平滑就越弱。

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

edge_filt_max_cap

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

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

r_gain

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

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

g_gain

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

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

b_gain

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

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

skin_gain

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

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

max_sharp_gain

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

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

【注意事项】

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_DETAIL,
    OT_ISP_SHARPEN_BUTT
} ot_isp_sharpen_detail_map;

【成员】

成员名称

描述

OT_ISP_SHARPEN_NORMAL

显示正常图像。

OT_ISP_SHARPEN_DETAIL

显示图像细节灰度图,细节越强,灰度值越大。

【注意事项】

【相关数据类型及接口】

ot_isp_sharpen_attr

ot_isp_sharpen_attr

【说明】

定义ISP Sharpen属性。

【定义】

typedef struct {
    td_bool en;
    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;

【成员】

成员名称

描述

en

Sharpen增强功能使能。

TD_FALSE:关闭;

TD_TRUE:使能。

默认值为TD_TRUE。

motion_en

运动区域单独增强使能。

TD_FALSE:关闭;

TD_TRUE:使能。

默认值为TD_FALSE。

motion_threshold0

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

motion_threshold1

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

motion_threshold0必须不大于motion_threshold1。

motion_gain0

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

motion_gain1

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

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

细节图显示类型。

OT_ISP_SHARPEN_NORMAL:显示正常图像。

OT_ISP_SHARPEN_DETAIL:显示图像细节灰度图,细节越强,像素值越大。

manual_attr

Sharpen手动参数。

auto_attr

Sharpen自动参数。

【注意事项】

Sharpen功能分为自动和手动:

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

  • en设置为TD_TRUE,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属性。

  • ss_mpi_isp_get_gamma_attr:获取Gamma属性。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_gamma_attr

数据类型

  • OT_ISP_GAMMA_NODE_NUM:Gamma表的分段节点数。

  • ot_isp_gamma_attr:定义ISP Gamma校正属性。

  • ot_isp_gamma_curve_type:定义ISP Gamma传输曲线类型。

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时,才能通过工具进行曲线修改。

  • 使用任意类型的预设曲线后,可以切换成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标准定义,不支持。

OT_ISP_GAMMA_CURVE_USER_DEFINE

用户自定义传输曲线

OT_ISP_GAMMA_CURVE_BUTT

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

【注意事项】

用户自定义Gamma曲线时,必须确保Gamma表配置正确。WDR模式下的Gamma曲线与线性模式不一样,可以通过PQ Tools工具生成。

【相关数据类型及接口】

无。

DRC

功能描述

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

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

图 1 动态范围压缩

API参考

  • ss_mpi_isp_set_drc_attr:设置动态范围压缩参数。

  • ss_mpi_isp_get_drc_attr:获取动态范围压缩参数。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_drc_attr

数据类型

  • OT_ISP_DRC_FLTX_NODE_NUM:定义ISP DRC Filter X子滤波器个数。

  • OT_ISP_DRC_CC_NODE_NUM:定义ISP DRC Color Correction LUT节点个数。

  • OT_ISP_DRC_TM_NODE_NUM:定义ISP DRC Tone Mapping LUT节点个数。

  • OT_ISP_DRC_LMIX_NODE_NUM:定义ISP DRC Local Mixing LUT节点个数。

  • ot_isp_drc_manual_attr:定义ISP DRC手动属性。

  • ot_isp_drc_auto_attr:定义ISP DRC自动属性。

  • ot_isp_drc_curve_select:定义ISP DRC Tone Mapping曲线类型。

  • ot_isp_drc_asymmetry_curve_attr:定义ISP DRC Asymmetry Curve属性。

  • ot_isp_drc_attr:定义ISP DRC属性。

OT_ISP_DRC_FLTX_NODE_NUM

【说明】

DRC Filter X子滤波器个数。

【定义】

#define OT_ISP_DRC_FLTX_NODE_NUM        3

【注意事项】

无。

【相关数据类型及接口】

ot_isp_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_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强度的建议取值范围不同,u16StrengthMax/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_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_BUTT
} ot_isp_drc_curve_select;

【成员】

成员名称

描述

OT_ISP_DRC_CURVE_ASYMMETRY

选择Asymmetry Curve。

OT_ISP_DRC_CURVE_USER

选择用户自定义曲线。

OT_ISP_DRC_CURVE_BUTT

无效值。

【注意事项】

【相关数据类型及接口】

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;
    td_u8  local_mixing_bright[OT_ISP_DRC_LMIX_NODE_NUM];
    td_u8  local_mixing_dark[OT_ISP_DRC_LMIX_NODE_NUM];
    td_u8  filter_coef_x[OT_ISP_DRC_FLTX_NODE_NUM];
    td_u8  filter_low_threshold_x[OT_ISP_DRC_FLTX_NODE_NUM];
    td_u8  filter_high_threshold_x[OT_ISP_DRC_FLTX_NODE_NUM];
    td_u8  detail_adjust_coef_x;
    td_u8  local_mixing_bright_x[OT_ISP_DRC_LMIX_NODE_NUM];
    td_u8  local_mixing_dark_x[OT_ISP_DRC_LMIX_NODE_NUM];
    td_u8  blend_luma_max;
    td_u8  blend_luma_bright_min;
    td_u8  blend_luma_bright_threshold;
    td_u8  blend_luma_bright_slope;
    td_u8  blend_luma_dark_min;
    td_u8  blend_luma_dark_threshold;
    td_u8  blend_luma_dark_slope;
    td_u8  blend_detail_max;
    td_u8  blend_detail_bright_min;
    td_u8  blend_detail_bright_threshold;
    td_u8  blend_detail_bright_slope;
    td_u8  blend_detail_dark_min;
    td_u8  blend_detail_dark_threshold;
    td_u8  blend_detail_dark_slope;
    td_u8  detail_adjust_coef_blend;
    td_u8  low_saturation_color_ctrl;
    td_u8  high_saturation_color_ctrl;
    td_bool color_correction_ctrl;
    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_attr;

【成员】

成员名称

描述

enable

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

0:关闭;

1:使能。

curve_select

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

0:Asymmetry curve;

1:用户自定义曲线

purple_reduction_strength

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

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。取值范围:[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]

local_mixing_dark[OT_ISP_DRC_LMIX_NODE_NUM]

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

filter_coef_x[OT_ISP_DRC_FLTX_NODE_NUM]

FilterX滤波系数,值越大,细节越强。取值范围:[0x0, 0xF],建议值为3~9之间。

filter_low_threshold_x[OT_ISP_DRC_FLTX_NODE_NUM]

FilterX滤波低阈值,用于控制噪声;值越大,对噪声的增强越不明显,但会损失一些弱细节。取值范围:[0x0, 0xF]

filter_high_threshold_x[OT_ISP_DRC_FLTX_NODE_NUM]

FilterX滤波高阈值,用于控制保边程度,值越大整体细节越强,但是强边缘处可能出现halo。取值范围:[0x0, 0xF]

detail_adjust_coef_x

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

local_mixing_bright_x[OT_ISP_DRC_LMIX_NODE_NUM]

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

local_mixing_dark_x[OT_ISP_DRC_LMIX_NODE_NUM]

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

blend_luma_max

FilterFilterX基于亮度的融合权重的最大值全局。取值范围:[0x0, 0xFF],融合权重0xFF代表完全选择Filter,0x0代表完全选择FilterX,下同。

blend_luma_bright_min

FilterFilterX基于亮度的融合权重的最小值亮区。取值范围:[0x0, 0xFF]

blend_luma_bright_threshold

FilterFilterX基于亮度的融合权重的自适应阈值亮区。取值范围:[0x0, 0xFF]

blend_luma_bright_slope

FilterFilterX基于亮度的融合权重的自适应斜率亮区。取值范围:[0x0, 0xF]

blend_luma_dark_min

FilterFilterX基于亮度的融合权重的最小值暗区。取值范围:[0x0, 0xFF]

blend_luma_dark_threshold

Filter和FilterX基于亮度的融合权重的自适应阈值(暗区)。取值范围:[0x0, 0xFF]

blend_luma_dark_slope

Filter和FilterX基于亮度的融合权重的自适应斜率(暗区)。取值范围:[0x0, 0xF]

blend_detail_max

Filter和FilterX基于细节的融合权重的最大值(全局)。取值范围:[0x0, 0xFF]

blend_detail_bright_min

Filter和FilterX基于细节的融合权重的最小值(亮区)。取值范围:[0x0, 0xFF]

blend_detail_bright_threshold

Filter和FilterX基于细节的融合权重的自适应阈值(亮区)。取值范围:[0x0, 0xFF]

blend_detail_bright_slope

Filter和FilterX基于细节的融合权重的自适应斜率(亮区)。取值范围:[0x0, 0xF]

blend_detail_dark_min

FilterFilterX基于细节的融合权重的最小值暗区。取值范围:[0x0, 0xFF]

blend_detail_dark_threshold

Filter和FilterX基于细节的融合权重的自适应阈值(暗区)。取值范围:[0x0, 0xFF]

blend_detail_dark_slope

Filter和FilterX基于细节的融合权重的自适应斜率(暗区)。取值范围:[0x0, 0xF]

detail_adjust_coef_blend

Filter和FilterX融合区的FilterX细节微调系数。取值范围:[0x0, 0xF]

low_saturation_color_ctrl

低饱和区域的颜色控制;主要用于改善暗区灰色区域偏红问题,值越大偏红改善越明显,副作用是部分场景可能导致肤色变灰。取值范围:[0x0, 0xF]

high_saturation_color_ctrl

高饱和区域颜色控制;主要用于改善强边缘描边现象,值越小描边越不明显,副作用是部分场景可能加重紫边。取值范围:[0x0, 0xF]

color_correction_ctrl

控制颜色校正模式,取值范围:[0x0, 0x1]:

0:对所有像素降饱和度;

1:对G通道较大的区域,关闭所有降饱和度操作,以保护高频细节。

op_type

DRC工作模式选择

OT_OP_MODE_AUTO:自动模式

OT_OP_MODE_MANUAL:手动模式。

manual_attr

DRC手动模式属性。

auto_attr

DRC自动模式属性。

asymmetry_curve

DRC Asymmetry Curve属性。

【注意事项】

  • 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相关章节。

  • 线性模式和WDR长帧模式下,DRC只有Filter生效,FilterX不生效,因此FilterX相关滤波参数和融合参数均不生效。

  • 建议color_correction_lut的值不要调试过小,因为降低饱和度的同时会带来高频细节的损失,用户可以配合CA模块来调试整体饱和度。

  • 参数color_correction_ctrl会影响DRC模块中所有降饱和度相关的参数(即purple_reduction_strength, dark_gain_limit_chroma, color_correction_lut)的效果。当降饱和度相关参数较强时,不建议将其设置为1,否则可能导致画面偏绿。

  • dark_gain_limit_luma和dark_gain_limit_chroma两个接口的实际效果不完全平滑,即参数在两个相邻值之间切换时,效果可能存在跳变。

【相关数据类型及接口】

无。

Mesh Shading

功能描述

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

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

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

API参考

  • ss_mpi_isp_set_mesh_shading_attr:设定Mesh Shading算法参数。

  • ss_mpi_isp_get_mesh_shading_attr:获取Mesh Shading算法参数。

  • ss_mpi_isp_set_mesh_shading_gain_lut_attr:设定Mesh Shading增益表属性。

  • ss_mpi_isp_get_mesh_shading_gain_lut_attr:获取Mesh Shading增益表属性。

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_isp.a, libss_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_isp.a, libss_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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_mesh_shading_gain_lut_attr

数据类型

  • OT_ISP_RLSC_POINTS:定义BNR参考LSC增益表的长度。

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

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

  • OT_ISP_MLSC_GAIN_LUT_NUM:定义Mesh Shading Lut表的长度。

  • ot_isp_shading_attr:定义Mesh Shading算法参数。

  • ot_isp_shading_gain_lut:定义Mesh Shading增益表的参数。

  • ot_isp_bnr_lsc_gain_lut:定义BNR参考LSC增益表的参数。

  • ot_isp_shading_lut_attr:定义Mesh Shading增益表属性。

OT_ISP_RLSC_POINTS

【说明】

定义BNR参考LSC增益表的长度。

【定义】

#define OT_ISP_RLSC_POINTS                129

【注意事项】

无。

【相关数据类型及接口】

ot_isp_bnr_lsc_gain_lut

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  en;
    td_u16  mesh_strength;
    td_u16  blend_ratio;
    td_u16  bnr_lsc_auto_en;
} ot_isp_shading_attr;

【成员】

成员名称

描述

en

表示Mesh Shading使能。

取值范围:[0,1]

0:禁止;

1:使能。

mesh_strength

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

SS928V100范围:[0, 65535]

blend_ratio

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

取值范围:[0,256]

bnr_lsc_auto_en

BNR LSC的表参考Mesh LSC表的使能。默认关,使用用户配置的bnr_lsc_gain_lut表;开启后参考会lsc_gain_lut的表,自动刷新bnr_lsc_gain_lut。

取值范围:[0,1]

0:禁止;

1:使能

【注意事项】

【相关数据类型及接口】

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_bnr_lsc_gain_lut

【说明】

定义BayerNR所参考的LSC增益表参数。

【定义】

typedef struct {
    td_u16  r_gain[OT_ISP_RLSC_POINTS];  
    td_u16  gr_gain[OT_ISP_RLSC_POINTS];
    td_u16  gb_gain[OT_ISP_RLSC_POINTS];
    td_u16  b_gain[OT_ISP_RLSC_POINTS];
} ot_isp_bnr_lsc_gain_lut;

【成员】

成员名称

描述

r_gain[OT_ISP_RLSC_POINTS]

用来储存BNR LSC所用R通道标定数据。

取值范围:[0, 65535]

gr_gain[OT_ISP_RLSC_POINTS]

用来储存BNR LSC所用Gr通道标定数据。

取值范围:[0, 65535]

gb_gain[OT_ISP_RLSC_POINTS]

用来储存BNR LSC所用Gb通道标定数据。

取值范围:[0, 65535]

b_gain[OT_ISP_RLSC_POINTS]

用来储存BNR LSC所用B通道标定数据。

取值范围:[0, 65535]

【注意事项】

无。

【相关数据类型及接口】

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_bnr_lsc_gain_lut bnr_lsc_gain_lut;
} 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, width/4 - 60],width为原画面的宽度。

y_grid_width[OT_ISP_MLSC_Y_HALF_GRID_NUM]

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

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

lsc_gain_lut[OT_ISP_MLSC_GAIN_LUT_NUM]

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

取值范围:[0, 1023]

bnr_lsc_gain_lut

用于BNR LSC参考所用的增益表。

取值范围:[0, 65535]

【注意事项】

  • 调整x_grid_width或y_grid_width里的值即调整分区宽度或者高度。注意由于整体画面为上下、左右对称,因此每当设置一个分区的宽度或者高度时,其对称分区的宽度或高度也会相应发生变化。改变后的分区宽度与高度请满足总和为原画面大小宽度或高度的四分之一。由于调节比较复杂并容易造成Color Shading现象,一般不建议手动调节。分辨率切换的时候,x_grid_width与y_grid_width自动重新配置。

  • 硬件基于配置的两组色温下的增益表以及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决定的。得到的坏点通过临近像素的中值滤波进行校正。

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

  • 动态坏点检测/校正

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

API参考

  • ss_mpi_isp_set_dp_calibrate:设置静态坏点标定参数。

  • ss_mpi_isp_get_dp_calibrate:获取静态坏点标定结果。

  • ss_mpi_isp_set_dp_static_attr:设置静态坏点校正属性。

  • ss_mpi_isp_get_dp_static_attr:获取静态坏点校正属性。

  • ss_mpi_isp_set_dp_dynamic_attr:设置动态坏点校正属性。

  • ss_mpi_isp_get_dp_dynamic_attr:获取动态坏点校正属性。

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_isp.a、libss_isp.a

【注意】

  • 该接口为静态坏点标定接口,坏点标定只需启动一次,标定完成之后自动关闭标定使能,恢复为正常的坏点校正模式。亮坏点检测的环境为:使用最小的模拟增益和数字增益,降帧率到5~6fps,使曝光时间为200ms(系统自动完成),遮黑镜头或关闭光圈(需手动操作);暗坏点检测的环境为:光圈处于正常打开状态,要求平坦背景,最好使用辉度箱固定光源,图像整体平均亮度大约为最大亮度50%,或Bayer格式中B通道亮度为最大亮度20%左右。

  • 支持WDR模式下静态坏点标定。WDR模式下默认选择短帧进行静态坏点标定,推荐在标定前,通过ss_mpi_isp_set_module_ctrl接口的bit2_chn_select变量选择长帧,再启动静态坏点标定。一般情况下,长帧的标定即可满足需求。若特殊情况下,长帧标定后仍然有坏点残留,可通过bit2_chn_select变量选择中/短帧再次进行标定,并将多个坏点表合并成一个表。

  • 拼接模式不支持静态坏点标定。

【举例】

以标定亮点为例:

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_isp.a、libss_isp.a

【注意】

无。

【举例】

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

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_isp.a、libss_isp.a

【注意】

每一路ISP BE所能支持的最大静态坏点个数为OT_ISP_STATIC_DP_COUNT_NORMAL(在SS928V100中,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的分块数目参考ISP Proc信息中的” block_num”。

【举例】

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_isp.a、libss_isp.a

【注意】

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

【举例】

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_dp_dynamic_attr

数据类型

  • OT_ISP_STATIC_DP_COUNT_MAX:DPC支持的最大静态坏点个数

  • ot_isp_static_dp_type:静态坏点标定类型。

  • ot_isp_status:ISP校正(检测)状态。

  • ot_isp_dp_static_calibrate:静态坏点标定属性。

  • ot_isp_dp_static_attr:静态坏点校正属性。

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

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

  • ot_isp_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)

【注意事项】

无。

【相关数据类型及接口】

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:选择暗点标定

【注意事项】

无。

【相关数据类型及接口】

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:静态坏点标定超时结束。

【注意事项】

只读。

【相关数据类型及接口】

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秒。

【相关数据类型及接口】

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个互斥的设置,并且对应的优先级是逐次降低的。

【相关数据类型及接口】

无。

ot_isp_dp_dynamic_manual_attr

【说明】

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

【定义】

typedef struct {
    td_u16  strength;
    td_u16  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_u16  strength[OT_ISP_AUTO_ISO_NUM];
    td_u16  blend_ratio[OT_ISP_AUTO_ISO_NUM];
} ot_isp_dp_dynamic_auto_attr;

【成员】

成员名称

描述

strength [OT_ISP_AUTO_ISO_NUM]

自动模式下的DPC的处理强度,该数组的16个值分别对应sensor在不同增益下的DPC的处理强度值,一般情况下,增益越大,配置的DPC处理强度值越大,对应关系如表1所示。若连续两档的处理强度不相等,则通过线性插值的方法确定两档中间某个增益值对应的处理强度。

取值范围:[0, 0xFF]

blend_ratio [OT_ISP_AUTO_ISO_NUM]

自动模式下的融合比率。其值越大,图像越偏绿。若连续两档的融合比率不相等,则通过线性插值的方法确定两档中间的某个增益值对应的融合比率。

取值范围:[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_dynamic_attr

【说明】

定义动态坏点校正属性。

【定义】

typedef struct {
    td_bool enable;
    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_dynamic_attr;

【成员】

成员名称

描述

enable

动态坏点校正功能使能。

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

op_type

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

取值范围:[0, 1],0:自动;1:手动。

默认值0

manual_attr

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

auto_attr

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

sup_twinkle_en

闪烁抑制使能。

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

默认值0。

soft_thr

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

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

soft_slope

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

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

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参数调大,改善暗区坏点残留情况。

【相关数据类型及接口】

Crosstalk Removal

概述

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

功能描述

如Crosstalk 门限图所示,横坐标表示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 属性。

  • ss_mpi_isp_get_crosstalk_attr:获取Crosstalk 属性。

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_isp.a, libss_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_isp.a, libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_crosstalk_attr

数据类型

ot_isp_cr_attr

【说明】

定义ISP Crosstalk 属性。

【定义】

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

【成员】

成员名称

描述

en

使能Crosstalk 功能。

slope

设置Crosstalk门限之上的处理强度。值越大,表示在门限值threshold之上整体处理强度衰减得越慢。默认值9。

取值范围:[0, 12]

sensi_slope

设置Crosstalk敏感度值。默认值9。值越大,表示在门限值sensi_threshold之上,边沿上的处理强度衰减得越慢。

取值范围:[0, 12]

sensi_threshold

设置Crosstalk敏感度门限值。值越大,表示在更强的边沿上也会有绿平衡处理。默认值300。

取值范围:[0, 4095]

threshold[OT_ISP_AUTO_ISO_NUM]

设置Crosstalk门限值。值越大,表示整体处理的强度越大。默认值300。该数组的16个值分别对应的sensor在不同增益情况下不同的设置值。

取值范围:[0, 4095]

strength[OT_ISP_AUTO_ISO_NUM]

设置Crosstalk强度值。值越大,处理强度越大。取值范围:[0, 256],默认值128。该数组的16个值分别对应的sensor在不同增益情况下不同的设置值。

np_offset[OT_ISP_AUTO_ISO_NUM]

设置Noise Profile值。值越大,表示抗噪能力越大。默认值1024。该数组的16个值分别对应的sensor在不同增益情况下不同的设置值。

取值范围:[512, 4095]

表 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域进行空域去噪处理和时域去噪处理。利用动静检测机制,对图像分前景和背景分别处理,来抑制噪声,提高整体图像信噪比。

API参考

  • ss_mpi_isp_set_nr_attr:设置NR参数。

  • ss_mpi_isp_get_nr_attr:获取NR参数。

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_get_nr_attr

ss_mpi_isp_get_nr_attr

【描述】

获取噪声抑制参数。

【语法】

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_get_nr_attr

数据类型

  • OT_ISP_BAYERNR_LUT_LENGTH:定义nr亮度回叠表长度。

  • ot_isp_bnr_sfm0_mode:定义nr sfm0滤波器的两种滤波模式。

  • ot_isp_nr_snr_attr:定义ISP NR空域属性。

  • ot_isp_nr_tnr_attr:定义ISP NR时域属性。

  • ot_isp_nr_snr_manual_attr:定义ISP NR空域手动属性。

  • ot_isp_nr_snr_auto_attr:定义ISP NR空域自动属性。

  • ot_isp_nr_tnr_manual_attr:定义ISP NR时域手动属性。

  • ot_isp_nr_tnr_auto_attr:定义ISP NR时域自动属性。

  • ot_isp_nr_wdr_attr:定义ISP NR在WDR模式下属性。

  • ot_isp_nr_attr:定义ISP NR属性。

OT_ISP_BAYERNR_LUT_LENGTH

【说明】

定义nr亮度回叠表长度。

【定义】

#define OT_ISP_BAYERNR_LUT_LENGTH       33

【注意事项】

无。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_bnr_sfm0_mode

【说明】

定义nr sfm0滤波器的两种滤波模式。

【定义】

typedef enum {
    OT_ISP_BNR_EX = 0,
    OT_ISP_BNR_NORM = 1,
} ot_isp_bnr_sfm0_mode;

【注意事项】

无。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_snr_attr

【说明】

定义ISP NR空域属性。

【定义】

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

【成员】

成员名称

描述

snr_auto

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

snr_manual

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

【注意事项】

【相关数据类型及接口】

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时域手动模式属性。

【注意事项】

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_snr_manual_attr

【说明】

定义ISP NR空域手动属性。

【定义】

typedef struct {
    td_u8                 sfm_threshold;
    ot_isp_bnr_sfm0_mode  sfm0_mode;    
    td_u16    sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM];
    td_u8     sfm0_ex_strength;
    td_u8     sfm0_ex_detail_prot;
    td_u8     sfm0_norm_edge_strength;
    td_u8     sfm1_detail_prot;
    td_u8     sfm1_coarse_strength;
    td_u8     fine_strength;
    td_u16    coring_wgt;
    td_u8     coring_mot_thresh;
} ot_isp_nr_snr_manual_attr;

【成员】

成员名称

描述

sfm_threshold

空域滤波模式:

255:选择sfm0滤波器。

0:选择sfm1滤波器。

0~255: sfm0滤波器和sfm1滤波器融合,值越大,sfm0的比例越高。

取值范围:[0, 255]

sfm0_mode

sfm0滤波模式:

EXT:扩展模式适用于噪声水平较大的场景,去噪强度较大,减轻pattern问题。

NORMAL:normal模式适用于噪声水平一般的场景,这个时候滤波器去噪更倾向于保边,保护细节。

取值范围:[0,1]

sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM]

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

取值范围:[0, 864]

sfm0_ex_strength

sfm0滤波器在ext模式下的精细强度控制,值越大,滤波强度越大。

取值范围:[0, 16]

sfm0_ex_detail_prot

sfm0在ext模式下,细节保留的比例,值越大,细节保留越多。

取值范围:[0, 31]

sfm0_norm_edge_strength

sfm0在normal模式下,边缘滤波的强度,值越大,边缘滤波越强。

取值范围:[0, 31]

sfm1_detail_prot

sfm1边缘纹理保留的比例,值越大,边缘纹理越清晰。

取值范围:[0, 31]

sfm1_coarse_strength

sfm1滤波器整体强度控制,值越大,滤波强度越大。

取值范围:[0, 63]

fine_strength

原始像素和去噪结果加权,值越大,去噪效果越强。

取值范围:[0,128]

coring_wgt

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

取值范围:[0, 3200]

coring_mot_thresh

运动区域回叠阈值,值越大,运动回叠区域越少。

取值范围:[0, 255]

【注意事项】

  • 注意各参数的取值范围。

  • 低照度下,参数sfm0_coarse_strength 与 fine_strength 同时调到最大值时,容易出现由于去噪强度过大导致的边缘虚化,建议根据效果调到合适取值。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_snr_auto_attr

【说明】

定义ISP NR空域自动属性。

【定义】

typedef struct {
    td_u8  sfm_threshold[OT_ISP_AUTO_ISO_NUM];
    ot_isp_bnr_sfm0_mode  sfm0_mode[OT_ISP_AUTO_ISO_NUM];
    td_u16  sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm0_ex_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm0_ex_detail_prot[OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm0_norm_edge_strength[OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm1_detail_prot[OT_ISP_AUTO_ISO_NUM];
    td_u8  sfm1_coarse_strength[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_thresh[OT_ISP_AUTO_ISO_NUM];
} ot_isp_nr_snr_auto_attr;

【成员】

成员名称

描述

sfm_threshold

空域滤波模式:

255:选择sfm0滤波器。

0:选择sfm1滤波器。

0~255: sfm0滤波器和sfm1滤波器融合,值越大,sfm0的比例越高。

取值范围:[0, 255]

sfm0_mode

sfm0滤波模式:

EXT:扩展模式适用于噪声水平较大的场景,去噪强度较大,减轻pattern问题。

NORMAL:normal模式适用于噪声水平一般的场景,这个时候滤波器去噪更倾向于保边,保护细节。

取值范围:[0,1]

sfm0_coarse_strength[OT_ISP_BAYER_CHN_NUM]

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

取值范围:[0, 864]

sfm0_ex_strength

sfm0滤波器在ext模式下的精细强度控制,值越大,滤波强度越大。

取值范围:[0, 16]

sfm0_ex_detail_prot

sfm0在ext模式下,细节保留的比例,值越大,细节保留越多。

取值范围:[0, 31]

sfm0_norm_edge_strength

sfm0在normal模式下,边缘滤波的强度,值越大,边缘滤波越强。

取值范围:[0, 31]

sfm1_detail_prot

sfm1边缘纹理保留的比例,值越大,边缘纹理越清晰。

取值范围:[0, 31]

sfm1_coarse_strength

sfm1滤波器整体强度控制,值越大,滤波强度越大。

取值范围:[0,63]

fine_strength

原始像素和去噪结果加权,值越大,去噪效果越强。

取值范围:[0,128]

coring_wgt

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

取值范围:[0, 3200]

coring_mot_thresh

运动区域回叠阈值,值越大,运动回叠区域越少。

取值范围:[0,255]

【注意事项】

  • 注意各参数的取值范围。

  • 低照度下,参数sfm0_coarse_strength 与 fine_strength 同时调到最大值时,容易出现由于去噪强度过大导致的边缘虚化,建议根据效果调到合适取值。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_tnr_manual_attr

【说明】

定义ISP NR时域手动属性。

【定义】

typedef struct {
    td_bool md_mode;   
    td_u8   md_anti_flicker_strength;  
    td_u8   md_static_ratio;      
    td_u8   md_static_fine_strength;    
    td_u8   tss;    
    td_u8   tfr;   
    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_anti_flicker_strength

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

取值范围:[0,64]

md_static_ratio

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

取值范围:[0,64]

md_static_fine_strength

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

取值范围:[0,255]

tss

控制静止区域的光滑程度,值越大,静止区域越光滑。

取值范围:[0,255]

tfr

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

取值范围:[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]

【注意事项】

注意各参数的取值范围。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_tnr_auto_attr

【说明】

定义ISP NR时域自动属性。

【定义】

typedef struct {
    td_bool md_mode [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_static_fine_strength [OT_ISP_AUTO_ISO_NUM];
    td_u8   tss [OT_ISP_AUTO_ISO_NUM];
    td_u8   tfr [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

运动检测类型:

0:运动检测对小运动更敏感。

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

取值范围:[0,1]

md_anti_flicker_strength

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

取值范围:[0,64]

md_static_ratio

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

取值范围:[0,64]

md_static_fine_strength

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

取值范围:[0,255]

tss

控制静止区域的光滑程度,值越大,静止区域越光滑。

取值范围:[0,255]

tfr

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

取值范围:[0,255]

tfs

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

取值范围:[0,255]

sfr_r

控制R分量的图像平滑程度,值越大,R分量图像整体越平滑。

取值范围:[0,128]

sfr_g

控制G分量的图像平滑程度,值越大,G分量图像整体越平滑。

取值范围:[0,128]

sfr_b

控制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]

【注意事项】

注意各参数的取值范围。

【相关数据类型及接口】

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_sfm1_wdr_strength;
    td_u8 snr_sfm1_fusion_strength;
    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:融合区去噪强度,值越大,去噪越强;

3合1模式:

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

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

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

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

取值范围:[0, 64]

snr_sfm0_fusion_strength[OT_ISP_WDR_MAX_FRAME_NUM]

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

2合1模式:

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

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

3合1模式:

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

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

2:长帧去噪强度,值越大,去噪越强。

取值范围:[0, 64]

snr_sfm1_wdr_strength

Wdr模式下,sfm1滤波器短帧区域相对于长帧区域的去噪强度。值越大,去噪强度越大。

取值范围:[0,255]

snr_sfm1_fusion_strength

fusion模式下,sfm1滤波器短帧区域相对于长帧区域的去噪强度。值越大,去噪强度越大。

取值范围:[0,255]

md_wdr_strength[OT_ISP_WDR_MAX_FRAME_NUM]

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

2合1模式下:

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

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

3合1模式下:

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

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

2:长帧、中帧区域的时域去噪强度。

取值范围:[0,64]

md_fusion_strength[OT_ISP_WDR_MAX_FRAME_NUM]

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

2合1模式下:

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

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

3合1模式下:

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

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

2:长帧、中帧区域的时域去噪强度。

取值范围:[0,64]

【注意事项】

  • ISP NR的WDR相关功能不支持在OT_VI_VIDEO_MODE_ADVANCED模式下使用。

  • 注意各参数的取值范围。

【相关数据类型及接口】

ot_isp_nr_attr

ot_isp_nr_attr

【说明】

定义ISP NR属性。

【定义】

typedef struct {
    td_bool    en;
    ot_op_mode op_type;     
    td_bool    tnr_en;
    td_bool    lsc_nr_en;
    td_u8      lsc_ratio1;
    td_u8      lsc_ratio2;
    td_u16     coring_ratio[OT_ISP_BAYERNR_LUT_LENGTH];  
    ot_isp_nr_snr_attr   snr_cfg;
    ot_isp_nr_tnr_attr   tnr_cfg;
    ot_isp_nr_wdr_attr   wdr_cfg;
} ot_isp_nr_attr;

【成员】

成员名称

描述

en

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打开;

lsc_nr_en

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

0:Nr参考lsc降噪关闭;

1:Nr参考lsc降噪打开。

lsc_ratio1

Nr参考lsc去噪强度,值越大,空域去噪越强。需要在时域打开下使用。

取值范围:[0,15]

lsc_ratio2

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

取值范围:[0,255]

coring_ratio

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

取值范围:[0,1023]

snr_cfg

Nr空域去噪属性。

tnr_cfg

Nr时域去噪属性。

wdr_cfg

Nr在wdr模式下去噪属性。

【注意事项】

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

  • en为TD_TRUE,op_type为OT_OP_MODE_AUTO,使用自动NR功能。

  • en设置为TD_TRUE,op_type设置为OT_OP_MODE_MANUAL使用手动NR功能。

  • 当工作在WDR模式下,NR整体去噪强度参数wdr_cfg生效。

  • BNR参考LSC去噪功能需要在LSC模块打开下调试,当LSC模块本身关闭时,BNR参考LSC不生效。

  • BNR时域打开时,在一些通路模式切换的场景,比如帧率切换,可能会出现时域重新收敛导致的噪声闪烁的现象。

【相关数据类型及接口】

无。

Dehaze

功能描述

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

API参考

  • ss_mpi_isp_set_dehaze_attr:设置去雾属性。

  • ss_mpi_isp_get_dehaze_attr:获取去雾属性。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_dehaze_attr

数据类型

  • OT_ISP_DEHAZE_LUT_SIZE:定义去雾LUT的大小。

  • ot_isp_dehaze_manual_attr:定义去雾手动模式属性。

  • ot_isp_dehaze_auto_attr:定义去雾自动模式属性。

  • ot_isp_dehaze_attr:定义ISP去雾属性。

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

【成员】

成员名称

描述

en

使能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参数。

  • ss_mpi_isp_get_anti_false_color_attr:获取AntiFalseColor参数。

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_isp.a, libss_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_isp.a、libss_isp.a

【注意】

无。

【举例】

【相关主题】

ss_mpi_isp_set_anti_false_color_attr

数据类型

  • ot_isp_anti_false_color_manual_attr:定义ISP ANTIFALSECOLOR手动属性。

  • ot_isp_anti_false_color_auto_attr:定义ISP ANTIFALSECOLOR自动属性。

  • ot_isp_anti_false_color_attr:定义ISP ANTIFALSECOLOR属性。

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

【成员】

成员名称

描述

en

ANTIFALSECOLOR模块使能。

取值范围:[0,1]

0:禁止;

1:使能。

op_type

ANTIFALSECOLOR工作类型。

OT_OP_MODE_AUTO:自动;

OT_OP_MODE_MANUAL:手动。

auto_attr

ANTIFALSECOLOR自动参数。

manual_attr

ANTIFALSECOLOR手动参数。

【注意事项】

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

  • en为TD_TRUE,op_type为OT_OP_MODE_AUTO,使用自动ANTIFALSECOLOR功能。

  • en设置为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参数。

  • ss_mpi_isp_get_demosaic_attr:获取Demosaic参数。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_demosaic_attr

数据类型

  • ot_isp_demosaic_manual_attr:定义ISP DEMOSAIC手动属性。

  • ot_isp_demosaic_auto_attr:定义ISP DEMOSAIC自动属性。

  • ot_isp_demosaic_attr:定义ISP DEMOSAIC属性。

ot_isp_demosaic_manual_attr

【说明】

定义ISP DEMOSAIC手动属性。

【定义】

typedef struct {
    td_u8   nddm_strength;  
    td_u8   nddm_mf_detail_strength;    
    td_u8   nddm_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

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

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

nddm_mf_detail_strength

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

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

nddm_hf_detail_strength

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

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

detail_smooth_range

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

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

color_noise_f_threshold

根据画面高频程度降低颜色噪声,值越大,则越容易在平坦区域进行去色噪功能。值越小,则影响的像素越少。取值范围:[0x0, 0xFF],默认值为0。

color_noise_f_strength

根据画面高频程度降低颜色噪声的强度,值越大,则降饱和度强度越高。取值范围:[0x0, 0x8],默认值为8。

color_noise_y_threshold

根据亮度和饱和度降低颜色噪声,值越大,对暗处影响越大,对饱和度高的像素影响越大。值越小,影响的像素越少。

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

color_noise_y_strength

根据亮度和饱和度降低颜色噪声的强度,值越大,对影响的像素降饱和度越多,值越小,降饱和度程度越少。

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

【注意事项】

  • 在红外模式下,或者在CCM饱和度设定成0,输出灰度图的情况下,需要将color_noise_y_threshold 和color_noise_y_strength参数都设定成0,关闭降低颜色噪声的功能。

  • 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];
    td_u8   nddm_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]

nddm_mf_detail_strength

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

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

nddm_hf_detail_strength

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

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

detail_smooth_range

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

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

color_noise_f_threshold

根据画面高频程度降低颜色噪声,值越大,则越容易在平坦区域进行去色噪功能。值越小,则影响的像素越少。取值范围:[0x0, 0xFF],默认值为0。

color_noise_f_strength

根据画面高频程度降低颜色噪声的强度,值越大,则降饱和度强度越高。取值范围:[0x0, 0x8],默认值为8。

color_noise_y_threshold

根据亮度和饱和度降低颜色噪声,值越大,对暗处影响越大,对饱和度高的像素影响越大。值越小,影响的像素越少。

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

color_noise_y_strength

根据亮度和饱和度降低颜色噪声的强度,值越大,对影响的像素降饱和度越多,值越小,降饱和度程度越少。

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

【注意事项】

注意各参数的取值范围。

【相关数据类型及接口】

ot_isp_demosaic_attr

ot_isp_demosaic_attr

【说明】

定义ISP DEMOSAIC属性。

【定义】

typedef struct {
    td_bool en;
    ot_op_mode op_type;
    ot_isp_demosaic_manual_attr manual_attr;
    ot_isp_demosaic_auto_attr   auto_attr;
} ot_isp_demosaic_attr;

【成员】

成员名称

描述

en

Demosaic模块使能。

取值范围:[0, 1]

0:禁止;

1:使能。

op_type

DEMOSAIC工作类型。

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

auto_attr

DEMOSAIC自动参数。

manual_attr

DEMOSAIC手动参数。

【注意事项】

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

  • en为TD_TRUE,op_type为OT_OP_MODE_AUTO,使用自动DEMOSAIC功能。

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

【相关数据类型及接口】

无。

BayerSharpen

功能描述

BayerSharpen模块用于增强图像的清晰度,包括调节图像边缘的锐化属性和增强图像的细节和纹理,同时还能控制图像水平和垂直方向的边缘锐化的强度。此外,还能控制锐化后的图像的overshoot和undershoot,以及抑制噪声的增强。

API参考

  • ss_mpi_isp_set_bayershp_attr:设置图像锐化属性。

  • ss_mpi_isp_get_bayershp_attr:获取图像锐化属性。

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_get_bayershp_attr

数据类型

  • OT_ISP_BSHP_LUMA_WGT_NUM:定义Bayer Sharpen亮度锐化权重区间数。

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

  • ot_isp_bayershp_manual_attr:定义Bayer Sharpen手动属性。

  • ot_isp_bayershp_auto_attr:定义Bayer Sharpen自动属性。

  • ot_isp_bayershp_attr:定义Bayer Sharpen属性。

OT_ISP_BSHP_LUMA_WGT_NUM

【说明】

定义Bayer Sharpen亮度锐化权重区间数。

【定义】

#define OT_ISP_BSHP_LUMA_WGT_NUM        32

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_BSHP_HALF_CURVE_NUM

【说明】

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

【定义】

#define OT_ISP_BSHP_HALF_CURVE_NUM        32

【注意事项】

无。

【相关数据类型及接口】

ot_isp_bayershp_manual_attr

【说明】

定义Bayer Sharpen手动属性。

【定义】

typedef struct {
    td_u8  luma_wgt[OT_ISP_BSHP_LUMA_WGT_NUM];                      
    td_u16 edge_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM];            
    td_u16 texture_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM];
    td_u16 edge_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM];            
    td_u16 texture_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM];
    td_u8  edge_filt_strength;                                      
    td_u16 texture_max_gain;                                        
    td_u16 edge_max_gain;                                           
    td_u16 overshoot;                                               
    td_u16 undershoot;                                              
    td_u16 g_chn_gain;                                              
} ot_isp_bayershp_manual_attr;

【成员】

成员名称

描述

luma_wgt[OT_ISP_BSHP_LUMA_WGT_NUM]

根据亮度锐化强度。亮度分为32段。每一段可以分别配置不同的强度实现差异化锐化。

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

edge_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM]

边缘中频增强强度,它是根据边缘强弱程度配置不同的锐化强度的。值越大,边缘越锐,但是会有点粗。分为32段。每一段可以分别配置不同的强度实现差异化锐化。

取值范围:[0, 1023]

texture_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM]

纹理中频增强强度,它是根据纹理强弱程度配置不同的锐化强度的。值越大,纹理越多。分为32段。每一段可以分别配置不同的强度实现差异化锐化。

取值范围:[0, 1023]

edge_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM]

边缘高频增强强度,它是根据边缘强弱程度配置不同的锐化强度的。值越大,边缘会更锐,也会更加细腻。分为32段。每一段可以分别配置不同的强度实现差异化锐化。

取值范围:[0, 1023]

texture_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM]

纹理高频增强强度,它是根据纹理强弱程度配置不同的锐化强度的。值越大,纹理会更锐,会更加细腻。分为32段。每一段可以分别配置不同的强度实现差异化锐化。

取值范围:[0, 1023]

edge_filt_strength

边缘平滑强度。该参数值越大,边缘越平滑干净,但也会出现细节连成线条的可能。

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

texture_max_gain

纹理增强限制阈值,它会限制住纹理增强的强度,不让纹理太锐显得不自然。值越小,纹理增强被限制的越大。

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

edge_max_gain

边缘增强限制阈值,它会限制住边缘增强的强度,不让边缘太锐显得不自然。值越小,边缘增强被限制的越大。

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

overshoot

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

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

undershoot

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

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

g_chn_gain

对G通道比例小的区域增强的强度。值越大,G通道比例小的区域锐化强度越大。

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

【注意事项】

无。

【相关数据类型及接口】

无。

ot_isp_bayershp_auto_attr

【说明】

定义Bayer Sharpen自动属性。

【定义】

typedef struct {
    td_u8  luma_wgt[OT_ISP_BSHP_LUMA_WGT_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 edge_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 texture_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 edge_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16 texture_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u8  edge_filt_strength[OT_ISP_AUTO_ISO_NUM];
    td_u16 texture_max_gain[OT_ISP_AUTO_ISO_NUM];
    td_u16 edge_max_gain[OT_ISP_AUTO_ISO_NUM];
    td_u16 overshoot[OT_ISP_AUTO_ISO_NUM];                                       
    td_u16 undershoot[OT_ISP_AUTO_ISO_NUM];                                      
    td_u16 g_chn_gain[OT_ISP_AUTO_ISO_NUM];                                      
} ot_isp_bayershp_auto_attr;

【成员】

成员名称

描述

luma_wgt[OT_ISP_BSHP_LUMA_WGT_NUM] [OT_ISP_AUTO_ISO_NUM]

根据亮度锐化强度。亮度分为32段。每一段可以分别配置不同的强度实现差异化锐化。

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

edge_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM] [OT_ISP_AUTO_ISO_NUM]

边缘中频增强强度,它是根据边缘强弱程度配置不同的锐化强度的。值越大,边缘越锐,但是会有点粗。分为32段。每一段可以分别配置不同的强度实现差异化锐化。

取值范围:[0, 1023]

texture_mf_strength[OT_ISP_BSHP_HALF_CURVE_NUM] [OT_ISP_AUTO_ISO_NUM]

纹理中频增强强度,它是根据纹理强弱程度配置不同的锐化强度的。值越大,纹理越多。分为32段。每一段可以分别配置不同的强度实现差异化锐化。

取值范围:[0, 1023]

edge_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM] [OT_ISP_AUTO_ISO_NUM]

边缘高频增强强度,它是根据边缘强弱程度配置不同的锐化强度的。值越大,边缘会更锐,也会更加细腻。分为32段。每一段可以分别配置不同的强度实现差异化锐化。

取值范围:[0, 1023]

texture_hf_strength[OT_ISP_BSHP_HALF_CURVE_NUM] [OT_ISP_AUTO_ISO_NUM]

纹理高频增强强度,它是根据纹理强弱程度配置不同的锐化强度的。值越大,纹理会更锐,会更加细腻。分为32段。每一段可以分别配置不同的强度实现差异化锐化。

取值范围:[0, 1023]

edge_filt_strength[OT_ISP_AUTO_ISO_NUM]

边缘平滑强度。该参数值越大,边缘越平滑干净,但也会出现细节连成线条的可能。

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

texture_max_gain[OT_ISP_AUTO_ISO_NUM]

纹理增强限制阈值,它会限制住纹理增强的强度,不让纹理太锐显得不自然。值越小,纹理增强被限制的越大。

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

edge_max_gain[OT_ISP_AUTO_ISO_NUM]

边缘增强限制阈值,它会限制住边缘增强的强度,不让边缘太锐显得不自然。值越小,边缘增强被限制的越大。

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

overshoot[OT_ISP_AUTO_ISO_NUM]

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

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

undershoot[OT_ISP_AUTO_ISO_NUM]

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

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

g_chn_gain[OT_ISP_AUTO_ISO_NUM]

对G通道比例小的区域增强的强度。值越大,G通道比例小的区域锐化强度越大。

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

【注意事项】

无。

【相关数据类型及接口】

无。

ot_isp_bayershp_attr

【说明】

定义Bayer Sharpen属性。

【定义】

typedef struct {
    td_bool en;
    ot_op_mode op_type;
    ot_isp_bayershp_manual_attr manual_attr;
    ot_isp_bayershp_auto_attr  auto_attr;
} ot_isp_bayershp_attr;

【成员】

成员名称

描述

en

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。

manual_attr

Bayer Sharpen手动参数。

auto_attr

Bayer Sharpen自动参数。

【注意事项】

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

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

  • en设置为TD_TRUE,op_type设置为OT_OP_MODE_MANUAL使用手动Bayer Sharpen功能。

  • edge_filt_strength边缘平滑强度。该参数值越大,边缘越平滑干净,但也会出现细节连成线条的现象。

【相关数据类型及接口】

黑电平

功能描述

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

API参考

  • ss_mpi_isp_set_black_level_attr:设置黑电平属性。

  • ss_mpi_isp_get_black_level_attr:获取黑电平属性。

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_isp.a、libss_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对清楚。

  • 如果使用虚拟pipe,即vi_pipe>=4时,不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。sensor built-in模式下,同样不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。

  • 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。

【举例】

【相关主题】

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

数据类型

  • ot_isp_black_level_mode:定义黑电平工作类型。

  • ot_isp_black_level_manual_attr:定义手动黑电平属性。

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

  • ot_isp_black_level_dynamic_attr:定义dynamic BLC属性。

  • ot_isp_black_level_attr:定义黑电平属性。

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区统计得到的黑电平值。

【注意事项】

【相关数据类型及接口】

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区,才能打开DynamicBLC模式对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的标定值不够准确,从而导致等曝光量切换时会有颜色闪烁。但是不会影响开关灯这种极限场景的图像效果。

【相关数据类型及接口】

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属性。

【注意事项】

  • Sensor built-in模式下不支持使能user_black_level_en。

  • 如果使用虚拟pipe,即vi_pipe>=4时,不支持使能user_black_level_en。

【相关数据类型及接口】

黑电平标定工具

功能描述

黑电平标定工具用于标定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接口修改标定结果,会导致标定失效。

黑电平标定工具实现在量产过程中,针对不同机器的差异进行对黑电平补偿参数标定的功能。用户可以使用在线标定工具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会自动将标定数据导入,无需手动导入。

黑电平补偿参数的校正过程:

  1. 修改sensor驱动(sns_name_cmos_ex.h)。将OT_ISP_BLACK_LEVEL_MODE_DYNAMIC改为动态BLC。

  2. 将设备的光圈完全关闭,或者使用镜头盖将镜头输入遮挡,确保无光线进入;

  3. 以sample为例,起线性业务( ./sample_vio 0 );

  4. 运行标定工具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标定属性。

  • ss_mpi_isp_set_fpn_attr:设置去FPN属性。

  • ss_mpi_isp_get_fpn_attr:获取去FPN属性。

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_isp.a、libss_isp.a

【注意】

  • 标定时用的内存注意要按16bit进行分配,标定完成之后要把黑帧/行,ISO,黑帧的长度、OFFSET、是否压缩标志等保存到外部存储介质,在校正的时候要用到这些信息。

  • 当VI的PIPE处于VI在线或VI离线才支持FPN标定。

  • 当VI处于离线OT_VI_VIDEO_MODE_NORM模式下,图像宽度大于4096时,不支持FPN标定;当图像面积大于3840x2160时,不支持离线OT_VI_VIDEO_MODE_NORM模式标定,可能会出现标定失败的现象,可使用OT_VI_VIDEO_MODE_ADVANCED模式标出黑帧。

  • 当VI处于OT_VI_STITCH_CFG_MODE_SYNC模式下,不支持FPN标定。

  • 图像宽度大于4096时,只支持OT_PIXEL_FORMAT_RGB_BAYER_16BPP格式的黑帧标定。

  • SS928V100 FPN标定不支持压缩,只能是非压缩模式。

  • 在WDR模式下,FPN不支持标定。

  • VI物理通道使能时,不支持开启FPN标定。

  • 当VI模块的PIPE有销毁操作时(例如:分辨率切换、WDR模式切换等情况),保存在VI模块的FPN属性会丢失,FPN功能需要在VI模块的PIPE创建后重新配置才能恢复。

  • FPN校正接口具有一定的延时,如关闭FPN校正后需要再次进行FPN标定,则需要等待几帧时间再调用FPN标定接口。

  • 该标定接口为阻塞接口,等待标定完成后返回,超时时间为1600ms。

【举例】

标定过程请参考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_isp.a、libss_isp.a

【注意】

  • SS928V100 FPN校正不支持压缩,只能是非压缩模式。

  • 图像宽度大于4096时,只支持OT_PIXEL_FORMAT_RGB_BAYER_16BPP格式的黑帧校正。

  • 当VI处于OT_VI_STITCH_CFG_MODE_SYNC模式下,不支持FPN校正。

  • 3合 1 WDR模式下不支持FPN校正。

  • FPN校正开启时,不支持从线性到WDR之间相互切换,切换前需先关闭FPN。

  • FPN不支持在虚拟pipe下开启。

  • 根据标定时候保存的黑帧信息,读出OFFSET、ISO等信息,同时要把黑帧读入内存,这些是在校正时要输入信息。如果用户选择为自动模式时,会根据校正时的ISO来自动调节校正的强度;而手动模式会根据用户输入的校正强度进行校正。

【举例】

校正过程请参考sample vio代码。

【相关主题】

ss_mpi_isp_get_fpn_attr

ss_mpi_isp_get_fpn_attr

【描述】

获取去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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_fpn_attr

数据类型

  • ot_isp_fpn_frame_info:定义去FPN的标定黑帧信息。

  • ot_isp_fpn_calibrate_attr:定义去FPN的标定属性。

  • ot_isp_fpn_attr:定义去FPN的校正属性。

  • ot_isp_fpn_manual_attr:定义去FPN在手动模式的校正属性。

  • ot_isp_fpn_auto_attr:定义去FPN在自动模式的校正属性。

  • ot_isp_fpn_type:定义去FPN类型。

  • ot_isp_fpn_out_mode:定义去FPN标定输出的模式。

ot_isp_fpn_frame_info

【说明】

定义去FPN的标定黑帧信息。

【定义】

typedef struct {
    td_u32              iso;
    td_u32              offset[OT_ISP_STRIPING_MAX_NUM]; 
    td_u32              frm_size;
    ot_video_frame_info fpn_frame;
} ot_isp_fpn_frame_info;

【成员】

成员名称

描述

iso

标定黑帧时的ISO,来自于标定时的ISO。

ISO值必须大于0。

offset[3]

黑帧所有像素的平均值,来自于标定时的OFFSET。

取值范围:[0, 0x3FFF]仅高12bit有效。

frm_size

帧的大小,输出的黑帧有二种:压缩、非压缩,来自于标定时保存的黑帧大小。SS928V100只支持非压缩。

fpn_frame

黑帧帧信息,首先分配内存,然后把标定时的黑帧从外存读入此内存,同时对此结构体成员进行赋值。具体描述请参见《MPP媒体处理软件V5.0开发参考》的“系统控制”章节。

【注意事项】

  • 使用FPN时,图像宽度要求为16的整数倍,否则标定的黑帧或校正后的图像会有异常。

  • offset可以在/proc/umap/isp中查询得到。

  • 当标定时选择的黑帧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

标定的类型,有二种:帧模式与行模式,帧模式校正效果要优于行模式,而行模式要比帧模式省内存。

SS928V100只支持帧模式。

fpn_cali_frame

标定出来的黑帧信息。

fpn_mode

标定输出的模式,默认为0

【注意事项】

阈值与标定时保存黑帧的比特数相关,假设标定时保存的比特数是N,则阈值一般取(2^N)>>2。

【相关数据类型及接口】

ot_isp_fpn_attr

【说明】

定义去FPN的校正属性。

【定义】

typedef struct {
    td_bool                enable;
    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

校正使能。

op_type

校正模式,分手动与自动模式。

fpn_type

校正类型,分帧模式与行模式。

fpn_frm_info

黑帧帧信息。

manual_attr

手动校正属性。

auto_attr

自动校正属性。

【注意事项】

校正模式分为手动与自动模式,手动模式需要用户设置校正强度,而自动模式不需要设置校正强度,系统会根据当前图像的ISO计算出校正强度,进行动态校正。

【相关数据类型及接口】

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。

【相关数据类型及接口】

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属性。

  • ss_mpi_isp_get_ca_attr:获取CA属性。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

HDR模式,默认关闭CA,客户可以自行设置打开。

【举例】

无。

【相关主题】

ss_mpi_isp_set_ca_attr

数据类型

  • OT_ISP_CA_YRATIO_LUT_LENGTH:CA的数据分格。

  • ot_isp_ca_type:色彩调整模块的工作模式,0为CA模式,1为CP模式。

  • ot_isp_ca_lut:CA模式的属性。

  • ot_isp_cp_lut:CP模式的属性。

  • ot_isp_ca_attr:定义颜色调整模块的属性,包含了CA模式属性和CP模式属性。

OT_ISP_CA_YRATIO_LUT_LENGTH

【说明】

CA的数据分格,CA模式下为亮度等分,CP模式下为YUV数据等分。

【定义】

#define OT_ISP_CA_YRATIO_LUT_LENGTH               256

【注意事项】

无。

【相关数据类型及接口】

ot_isp_ca_type

【说明】

定义颜色调整模块的工作模式。0为CA模式,1为CP模式。

【定义】

typedef enum {
    OT_ISP_CA_ENABLE = 0x0,
    OT_ISP_CP_ENABLE,
    OT_ISP_CA_BUTT
} ot_isp_ca_type;

【成员】

成员名称

描述

OT_ISP_CA_ENABLE

0x0:CA模式。

OT_ISP_CP_ENABLE

0x1: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.11 */
    td_s32  iso_ratio[OT_ISP_AUTO_ISO_NUM];         /* 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]

【注意事项】

无。

【相关数据类型及接口】

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]

【注意事项】

无。

【相关数据类型及接口】

无。

ot_isp_ca_attr

【说明】

定义颜色调整模块的属性,包含了CA模式属性和CP模式属性。

【定义】

typedef struct {
    td_bool en;             /* RW;Range:[0x0,0x1];Format:1.0 */
    ot_isp_ca_type ca_cp_en;
    ot_isp_ca_lut  ca;
    ot_isp_cp_lut  cp;
} ot_isp_ca_attr;

【成员】

成员名称

描述

en

色彩调整模块的使能。

取值范围:[0,1]

ca_cp_en

色彩调整模块的工作模式。

ca

CA模式的属性。

cp

CP模式的属性。

【注意事项】

【相关数据类型及接口】

CAC

功能描述

色差(Chromatic Aberration)是指光学上透镜无法将各种波长的光聚焦在同一点上的现象,是一种与镜头有关的缺陷,它产生的主要原因是不同波长的光具有不同的折射率(色散现象)。色差可以分为如下的两类:

  • 轴向色差(Axial Chromatic Aberration)

    • 透镜对于不同的光会有不同的折射率,因此不同颜色的光会聚焦在不同的焦平面上,大口径镜头容易产生这种色差,缩小光圈可以减弱轴向色差。

    • 人眼对于G通道更敏感,一般G通道可以正确对焦,从而引起R、B的模糊,造成高光区与低光区交界处出现明显的紫边表现。

    • 具有明显的局部特性,因此校正紫边时采用Local CAC。

  • 横向色差(Lateral Chromatic Aberration)

    • 透镜的放大倍数也与折射率有关,它使得不同波长光线的像高不同,即不同波长的光会聚焦在焦平面上不同的位置,会造成R、G、B 3通道具有不同的影像高度,在影像上产生色的错位。

    • 越偏离图像中心,横向色差越明显,一般横向色差表现为物体相对的两侧边缘出现不同的颜色,但具体表现为什么颜色与镜头组密切相关,不同的镜头组会表现出不同种类的颜色边缘。

    • 具有全局特性,在校正时采用ACAC。

图 1 色差图解

API参考

  • ss_mpi_isp_set_local_cac_attr:设置紫边检测校正参数。

  • ss_mpi_isp_get_local_cac_attr:获取紫边检测校正参数。

  • ss_mpi_isp_set_acac_attr:设置色差校正参数。

  • ss_mpi_isp_get_acac_attr:获取色差校正参数。

ss_mpi_isp_set_local_cac_attr

【描述】

设置紫边检测校正参数。

【语法】

td_s32 ss_mpi_isp_set_local_cac_attr(ot_vi_pipe vi_pipe, const ot_isp_local_cac_attr *local_cac_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

local_cac_attr

紫边检测校正参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_local_cac_attr

ss_mpi_isp_get_local_cac_attr

【描述】

获取紫边检测校正参数。

【语法】

td_s32 ss_mpi_isp_get_local_cac_attr(ot_vi_pipe vi_pipe, ot_isp_local_cac_attr *local_cac_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

local_cac_attr

紫边检测校正参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_local_cac_attr

ss_mpi_isp_set_acac_attr

【描述】

设置横向色差校正参数。

【语法】

td_s32 ss_mpi_isp_set_acac_attr(ot_vi_pipe vi_pipe, const ot_isp_acac_attr *acac_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

acac_attr

横向色差校正参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_local_cac_attr

ss_mpi_isp_get_acac_attr

【描述】

获取色差校正参数。

【语法】

td_s32 ss_mpi_isp_get_acac_attr(ot_vi_pipe vi_pipe, ot_isp_acac_attr *acac_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

acac_attr

横向色差校正参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_local_cac_attr

数据类型

  • OT_ISP_LCAC_EXP_RATIO_NUM:定义local CAC与曝光比联动时曝光比档位数。

  • OT_ISP_LCAC_DET_NUM:定义local CAC高亮检测模块检测阈值的个数。

  • OT_ISP_ACAC_THR_NUM:定义ACAC边缘检测阈值的个数。

  • ot_isp_depurplestr_manual_attr:紫边校正手动属性。

  • ot_isp_depurplestr_auto_attr:紫边校正自动属性。

  • ot_isp_local_cac_attr:紫边检测校正属性。

  • ot_isp_acac_attr:横向色差校正属性。

  • ot_isp_acac_manual_attr:横向色差校正手动属性。

  • ot_isp_acac_auto_attr:横向色差校正自动属性。

OT_ISP_LCAC_EXP_RATIO_NUM

【说明】

定义local CAC与曝光比联动时曝光比档位数。

【定义】

#define OT_ISP_LCAC_EXP_RATIO_NUM       16

【注意事项】

无。

【相关数据类型及接口】

ot_isp_depurplestr_auto_attr

OT_ISP_LCAC_DET_NUM

【说明】

定义local CAC高亮检测模块检测阈值的个数

【定义】

#define OT_ISP_LCAC_DET_NUM             3

【注意事项】

无。

【相关数据类型及接口】

ot_isp_local_cac_attr

OT_ISP_ACAC_THR_NUM

【说明】

定义ACAC边缘检测阈值的个数

【定义】

#define OT_ISP_ACAC_THR_NUM             2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_depurplestr_manual_attr

【说明】

定义紫边校正手动属性。

【定义】

typedef struct {
    td_u8 de_purple_cr_strength;  
    td_u8 de_purple_cb_strength;  
} ot_isp_depurplestr_manual_attr;

【成员】

成员名称

描述

de_purple_cr_strength

R通道的校正强度。

de_purple_cb_strength

B通道的校正强度。

【注意事项】

de_purple_cb_strength和 de_purple_cr_strength校正强度过大,可能出现边界不连续现象或闪烁现象。

【相关数据类型及接口】

ot_isp_local_cac_attr

ot_isp_depurplestr_auto_attr

【说明】

定义紫边校正自动属性。

【定义】

typedef struct {
    td_u8 de_purple_cr_strength[OT_ISP_LCAC_EXP_RATIO_NUM];
    td_u8 de_purple_cb_strength[OT_ISP_LCAC_EXP_RATIO_NUM];
} ot_isp_depurplestr_auto_attr;

【成员】

成员名称

描述

de_purple_cr_strength[OT_ISP_LCAC_EXP_RATIO_NUM]

自动模式下,R通道的校正强度。该组的16个值分别对应16个不同的曝光比,一般情况下,曝光比越大,配置的去紫边的强度值越大,对应关系如表6-4所示。若连续两档的处理强度不相等,则通过线性插值的方法确定两档中间某个曝光比值对应的处理强度。

取值范围:[0, 8]

de_purple_cb_strength[OT_ISP_LCAC_EXP_RATIO_NUM]

自动模式下,B通道的校正强度。

取值范围:[0, 8]

表 1 de_purple_cr_strength[16]在不同曝光比情况下对应的设置值

de_purple_cr_strength

曝光比

de_purple_cr_strength [0]

64

de_purple_cr_strength [1]

128

de_purple_cr_strength [2]

256

de_purple_cr_strength [3]

512

de_purple_cr_strength [4]

1024

de_purple_cr_strength [5]

1536

de_purple_cr_strength [6]

2048

de_purple_cr_strength [7]

3072

de_purple_cr_strength [8]

4096

de_purple_cr_strength [9]

5120

de_purple_cr_strength [10]

6144

de_purple_cr_strength [11]

8192

de_purple_cr_strength [12]

10240

de_purple_cr_strength [13]

12288

de_purple_cr_strength [14]

14336

de_purple_cr_strength [15]

16384

【注意事项】

  • 曝光比是WDR模式下才有的概念,线性模式下获取的曝光比值总为1,因此在线性模式下虽然有联动,生效的总是第一组配置值。

  • 在built-in WDR模式下,本参数并不和曝光比联动,为与线性模式区分,生效的总是最后一组即曝光比为16384的配置值。

  • 在WDR自动长帧模式和WDR长帧模式下,曝光比生效的总是第一组配置,不会发生变化。

【相关数据类型及接口】

ot_isp_local_cac_attr

ot_isp_local_cac_attr

【说明】

紫边检测校正属性。

【定义】

typedef struct {
    td_bool en;
    td_u16  purple_detect_range;
    td_u16  var_threshold;
    td_u16  r_detect_threshold[OT_ISP_LCAC_DET_NUM];
    td_u16  g_detect_threshold[OT_ISP_LCAC_DET_NUM];
    td_u16  b_detect_threshold[OT_ISP_LCAC_DET_NUM];
    td_u16  l_detect_threshold[OT_ISP_LCAC_DET_NUM];
    td_s16  cb_cr_ratio[OT_ISP_LCAC_DET_NUM];
    ot_op_mode     op_type;
    ot_isp_depurplestr_manual_attr manual_attr;
    ot_isp_depurplestr_auto_attr   auto_attr;
} ot_isp_local_cac_attr;

【成员】

成员名称

描述

en

紫边校正使能。

取值范围:[0,1]

0:禁止;

1:使能。

purple_detect_range

紫色检测的范围,该值控制的是r_detect_threshold,g_detect_threshold,b_detect_threshold,I_detect_threshold,cb_cr_ratio这几个参数的生效情况。

值越大,越多非高亮区域的紫色被界定为紫边区域。purple_detect_range可能会引入紫边去除不平滑的问题,可以检查r_detect_threshold,g_detect_threshold,b_detect_threshold,I_detect_threshold,cb_cr_ratio这几个参数的配置。

取值范围:[0,410]

var_threshold

边缘检测阈值

取值范围:[0, 4095]

r_detect_threshold[OT_ISP_LCAC_DET_NUM]

它分了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_LCAC_DET_NUM]

它分了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_LCAC_DET_NUM]

它分了3段,每一段的值表示高亮检测模块里面B分量阈值。实际中生效的值取决于purple_detect_range这个参数的大小。purple_detect_range越小,越倾向于b_detect_threshold第一段的值,purple_detect_range越大,越倾向于b_detect_threshold第3段的值。

取值范围:[0, 4095]

l_detect_threshold[OT_ISP_LCAC_DET_NUM]

它分了3段,每一段的值表示高亮检测模块里面Luma分量阈值。实际中生效的值取决于purple_detect_range这个参数的大小。purple_detect_range越小,越倾向于l_detect_threshold第一段的值,purple_detect_range越大,越倾向于l_detect_threshold第3段的值。

取值范围:[0, 4095]

cb_cr_ratio[OT_ISP_LCAC_DET_NUM]

表示紫色检测范围,值越小,检测越多偏蓝色区域。它分了3段,每一段的值表示紫色检测模块蓝色程度。实际中生效的值取决于purple_detect_range这个参数的大小。purple_detect_range越小,越倾向于cb_cr_ratio第一段的值,purple_detect_range越大,越倾向于cb_cr_ratio第3段的值。

取值范围:[-2048, 2047]

op_type

紫边校正工作模式。

取值范围:[0,1]

0:自动,

1:手动。

manual_attr

手动模式下配置紫边校正强度参数。

auto_attr

自动模式下配置紫边校正强度参数。

【注意事项】

  • 由于算法设计,LocalCAC矫正强度会受到Demosaic结果影响。因此将LocalCAC强度设为最小时依然会保留一定去紫边能力,对高光处紫边表现有一定影响。如果想完全关闭LocalCAC效果需直接将en置为FALSE。

  • 在紫边很宽的时候,若cb_cr_ratio的值未达到完全检测出紫边,会导致部分紫边去除,部分紫边残留而形成锯齿。

  • 有一些紫边比较严重的场景,R或者B容易出现饱和的情况,这时,b_detect_threshold或者r_detect_threshold在最大值附近有去除紫边不平滑的现象。需要跟de_purple_cr_strength和de_purple_cb_strength联合调整。

【相关数据类型及接口】

ot_isp_acac_attr

【说明】

定义色差校正属性。

【定义】

typedef struct {
    td_bool  en;
    td_u8   detect_mode;
    ot_op_mode      op_type;
    ot_isp_acac_auto_attr    auto_attr;
    ot_isp_acac_manual_attr  manual_attr;
} ot_isp_acac_attr;

【成员】

成员名称

描述

en

色差校正使能。

取值范围:[0,1],

0:禁止;

1:使能。

detect_mode

边缘检测的模式,它有2种模式。

0:普通模式。

1:宽紫边模式。

取值范围:[0, 1]

默认为0.不建议调试。

op_type

ACAC的工作模式,取值范围:[0, 1]

OT_OP_MODE_AUTO:自动;

OT_OP_MODE_MANUAL:手动。

默认值为OT_OP_MODE_AUTO。

auto_attr

ACAC的自动属性。

manual_attr

ACAC的手动属性。

【注意事项】

detect_mode建议调试为0模式,1模式下针对紫边做了扩充,黄边,绿边等颜色边可能变差。

【相关数据类型及接口】

ot_isp_acac_manual_attr

【说明】

定义色差校正手动属性。

【定义】

typedef struct {
    td_u16  edge_threshold[OT_ISP_ACAC_THR_NUM];  
    td_u16  edge_gain;            
    td_s16  purple_upper_limit;   
    td_s16  purple_lower_limit;   
    td_u16  purple_sat_threshold;  
    td_u16  purple_alpha;      
    td_u16  edge_alpha;        
    td_u16  fcc_y_strength;    
    td_u16  fcc_rb_strength;   
} ot_isp_acac_manual_attr;

【成员】

成员名称

描述

edge_threshold[OT_ISP_ACAC_THR_NUM]

ACAC的边缘检测阈值,两个阈值分别代表高低阈值,小于edge_thd[0]的为平坦区域,大于edge_thd[1]的是强边缘。

取值范围:[0,4095]

edge_gain

ACAC的边缘检测强度,该值越大,检测的边缘越多。

取值范围:[0,1023]

purple_upper_limit

ACAC的紫色检测范围上限。purple_upper_limit必须大于purple_lower_limit,否则SDK会报错。

取值范围:[-511, 511]

purple_lower_limit

ACAC的紫色检测范围下限。

取值范围:[-511, 511]

purple_sat_threshold

ACAC的紫色检测饱和度阈值。大于该阈值的方为紫色的区域。

取值范围:[0, 2047]

purple_alpha

ACAC参考紫色的权重。该值越大,表示ACAC参考紫色进行校正色差的越多。

取值范围:[0, 63]

edge_alpha

ACAC参考边缘的权重。该值越大,表示ACAC参考边缘进行校正色差的越多。

取值范围:[0, 63]

fcc_y_strength

ACAC根据亮度进行校正的强度,该值越大,表示ACAC校正越强。

取值范围:[0, 4095]

fcc_rb_strength

ACAC根据R,B通道强弱进行校正的强度,该值越大,表示ACAC校正越强。

取值范围:[0, 511]

【注意事项】

  • edge_threshold调小,容易出现边缘信息过多,导致带颜色的边缘出现颜色腐蚀而丢失,不建议这个参数调试太小。

  • fcc_y_strength,fcc_rb_strength开很强的时候,如果edge_alpha也很强,容易出现颜色边缘颜色被拉灰。

  • 当fcc_y_strength调节不足时可能出现紫边分层的现象。

【相关数据类型及接口】

无。

ot_isp_acac_auto_attr

【说明】

定义色差校正自动属性。

【定义】

typedef struct {
    td_u16  edge_threshold[OT_ISP_ACAC_THR_NUM][OT_ISP_AUTO_ISO_NUM];
    td_u16  edge_gain[OT_ISP_AUTO_ISO_NUM];
    td_s16  purple_upper_limit[OT_ISP_AUTO_ISO_NUM];
    td_s16  purple_lower_limit[OT_ISP_AUTO_ISO_NUM];
    td_u16  purple_sat_threshold[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  fcc_y_strength[OT_ISP_AUTO_ISO_NUM];
    td_u16  fcc_rb_strength[OT_ISP_AUTO_ISO_NUM];
} ot_isp_acac_auto_attr;

【成员】

成员名称

描述

edge_threshold[OT_ISP_ACAC_THR_NUM] [OT_ISP_AUTO_ISO_NUM]

ACAC的边缘检测阈值,两个阈值分别代表高低阈值,小于edge_thd[0]的为平坦区域,大于edge_thd[1]的是强边缘。

取值范围:[0,4095]

edge_gain[OT_ISP_AUTO_ISO_NUM]

ACAC的边缘检测强度,该值越大,检测的边缘越多。

取值范围:[0,1023]

purple_upper_limit[OT_ISP_AUTO_ISO_NUM]

ACAC的紫色检测范围上限。

取值范围:[-511, 511]

purple_lower_limit[OT_ISP_AUTO_ISO_NUM]

ACAC的紫色检测范围下限。

取值范围:[-511, 511]

purple_sat_threshold[OT_ISP_AUTO_ISO_NUM]

ACAC的紫色检测饱和度阈值。大于该阈值的方为紫色的区域。

取值范围:[0, 2047]

purple_alpha[OT_ISP_AUTO_ISO_NUM]

ACAC参考紫色的权重。该值越大,表示ACAC参考紫色进行校正色差的越多。

取值范围:[0, 63]

edge_alpha[OT_ISP_AUTO_ISO_NUM]

ACAC参考边缘的权重。该值越大,表示ACAC参考边缘进行校正色差的越多。

取值范围:[0, 63]

fcc_y_strength[OT_ISP_AUTO_ISO_NUM]

ACAC根据亮度进行校正的强度,该值越大,表示ACAC校正越强。取值范围:[0, 4095]

fcc_rb_strength[OT_ISP_AUTO_ISO_NUM]

ACAC根据R,B通道强弱进行校正的强度,该值越大,表示ACAC校正越强。

取值范围:[0, 511]

【注意事项】

【相关数据类型及接口】

无。

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:设置动态范围压缩参数。

  • ss_mpi_isp_get_fswdr_attr:获取动态范围压缩参数。

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_fswdr_attr

数据类型

  • OT_ISP_WDR_RATIO_NUM:定义用于gain插值的WDR曝光比档位数。

  • ot_isp_wdr_merge_mode:定义ISP 合成方式属性。

  • ot_isp_fswdr_mdt_attr:定义ISP FSWDR运动检测的属性。

  • ot_isp_wdr_combine_attr:定义ISP FSWDR combime属性。

  • ot_isp_fusion_attr:定义ISP FUSION属性。

  • ot_isp_wdr_wb_gain_pos: 定义白平衡增益在ISP的位置属性

  • ot_isp_fswdr_manual_attr:定义ISP FSWDR手动属性。

  • ot_isp_fswdr_auto_attr:定义ISP FSWDR自动属性。

  • ot_isp_wdr_fs_attr:定义ISP FSWDR属性。

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时,WDR融合强制选长帧。

取值范围:[0, 0x1]

0:WDR融合时不检查短帧数据大小;

1:WDR融合时检查短帧数据大小。

short_check_threshold

短帧检查阈值。当短帧亮度小于该阈值时,WDR强制输出长帧。

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

md_ref_flicker

控制运动判断是否参考Flicker检测结果。

取值范围:[0,0x1]

0:做运动判断时不参考Flicker检测结果;

1:做运动判断时参考Flicker检测结果。

mdt_still_threshold

运动检测中判断为静止的阈值,当运动程度小于该阈值时,判断该像素点为静止

取值范围:[0,0xFE]

mdt_full_threshold

运动检测中判断为全运动的阈值,当运动程度大于该阈值时,判断该像素点为全运动。仅支持3合1WDR。

取值范围:[0,0xFE]

mdt_long_blend

运动区域叠加长帧的权重,当该值为0xFE时,运动区域全部选择长帧。

取值范围:[0x0,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_bool forcelong_coarse;
    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;
    td_u16  forcelong_coarse_low_threshold; 
    td_u16  forcelong_coarse_high_threshold;
} ot_isp_wdr_combine_attr;

【成员】

成员名称

描述

motion_comp

WDR运动补偿使能。

取值范围:[0, 0x1]

0:关闭;

1:使能。

在某些室内日光灯场景下,运动补偿会加重频闪带来的横条纹现象,此时可以关闭运动补偿。

forcelong_coarse

强制输出长帧粗调使能。

取值范围:[0, 0x1]

0:关闭;

1:使能。

short_threshold

短曝光门限值,超过门限值的图像数据只选择短曝光数据。

取值范围:[0,0xFFF]

long_threshold

长曝光门限值,低于门限值的图像数据只选择长曝光数据。

取值范围:[0, short_threshold]

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。

forcelong_coarse_low_threshold

强制输出长帧粗调的低阈值,亮度低于该阈值的运动区域强制输出长帧。

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

forcelong_coarse_high_threshold

强制输出长帧粗调的高阈值,亮度大于该阈值的运动区域不强制输出长帧。

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

【注意事项】

注意force_long_low_threshold应小于force_long_hig_threshold。

【相关数据类型及接口】

ot_isp_wdr_fs_attr

ot_isp_fusion_attr

【说明】

定义ISP FUSION属性。

【定义】

typedef struct {
    td_u16  fusion_threshold[OT_ISP_WDR_MAX_FRAME_NUM];
} ot_isp_fusion_attr;

【成员】

成员名称

描述

fusion_threshold[OT_ISP_WDR_MAX_FRAME_NUM]

对应Fusion模式下超短帧,短帧,中帧,长帧的阈值,将输入数据限制在阈值以下。

取值范围:[0,0x3FFF]

【注意事项】

无。

【相关数据类型及接口】

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

无效值。

【注意事项】

SS928V100仅支持白平衡增益配置在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, md_thr_hig_gain]

md_thr_hig_gain

手动模式下判断是否运动的高阈值系数。值越大,运动程度越小。取值范围:[0, 0xFF]。

【相关数据类型及接口】

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]

【相关数据类型及接口】

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接口修改静态白平衡系数,会导致量产标定失效。

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:设置色调的参数。

  • ss_mpi_isp_get_color_tone_attr:获取色调的参数。

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、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a、libot_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、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a、libot_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属性参数。

  • ss_mpi_isp_get_ldci_attr:获取LDCI属性参数。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_ldci_attr

数据类型

  • ot_isp_ldci_gauss_coef_attr:定义GAUSS曲线属性参数。

  • ot_isp_ldci_he_wgt_attr:定义直方图均衡权重属性参数。

  • ot_isp_ldci_manual_attr:定义LDCI手动模式属性参数。

  • ot_isp_ldci_auto_attr:定义LDCI自动模式属性参数。

  • ot_isp_ldci_attr:定义LDCI属性参数。

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[OT_ISP_AUTO_ISO_NUM];
    td_u16                blc_ctrl[OT_ISP_AUTO_ISO_NUM];
} 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                 en;
    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;

【成员】

成员名称

描述

en

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

功能描述

SS928V100是在YUV域对图像进行radial crop操作,将设定半径之外的地方直接拉黑掉。

API参考

  • ss_mpi_isp_set_rc_attr:设定Radial Crop属性。

  • ss_mpi_isp_get_rc_attr:获取Radial Crop属性。

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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_rc_attr

数据类型

ot_isp_rc_attr:定义ISP Radial Crop属性。

ot_isp_rc_attr

【说明】

定义ISP Radial Crop 属性。

【定义】

typedef struct {
    td_bool en;
    ot_point center_coord;
    td_u32 radius;
} ot_isp_rc_attr;

【成员】

成员名称

描述

en

使能Radial Crop 功能。

取值范围:[0,1]

0:禁止;

1:使能。默认值0。

center_coord

中心点的坐标配置信息。

x取值范围:[0, width - 1]

y取值范围:[0, height - 1]

x默认为:width/2

y默认为:height/2

radius

拉黑的半径,到中心点的距离大于半径的区域直接拉黑。

取值范围:[0, ]

默认值

【注意事项】

中心点的坐标以及半径的配置值可以直接采用fisheye算法的标定结果,分辨率切换之后,对应的中心点坐标与半径也要随之更新,以避免图像的不正常。

【相关数据类型及接口】

CSC

功能描述

色彩空间转换模块(Color Space Conversion),用来将RGB信号转换成符合标准的YUV信号。

API参考

  • ss_mpi_isp_set_csc_attr:设定CSC(色彩空间转换)模块属性。

  • ss_mpi_isp_get_csc_attr:获取CSC(色彩空间转换)模块属性。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_csc_attr

数据类型

  • OT_ISP_CSC_DC_NUM:YUV偏移量的个数。

  • OT_ISP_CSC_COEF_NUM:YUV转换系数的个数。

  • ot_isp_csc_attr:定义ISP 色彩空间转换模块属性。

  • ot_isp_csc_matrx:定义色彩空间转换矩阵系数。

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 en;                 /* 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;

【成员】

成员名称

描述

en

使能CSC 功能。

取值范围:[0,1]

0:禁止;

1:使能。

默认值1。

color_gamut

色彩空间类型枚举。

取值范围:[0, 3]

默认值OT_COLOR_GAMUT_BT709。

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

色彩空间转换矩阵系数。

【注意事项】

  • color_gamut中可选择OT_COLOR_GAMUT_BT601,OT_COLOR_GAMUT_BT709,OT_COLOR_GAMUT_BT2020,OT_COLOR_GAMUT_USER四种模式。SS928V100不支持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_vpss_nrx_v2中的limit_range_en参数,在VPSS输出端得到Limited range的YUV数据。ot_vpss_nrx_v2的定义见《SS928V100/SS927100 3DNR参数配置说明》。

  • 当系统接入YUV数据,需要通过CSC进行YUV和RGB数据之间的转换时,可以按照需要将CSC的limited_range_en配置为Full range或Limited range,或者配置ot_isp_csc_matrx参数。

【相关数据类型及接口】

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各一张表。

SS928V100:大小分别为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属性。

  • ss_mpi_isp_get_clut_attr:获取CLUT属性。

  • ss_mpi_isp_set_clut_coeff:设置CLUT系数。

  • ss_mpi_isp_get_clut_coeff:获取CLUT系数。

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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

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_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_clut_coeff

数据类型

  • OT_ISP_CLUT_LUT_LENGTH:CLUT表的存储长度。

  • ot_isp_clut_attr:CLUT的增益。

  • ot_isp_clut_lut:CLUT的查找表。

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 en; /* 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;

【成员】

成员名称

描述

en

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

gain_r

R通道增益,取值范围:[0,4095]

gain_g

G通道增益,取值范围:[0,4095]

gain_b

B通道增益,取值范围:[0,4095]

【注意事项】

增益设定为512时,相当于增益是1.0。增益和LUT查表得出的调整量相乘,得到实际调整量。实际调整量和输入RGB值相加得到输出RGB值。SS928V100建议默认增益为512。

【相关数据类型及接口】

ot_isp_clut_lut

【说明】

定义CLUT的查找表。

【定义】

typedef struct {
    td_u32 lut[OT_ISP_CLUT_LUT_LENGTH];  /* RW; Range: SS928V100 = [0, 1073741823] */
} ot_isp_clut_lut;

【成员】

成员名称

描述

lut

查找表

取值范围:[0, 1073741823]

【注意事项】

由于采用了压缩存储的格式,这个表的内容会由PQTools生成。一般用户在PQTools界面调试后可以生成这个格式的LUT,不需要关心数据格式。

对于SS928V100的用户:

如果用户不使用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的一维数组。

【相关数据类型及接口】

PreGamma

功能描述

PreGamma是类似Gamma对图像进行亮度空间非线性转换模块,在DRC之前对动态范围进行适当压缩。 PreGamma插值点数为257,精度为20bit,节点之间的图像像素值使用线性插值生成。

API参考

  • ss_mpi_isp_set_pregamma_attr:设置PreGamma属性参数。

  • ss_mpi_isp_get_pregamma_attr:获取PreGamma属性参数。

ss_mpi_isp_set_pregamma_attr

【描述】

设置PreGamma属性参数。

【语法】

td_s32 ss_mpi_isp_set_pregamma_attr(ot_vi_pipe vi_pipe, const ot_isp_pregamma_attr *pregamma_attr)

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

pregamma_attr

PreGamma属性参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_get_pregamma_attr

ss_mpi_isp_get_pregamma_attr

【描述】

获取PreGamma属性参数。

【语法】

td_s32 ss_mpi_isp_get_pregamma_attr(ot_vi_pipe vi_pipe, ot_isp_pregamma_attr *pregamma_attr)

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

pregamma_attr

PreGamma属性参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_pregamma_attr

数据类型

  • OT_ISP_PREGAMMA_NODE_NUM:定义PreGamma LUT的节点个数。

  • ot_isp_pregamma_attr:定义PreGamma属性参数。

OT_ISP_PREGAMMA_NODE_NUM

【说明】

定义PreGamma LUT的节点个数。

【定义】

#define OT_ISP_PREGAMMA_NODE_NUM        257

【注意事项】

无。

【相关数据类型及接口】

ot_isp_pregamma_attr

ot_isp_pregamma_attr

【说明】

定义PreGamma属性参数。

【定义】

typedef struct {
    td_bool enable;
    td_u32  table[OT_ISP_PREGAMMA_NODE_NUM];
} ot_isp_pregamma_attr;

【成员】

成员名称

描述

enable

PreGamma使能,取值范围:[0x0, 0x1]

table[OT_ISP_PREGAMMA_NODE_NUM]

257段LUT表,用来表示PreGamma输出值大小。取值范围:[0x0, 0xFFFFF]

【注意事项】

  • PreGamma模块和DRC模块存在耦合,其只在DRC使能时才生效。

  • PreGamma在当前平台上改为非均匀分布LUT,以提升暗区的调试精度,因此上一代平台的参数无法直接复用。建议基于此前参数所对应的曲线形状,在当前平台上重新调试出类似曲线,以实现效果的同步。

【相关数据类型及接口】

ot_isp_drc_attr

获取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_isp.a、libss_isp.a

【注意】

当前ISP模块虚拟地址不提供AF模块的虚拟地址。

【举例】

【相关主题】

数据类型

ot_isp_reg_attr:定义ISP各子模块寄存器的虚拟地址属性。

ot_isp_reg_attr

【说明】

定义ISP各子模块寄存器的虚拟地址属性。

【定义】

typedef struct {
    ot_void *isp_ext_reg_addr;
    td_u32  isp_ext_reg_size;
    ot_void *ae_ext_reg_addr;
    td_u32  ae_ext_reg_size;
    ot_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库对应的大小。

【注意事项】

【相关数据类型及接口】

查询内部状态信息

功能描述

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_isp.a、libss_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的宽度和幅度。

nr_lsc_ratio

NR 参考LSC增益比例。

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

coarse_strength[OT_ISP_BAYER_CHN_NUM]

线性模式下控制亮度噪声整体去噪强度,四通道强度独立可调,值越大,亮噪去噪强度越大。

取值范围:[0, 0x360]

wdr_frame_strength[OT_ISP_WDR_MAX_FRAME_NUM]

WDR模式下每一融合帧分别对应的全局亮度去噪强度。

取值范围:[0, 0x50]

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]

实际生效的黑电平的值,分别表示不同WDR通道R、Gr、Gb、B分量的黑电平。

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

sns_black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM]

Sensor的黑电平值,分别表示不同WDR通道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的值是一致的。

【相关数据类型及接口】

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静态信息。

  • ss_mpi_isp_set_dng_color_param:设置DNG颜色信息。

  • ss_mpi_isp_get_dng_color_param:获取DNG颜色信息。

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_isp.a、libss_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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

数据类型

  • OT_CFACOLORPLANE:滤色阵列的数目。

  • ot_isp_dng_image_static_info:定义DNG静态格式信息。

  • ot_isp_dng_color_param:定义DNG白平衡校正系数。

  • ot_isp_dng_cfa_layout_type:定义滤色阵列类型。

  • ot_isp_dng_srational:定义DNG除法结构体。

  • ot_isp_dng_black_level_repeat_dim:定义黑电平像素重复维度。

  • ot_isp_dng_default_scale:定义将图像转换成方形像素默认的缩放系数。

  • ot_isp_dng_repeat_pattern_dim:定义DNG颜色分量重复次数。

  • ot_isp_dng_raw_format:定义DNG RAW格式。

  • ot_isp_dng_wb_gain:定义在不同光源下的白平衡增益校正值。

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 forwad_matrix1[OT_ISP_CCM_MATRIX_SIZE];
    ot_isp_dng_srational forwad_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

在第二组校正光源下,参考相机颜色空间到个体相机颜色空间转换矩阵。

forwad_matrix1

在第一组校正光源下,相机颜色到XYZ D50颜色的转换矩阵。

forwad_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_color_param;

【成员】

成员名称

描述

wb_gain1

在低色温光源下校正的白平衡系数。

wb_gain2

在高色温光源下校正的白平衡系数。

【注意事项】

【相关数据类型及接口】

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通道增益。

g_gain

G通道增益。

b_gain

B通道增益。

【注意事项】

【相关数据类型及接口】

MeshShading量产标定工具

功能描述

本模块用于在SS928V100上实现对单一光源的在线Mesh LSC标定功能。具体调用实例可参考开发包中的lsc_online_cali用例。本模块可针对单一光源生成符合SS928V100中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, 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_isp.a、libss_isp.a

【注意】

请参考sample(mpp/sample/lsc_online_cali)当中的在线标定(lsc_online_cali)对该接口的使用方法。如果用户需要自行调用,请注意src_raw是一个指向图像Raw数据的指针,接口内部无法对传入数据的长度进行检验,必须在外部分配正确,否则会出现内存越界错误。分配的空间长度与mlsc_cali_cfg结构体中定义的长和宽相关,请按照下面的示例来分配Raw的内存空间:

src_raw = (td_u16 *)malloc(mlsc_cali_cfg->img_height * mlsc_cali_cfg->img_width * sizeof(td_u16))

【举例】

【相关主题】

数据类型

  • ot_isp_mlsc_calibration_cfg:定义MLSC在线标定CFG参数信息。

  • ot_isp_mesh_shading_table:定义MLSC标定结果格式。

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, 65535]

img_width

输入图像宽度,要求4对齐。

取值范围:[0, 65535]

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_bnr_lsc_gain_lut   bnr_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]

bnr_lsc_gain_lut

存储各颜色分量上的Gain Table,是Radial Shading表,给BNR的LSC提供参考。

取值范围:[0, 65535]

【注意事项】

【相关数据类型及接口】

RGB-IR

功能描述

须知: 目前市售大部分用于_录像机_产品形态的RGB-IR 4x4 pattern芯片波长在近红外区间(NIR,波长为850nm)。如果需要使用RGB-IR sensor需要同时配合对应波长的双通滤光片使用。

RGBIR分为RGBIR4X4模式及RGBIR Normal模式。RGBIR4X4模式支持输入RGB-IR4x4单通道信号,输出正常Bayer格式raw信号及IR raw信号供其他应用;RGBIR Normal模式支持输入Bayer raw及IR raw双通道信号,输出Bayer格式信号。非RGB-IR4x4信号可通过软件(如DSP)拆分为Bayer raw及IR raw,并使用RGBIR Normal模式实现减IR串扰处理。(RGB-IR 2x2 pattern和RGB-IR 4x4 pattern的区别请参考图1图2)。

图 1 传统RGB-IR 2x2 pattern排列

图 2 RGB-IR 4x4 pattern排列

API参考

  • ss_mpi_isp_set_rgbir_attr:设定RGBIR属性。

  • ss_mpi_isp_get_rgbir_attr:获取RGBIR属性。

ss_mpi_isp_set_rgbir_attr

【描述】

设定RGBIR属性。

【语法】

td_s32 ss_mpi_isp_set_rgbir_attr(ot_vi_pipe vi_pipe, const ot_isp_rgbir_attr *rgbir_attr)

【参数】

参数名称

描述

输入/输出

vi_pipe

Pipe号。

输入

rgbir_attr

RGBIR属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_get_rgbir_attr

ss_mpi_isp_get_rgbir_attr

【描述】

获取RGBIR属性。

【语法】

td_s32 ss_mpi_isp_get_rgbir_attr(ot_vi_pipe vi_pipe, ot_isp_rgbir_attr *rgbir_attr)

【参数】

参数名称

描述

输入/输出

vi_pipe

Pipe号。

输入

rgbir_attr

RGBIR属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

不支持设置ot_isp_rgbir_attr参数ot_isp_rgbir_cfg字段中ot_isp_rgbir_mode字段为OT_ISP_RGBIR_MODE_NORMAL模式,如设置为该模式接口返回OT_ERR_ISP_NOT_SUPPORT错误码。

【举例】

无。

【相关主题】

ss_mpi_isp_set_rgbir_attr

数据类型

  • OT_ISP_RGBIR_CTRL_NUM:定义RGBIR控制通道数,针对R/B共2通道。

  • OT_ISP_RGBIR_CROSSTALK_NUM:定义RGBIR串扰通道数,针对R/G/B共3通道。

  • OT_ISP_RGBIR_CVTMAT_NUM:定义RGBIR转换矩阵数量。

  • ot_isp_rgbir_cfg:定义RGBIR模块功能类参数。

  • ot_isp_rgbir_attr:定义RGBIR模块参数接口。

  • ot_isp_ir_bayer_format:定义RGBIR输入Pattern类型。

  • ot_isp_ir_cvtmat_mode:定义IR转换矩阵模式。

  • ot_isp_rgbir_mode:定义RGBIR处理模式。

OT_ISP_RGBIR_CTRL_NUM

【说明】

定义RGBIR控制通道数。

【定义】

#define OT_ISP_RGBIR_CTRL_NUM 2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_rgbir_attr

OT_ISP_RGBIR_CROSSTALK_NUM

【说明】

定义RGBIR串扰通道数,针对R/G/B共3通道。

【定义】

#define OT_ISP_RGBIR_CROSSTALK_NUM 3

【注意事项】

无。

【相关数据类型及接口】

ot_isp_rgbir_attr

OT_ISP_RGBIR_CVTMAT_NUM

【说明】

定义RGBIR转换矩阵数量。

【定义】

#define OT_ISP_RGBIR_CVTMAT_NUM 12

【注意事项】

无。

【相关数据类型及接口】

ot_isp_rgbir_attr

ot_isp_rgbir_cfg

【说明】

定义RGBIR模块功能类参数。

【定义】

typedef struct {
    ot_isp_rgbir_mode mode;
    ot_isp_bayer_format    out_pattern;
    ot_isp_ir_bayer_format  in_rgbir_pattern;
    ot_isp_bayer_format    in_bayer_pattern;
    td_bool  is_ir_upscale;
} ot_isp_rgbir_cfg;

【成员】

成员名称

描述

mode

RGBIR模式选择,0:RGBIR4X4模式,1:Normal模式。

取值范围:[0, 1]

out_pattern

RGBIR模块输出格式选择,与普通Bayer Pattern一致。

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

in_rgbir_pattern

RGBIR4X4模式下,输入RGBIR Pattern格式选择。

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

in_bayer_pattern

Normal模式下,输入Bayer Pattern格式选择。

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

is_ir_upscale

Normal模式下,输入IR通路是否需要上采样配置。

取值范围:[0, 1]

【注意事项】

  • in_rgbir_pattern仅在RGBIR4x4模式下有效;

  • in_bayer_pattern及is_ir_upscale仅在RGBIR Normal模式下有效。

【相关数据类型及接口】

ot_isp_rgbir_attr

【说明】

定义RGBIR模块参数接口。

【定义】

typedef struct
{
    td_bool rgbir_en;
    ot_isp_rgbir_cfg rgbir_cfg;
    td_u32  ir_sum_info;
    td_bool auto_gain_en;
    td_u16  auto_gain;
    td_bool smooth_en;
    td_u16  exp_ctrl[OT_ISP_RGBIR_CTRL_NUM];
    td_u16  exp_gain[OT_ISP_RGBIR_CTRL_NUM];
    td_bool ir_rm_en;
    td_u16  ir_rm_ratio[OT_ISP_RGBIR_CROSSTALK_NUM];
    ot_isp_ir_cvtmat_mode ir_cvtmat_mode;
    td_s16  cvt_matrix[OT_ISP_RGBIR_CVTMAT_NUM];
    td_u16  wb_ctrl_strength[OT_ISP_RGBIR_CTRL_NUM];
} ot_isp_rgbir_attr;

【成员】

成员名称

描述

rgbir_en

RGBIR模块使能。

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

rgbir_cfg

定义RGBIR模块功能类参数。

ir_sum_info

Ir sum统计信息。

取值范围:[0, 0xffffffff]

auto_gain_en

Auto gain使能。

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

auto_gain

Auto gain值配置,当auto_gain_en不使能时起作用。

取值范围:[0, 1023]

smooth_en

平滑使能。

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

exp_ctrl

过曝处理控制参数,调节曝光亮度区间。

取值范围:[0, 2047]

exp_gain

过曝处理模块相关,在通过exp_ctrl确定了区间后,使用本参数进行过曝处理。

取值范围:[0, 511]

ir_rm_en

IR remove使能,可实现减IR串扰或IR渗透。

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

ir_rm_ratio

IR串扰率配置,当ir_rm_en为true时起作用,可分别配置R/G/B三通道IR串扰率。精度为0.1%。

取值范围:[0, 1000]

cvtmat_mode

RGBIR转换矩阵功能选择,分Normal模式、Mono模式和User模式。

取值范围:[0, 2]

cvt_matrix

RGBIR转换矩阵参数配置。Normal模式和Mono模式下使用系统默认参数进行配置,User模式下可配置。

取值范围:[-16384, 16383]

wb_ctrl_strength

白平衡控制强度参数,可分别调节R/B通道。

取值范围:[0,1024]

【注意事项】

【相关数据类型及接口】

ot_isp_ir_bayer_format

【说明】

定义IR pattern输入Pattern类型。

【定义】

typedef enum {
    OT_ISP_IRBAYER_GRGBI = 0,
    OT_ISP_IRBAYER_RGBGI = 1,
    OT_ISP_IRBAYER_GBGRI = 2,
    OT_ISP_IRBAYER_BGRGI = 3,
    OT_ISP_IRBAYER_IGRGB = 4,
    OT_ISP_IRBAYER_IRGBG = 5,
    OT_ISP_IRBAYER_IBGRG = 6,
    OT_ISP_IRBAYER_IGBGR = 7,
    OT_ISP_IRBAYER_BUTT
} ot_isp_ir_bayer_format;

【成员】

成员名称

描述

OT_ISP_IRBAYER_GRGBI

输入4x4 RGBIR pattern,排列顺序如下所示:

G R G B

I G I G

G B G R

I G I G

OT_ISP_IRBAYER_RGBGI

输入4x4 RGBIR pattern,排列顺序如下所示:

R G B G

G I G I

B G R G

G I G I

OT_ISP_IRBAYER_GBGRI

输入4x4 RGBIR pattern,排列顺序如下所示:

G B G R

I G I G

G R G B

I G I G

OT_ISP_IRBAYER_BGRGI

输入4x4 RGBIR pattern,排列顺序如下所示:

B G R G

G I G I

R G B G

G I G I

OT_ISP_IRBAYER_IGRGB

输入4x4 RGBIR pattern,排列顺序如下所示:

I G I G

G R G B

I G I G

G B G R

OT_ISP_IRBAYER_IRGBG

输入4x4 RGBIR pattern,排列顺序如下所示:

G I G I

R G B G

G I G I

B G R G

OT_ISP_IRBAYER_IBGRG

输入4x4 RGBIR pattern,排列顺序如下所示:

G I G I

B G R G

G I G I

R G B G

OT_ISP_IRBAYER_IGBGR

输入4x4 RGBIR pattern,排列顺序如下所示:

I G I G

G B G R

I G I G

G R G B

【注意事项】

无。

【相关数据类型及接口】

ot_isp_ir_cvtmat_mode

【说明】

定义RGBIR转换矩阵模式。

【定义】

typedef enum {
    OT_ISP_IR_CVTMAT_MODE_NORMAL = 0,
    OT_ISP_IR_CVTMAT_MODE_MONO,
    OT_ISP_IR_CVTMAT_MODE_USER,
    OT_ISP_IR_CVTMAT_MODE_BUTT
} ot_isp_ir_cvtmat_mode;

【成员】

成员名称

描述

OT_ISP_IR_CVTMAT_MODE_NORMAL

枚举定义,RGBIR模式选择,彩色模式,正常使用默认CVTMAT进行IR去除功能。

OT_ISP_IR_CVTMAT_MODE_MONO

枚举定义,RGBIR模式选择,夜晚红外模式下黑白图像。

OT_ISP_IR_CVTMAT_MODE_USER

枚举定义,RGBIR模式选择,用户自定义模式,转换矩阵可自选。

【注意事项】

【相关数据类型及接口】

ot_isp_rgbir_attr

ot_isp_rgbir_mode

【说明】

定义RGBIR处理模式。

【定义】

typedef enum {
    OT_ISP_RGBIR_MODE_RGBIR4X4 = 0,
    OT_ISP_RGBIR_MODE_NORMAL,
    OT_ISP_RGBIR_MODE_BUTT
} ot_isp_rgbir_mode;

【成员】

成员名称

描述

OT_ISP_RGBIR_MODE_RGBIR4X4

枚举定义,RGBIR处理模式选择,输入为RGBIR4x4时使用的模式。

OT_ISP_RGBIR_MODE_NORMAL

枚举定义,RGBIR处理模式选择,输入为非RGBIR4x4时使用的模式。

【注意事项】

【相关数据类型及接口】

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媒体处理软件V5.0开发参考》“系统控制”章节。

输入

array_size

输入需要计算连续帧的个数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ss_mpi_isp.h

  • 库文件:libot_calcflicker.a

【注意】

  • 必须使用连续的3帧数据进行计算,输入的array_size帧数需要等于3。同时frame[]指向的数据必须保证有效。

  • 计算的帧数据的分辨率不能超过ISP模块最大能够处理的图像分辨率。

  • 为了加快计算速度,接口内部使用VGS硬件模块参与计算,所以用于计算工频闪的图像分辨率不能超过VGS的最大处理分辨率范围。

  • 在不同频闪混合的光源下,比如光源环境同时存在50Hz和60Hz的光源,或者工频闪光源只占整个环境光源非常小的一部分,容易出现误判。

  • Sample用例中有使用ss_mpi_vpss_get_grp_frame接口(接口具体信息请参见《MPP 媒体处理软件V5.0 开发参考》的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:定义计算工频闪需要的输入参数。

  • ot_isp_calc_flicker_output:定义自动工频闪类型检测输出结果。

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 ColorShading

功能描述

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属性参数。

  • ss_mpi_isp_get_auto_color_shading_attr:获取Auto Color Shading属性参数。

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

  • 库文件:libot_acs.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

  • 库文件:libot_acs.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 en;
    td_u16 y_strength;
    td_u16 run_interval;
    td_bool lock_en;
} ot_isp_acs_attr;

【成员】

成员名称

描述

en

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

ACS模块使能。

y_strength

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

控制ACS算法Luma Shading也就是Y Shading的校正强度,默认256

run_interval

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

控制ACS算法多少帧运行一次,默认2帧运行一次。增大该值可以降低ACS算法的CPU占用率。

lock_en

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

固定ACS产生的Lut表,保持当前的LSC校正表。

【注意事项】

  • 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倍的值。

【相关数据类型及接口】

Color Rebalance

功能描述

Color Rebalance (CRB)算法是局部的红蓝增益调节,该算法在WDR模式下,能够根据场景自适应地调节,从而能够减轻或消除WDR场景下的高亮区域附近暗区偏红的问题。该算法在线性模式下不生效。

API参考

  • ss_mpi_isp_set_crb_attr:设置CRB属性参数。

  • ss_mpi_isp_get_crb_attr:获取CRB属性参数。

ss_mpi_isp_set_crb_attr

【描述】

设置CRB属性参数。

【语法】

td_s32 ss_mpi_isp_set_crb_attr (ot_vi_pipe vi_pipe, const ot_isp_crb_attr * crb_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

crb_attr

CRB属性参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_get_crb_attr

ss_mpi_isp_get_crb_attr

【描述】

获取CRB属性参数。

【语法】

td_s32 ss_mpi_isp_get_crb_attr (ot_vi_pipe vi_pipe, ot_isp_crb_attr * crb_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

VI PIPE号。

输入

crb_attr

CRB属性参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h

  • 库文件:libot_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_crb_attr

数据类型

  • ot_isp_crb_attr:定义CRB属性参数。

  • ot_isp_crb_auto_attr:定义CRB自动参数。

  • ot_isp_crb_manual_attr:定义CRB手动参数。

ot_isp_crb_attr

【说明】

定义CRB属性参数。

【定义】

typedef struct {
    td_bool                  en;
    ot_op_mode             op_type;
    ot_isp_crb_auto_attr     auto_attr;
    ot_isp_crb_manual_attr   manual_attr;
} ot_isp_crb_attr;

【成员】

成员名称

描述

en

CRB模块使能。

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

op_type

CRB参数类型(手动或自动)。

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

auto_attr

CRB自动参数。

manual_attr

CRB手动参数。

【注意事项】

【相关数据类型及接口】

ot_isp_crb_auto_attr

【说明】

定义CRB自动参数。

【定义】

typedef struct {
    td_u16 r_gain_limit[OT_ISP_WDR_RATIO_NUM]; /* RW; Range: [0x1FF, 0x7FF]; Format:1.10; R gain 1024 to gainLimit */
    td_u16 b_gain_limit[OT_ISP_WDR_RATIO_NUM]; /* RW; Range: [0x1FF, 0x7FF]; Format:1.10; B gain 1024 to gainLimit */
} ot_isp_crb_auto_attr;

【成员】

成员名称

描述

r_gain_limit

CRB自动红色通道增益。

取值范围:[0x1FF, 0x7FF]

b_gain_limit

CRB自动蓝色通道增益。

取值范围:[0x1FF, 0x7FF]

【注意事项】

【相关数据类型及接口】

ot_isp_crb_manual_attr

【说明】

定义CRB手动参数。

【定义】

typedef struct {
    td_u16 r_gain_limit; /* RW; Range: [0x1FF, 0x7FF]; Format:1.10; gain of R color channel 1024 to RgainLimit */
    td_u16 b_gain_limit; /* RW; Range: [0x1FF, 0x7FF]; Format:1.10; gain of B color channel 1024 to BgainLimit */
} ot_isp_crb_manual_attr;

【成员】

成员名称

描述

r_gain_limit

CRB手动红色通道增益。

取值范围:[0x1FF, 0x7FF]

b_gain_limit

CRB手动蓝色通道增益。

取值范围:[0x1FF, 0x7FF]

【注意事项】

【相关数据类型及接口】

Expander

功能描述

部分sensor内部会做多帧曝光的融合,融合后数据位宽会增大,导致输出成本增大。为减少输出的成本,sensor内部会做数据分段压缩,将数据压缩到一个比较小的位宽。在ISP中为了将数据还原,需要将sensor内部压缩的数据,进行解压缩。

API参考

  • ss_mpi_isp_set_expander_attr:设置expander属性参数。

  • ss_mpi_isp_get_expander_attr:获取expander属性参数。

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_isp.a、libss_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_isp.a、libss_isp.a

【注意】

【举例】

【相关主题】

ss_mpi_isp_set_expander_attr

数据类型

  • OT_ISP_EXPANDER_NODE_NUM:定义expander lut的深度。

  • OT_ISP_EXPANDER_POINT_NUM_MAX:定义expander拐点数目的最大值。

  • ot_isp_expander_attr:定义expander属性参数。

OT_ISP_EXPANDER_NODE_NUM

【说明】

定义expander lut的深度。

【定义】

#define OT_ISP_EXPANDER_NODE_NUM   257

【注意事项】

【相关数据类型及接口】

ot_isp_expander_attr

OT_ISP_EXPANDER_POINT_NUM_MAX

【说明】

定义expander拐点数目的最大值。

【定义】

#define OT_ISP_EXPANDER_POINT_NUM_MAX (OT_ISP_EXPANDER_NODE_NUM - 1)

【注意事项】

【相关数据类型及接口】

ot_isp_expander_attr

ot_isp_expander_attr

【说明】

定义expander属性参数。

【定义】

typedef struct {
    td_bool  en;
    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;

【成员】

成员名称

描述

en

expander模块的使能。

只能在sensor built-in模式下使能expander。

bit_depth_in

输入数据位宽。

取值范围:[0xC,0x14],只能配置为偶数。

bit_depth_out

输出数据位宽。

取值范围:[0xC,0x14],只能配置为偶数。

knee_point_num

拐点坐标的数目。取值范围:[1,256]

knee_point_coord[OT_ISP_EXPANDER_POINT_NUM_MAX]

解压的拐点(包括横纵坐标)。

横坐标x的取值范围:[0x0,0x100];

纵坐标y的取值范围:[0x0, 0x100000]

坐标必须是单调递增的。

【注意事项】

在sensor手册中会给出sensor在sensor built-in模式下内部压缩时使用的拐点配置,需要将这几个拐点配置按照对应的原则进行转换,然后配置到knee_point_coord中即可。

SS928V100转换原则如下:

  • 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)作为第一个拐点坐标。

高频次的动态修改expander的拐点配置,可能会导致同一幅图像使用不同的解压缩曲线

expander拐点会影响built-in模式下BE黑电平的配置,动态调节expander拐点,图像可能会有颜色的跳变。

【相关数据类型及接口】