AE¶
概述¶
ISP AE模块实现的功能是:根据自动测光系统获得当前图像的曝光量,再自动配置镜头光圈、sensor快门及增益来获得最佳的图像质量。自动曝光的算法主要分光圈优先、快门优先、增益优先。光圈优先时算法会优先调整光圈到合适的位置,再分配曝光时间和增益,只适合p-iris镜头,这样能均衡噪声和景深。快门优先时算法会优先分配曝光时间,再分配sensor增益和ISP增益,这样拍摄的图像噪声会比较小。增益优先则是优先分配sensor增益和ISP增益,再分配曝光时间,适合拍摄运动物体的场景。当前AE算法也支持客户设定更灵活的曝光分配策略,AE模块的工作流程如图1所示。
重要概念¶
曝光时间:sensor积累电荷的时间,是sensor pixel从开始曝光到电荷被读出的这段时间。
曝光增益:对sensor的输出电荷的总的放大系数,一般有数字增益和模拟增益,模拟增益引入的噪声会稍小,所以一般优先用模拟增益。
光圈:光圈是镜头中可以改变光圈孔径大小的机械装置。
抗闪烁:由于电灯的电源工频与sensor的帧率不匹配而导致的画面闪烁,一般通过限定曝光时间和修改sensor的帧率来达到抗闪烁的效果。
功能描述¶
AE模块由ISP的AE统计信息模块及AE控制策略的AE算法Firmware两部分组成。ISP的AE统计信息模块主要是提供sensor输入数据的亮度信息统计。其提供的统计信息包括直方图和平均值,可同时提供整幅图像的1024段的直方图和R/Gr/Gb/B四分量平均值统计信息,还可提供将整幅图像分成MxN区块的每个区块的R/Gr/Gb/B四分量平均值统计信息,具体如图1所示。
AE算法的主要工作原理是实时获取输入图像的统计信息并与设定目标亮度进行比较,从而动态调节sensor的曝光时间和增益以及镜头光圈大小以达到实际亮度与设定目标亮度接近。其工作原理如图2所示。
API参考¶
AE库接口¶
所有AE库接口都只是针对SDK提供的AE库,如果客户自己实现AE库,不需要关注这些接口,且无法使用这些接口。
ss_mpi_ae_register:向ISP注册AE库。
ss_mpi_ae_unregister:向ISP反注册AE库。
ss_mpi_ae_sensor_reg_callback:AE库提供的sensor注册的回调接口。
ss_mpi_ae_sensor_unreg_callback:AE库提供的sensor反注册的回调接口。
ss_mpi_ae_register¶
【描述】
向ISP注册AE库。
【语法】
td_s32 ss_mpi_ae_register(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *ae_lib);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_ae.h
库文件:libss_isp.a、libot_isp.a、libot_ae.a
【注意】
该接口调用了ISP库提供的AE注册回调接口ss_mpi_isp_ae_lib_reg_callback,以实现SDK提供的AE库向ISP库注册的功能。
AE库可以注册多个实例。
此接口不支持多进程操作。
【举例】
ot_vi_pipe vi_pipe = 0;
ae_lib.id = 0;
strcpy(ae_lib.lib_name, OT_AE_LIB_NAME);
ss_mpi_ae_register(vi_pipe, &ae_lib);
ae_lib.id = 1;
ss_mpi_ae_register(vi_pipe, &ae_lib);
【相关主题】
无
ss_mpi_ae_unregister¶
【描述】
向ISP反注册AE库。
【语法】
td_s32 ss_mpi_ae_unregister(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_ae.h
库文件:libss_isp.a、libot_isp.a、libot_ae.a
【注意】
该接口调用了ISP库提供的AE反注册回调接口ss_mpi_isp_ae_lib_unreg_callback,以实现AE向ISP库反注册的功能。
此接口不支持多进程操作。
【举例】
ot_vi_pipe vi_pipe = 0;
ae_lib.id = 0;strcpy(ae_lib.lib_name, OT_AE_LIB_NAME);
ss_mpi_ae_unregister(vi_pipe, & ae_lib);
ae_lib.id = 1;
ss_mpi_ae_unregister(vi_pipe, & ae_lib);
【相关主题】
无
ss_mpi_ae_sensor_reg_callback¶
【描述】
AE库提供的sensor注册的回调接口。
【语法】
td_s32 ss_mpi_ae_sensor_reg_callback(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib, ot_isp_sns_attr_info *sns_attr_info, ot_isp_ae_sensor_register *pregister);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_ae.h
库文件:libss_isp.a、libot_isp.a、libot_ae.a
【注意】
SensorId是sensor库中自定义的值,主要用于校对向ISP注册的sensor和向3A注册的sensor是否为同一个sensor。
AE通过sensor注册的一系列回调接口,获取差异化的初始化参数,并控制sensor。
此接口不支持多进程操作。
【举例】
ot_isp_3a_alg_lib ae_lib;
ot_isp_ae_sensor_register ae_register;
ot_isp_sns_attr_info sns_attr_info;
ot_isp_ae_sensor_exp_func *exp_func = &ae_register.sns_exp;
(ot_void)memset_s(exp_func, sizeof(ot_isp_ae_sensor_exp_func), 0, sizeof(ot_isp_ae_sensor_exp_func));
exp_func->pfn_cmos_get_ae_default = cmos_get_ae_default;
exp_func->pfn_cmos_fps_set = cmos_fps_set;
exp_func->pfn_cmos_slow_framerate_set= cmos_slow_framerate_set;
exp_func->pfn_cmos_inttime_update = cmos_inttime_update;
exp_func->pfn_cmos_gains_update = cmos_gains_update;
exp_func->pfn_cmos_again_calc_table = cmos_again_calc_table;
exp_func->pfn_cmos_dgain_calc_table = cmos_dgain_calc_table;
exp_func->pfn_cmos_get_inttime_max = cmos_get_inttime_max;
exp_func->pfn_cmos_ae_fswdr_attr_set = cmos_ae_fswdr_attr_set;
exp_func->pfn_cmos_ae_quick_start_status_set = cmos_ae_quick_start_status_set;
ot_vi_pipe vi_pipe = 0;
ae_lib.id = 0;
sns_attr_info.sensor_id = SENSOR_NAME_ID;
strncpy(ae_lib.lib_name, OT_AE_LIB_NAME, sizeof(OT_AE_LIB_NAME));
ret = ss_mpi_ae_sensor_reg_callback(vi_pipe, &ae_lib, &sns_attr_info, &ae_register);
if (ret != TD_SUCCESS) {
printf("sensor register callback function to ae lib failed!\n");
return ret;
}
【相关主题】
无
ss_mpi_ae_sensor_unreg_callback¶
【描述】
AE库提供的sensor反注册的回调接口。
【语法】
td_s32 ss_mpi_ae_sensor_unreg_callback(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib, ot_sensor_id sensor_id);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_ae.h
库文件:libss_isp.a、libot_isp.a、libot_ae.a
【注意】
SensorId是sensor库中自定义的值,主要用于校对向ISP反注册的sensor和向3A反注册的sensor是否为同一个sensor。
此接口不支持多进程操作。
【举例】
ot_isp_3a_alg_lib ae_lib;
ot_vi_pipe vi_pipe = 0;
ae_lib.id = 0;
strncpy(ae_lib.lib_name, OT_AE_LIB_NAME, sizeof(OT_AE_LIB_NAME));
ret = ss_mpi_ae_sensor_unreg_callback(vi_pipe, &ae_lib, SENSOR_NAME_ID);
if (ret != TD_SUCCESS) {
printf("sensor register callback function to ae lib failed!\n");
return ret;
}
【相关主题】
无
AE控制模块¶
曝光控制接口:
ss_mpi_isp_set_exposure_attr:设置AE曝光属性。
ss_mpi_isp_get_exposure_attr:获取AE曝光属性。
ss_mpi_isp_set_wdr_exposure_attr:设置WDR模式下的AE曝光属性。
ss_mpi_isp_get_wdr_exposure_attr:获取WDR模式下的AE曝光属性。
ss_mpi_isp_set_hdr_exposure_attr:设置HDR模式下的AE曝光属性。
ss_mpi_isp_get_hdr_exposure_attr:获取HDR模式下的AE曝光属性。
ss_mpi_isp_set_smart_exposure_attr:设置智能模式下的AE曝光属性。
ss_mpi_isp_get_smart_exposure_attr:获取智能模式下的AE曝光属性。
ss_mpi_isp_set_fast_face_ae_attr:设置人脸快速收敛模式下的AE曝光属性。
ss_mpi_isp_get_fast_face_ae_attr:获取人脸快速收敛模式下的AE曝光属性。
ss_mpi_isp_set_ae_route_attr:设置AE曝光分配策略属性。
ss_mpi_isp_get_ae_route_attr:获取AE曝光分配策略属性。
ss_mpi_isp_set_ae_route_attr_ex:设置AE曝光分配扩展属性,支持分别设置AE分配策略中的sensor模拟增益,sensor数字增益和ISP数字增益。
ss_mpi_isp_get_ae_route_attr_ex:获取AE曝光分配策略扩展属性。
ss_mpi_isp_set_ae_route_sf_attr:WDR模式下,设置AE短帧的曝光分配策略属性。
ss_mpi_isp_get_ae_route_sf_attr:获取AE短帧曝光分配策略属性。
ss_mpi_isp_set_ae_route_sf_attr_ex:WDR模式下,设置AE短帧的曝光分配策略扩展属性。
ss_mpi_isp_get_ae_route_sf_attr_ex:获取AE短帧曝光分配策略扩展属性。
ss_mpi_isp_query_exposure_info:获取AE内部状态信息。
ss_mpi_isp_set_exp_convert:设置不同帧率下等曝光量转换的相关属性。
ss_mpi_isp_get_exp_convert:获取不同帧率下等曝光量转换结果相关的曝光参数属性。
ss_mpi_isp_set_exposure_attr¶
【描述】
设定AE曝光属性。
【语法】
td_s32 ss_mpi_isp_set_exposure_attr (ot_vi_pipe vi_pipe, const ot_isp_exposure_attr *exp_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libss_isp.a、libot_isp.a、libot_ae.a
【注意】
AE曝光控制类型为自动时,曝光时间,曝光增益都由AE算法自动控制,可以通过配置自动曝光属性结构体ot_isp_ae_attr里面的参数得到不同的曝光效果。
AE曝光控制类型为手动时,可以通过配置手动曝光属性结构体manual_attr控制使能类型(曝光时间使能、sensor模拟增益使能、sensor数字增益使能、ISP数字增益使能)及相应的曝光参数(曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益)。
AE曝光控制类型为自动时,配置手动曝光属性的参数无效。同理,AE曝光控制类型为手动时,配置自动曝光属性的参数无效。
AE曝光控制类型为手动时,若曝光参数设置超出最大(小)值,将使用sensor支持的最大(小)值代替。
无论是自动曝光还是手动曝光,曝光时间的单位为微秒(us),曝光增益的单位为10bit精度的倍数,即1024代表1倍,2048代表2倍等。
WDR模式下,优先帧设置为长帧时,优先根据长帧的曝光路线进行曝光,其中2合1WDR模式下当增益分开配置时,短帧曝光路线根据长帧的曝光参数进行调整;优先帧设置为短帧时,优先根据短帧的曝光路线进行曝光,其中2合1WDR模式下当增益分开配置时,长帧曝光路线根据短帧的曝光参数进行调整。
2合1WDR模式下,设置增益分开配置,若sensor支持长短帧不同增益,可实现长短帧不同的sensor模拟增益、sensor数字增益、WDR增益,若sensor不支持长短帧不同增益,可实现长短帧不同的WDR增益。
【举例】
自动曝光属性设置:
ot_vi_pipe vi_pipe = 0;
ot_isp_exposure_attr exp_attr;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr. bypass = TD_FALSE;
exp_attr. prior_frame= OT_ISP_LONG_FRAME;
exp_attr. ae_gain_sep_cfg= TD_FALSE;
exp_attr. op_type= OT_OP_MODE_AUTO;
exp_attr. auto_attr. exp_time_range.max = 40000;
exp_attr. auto_attr. exp_time_range.min = 10;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr. auto_attr.speed = 0x80;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr. auto_attr. exp_attr =OT_ISP_AE_EXP_HIGHLIGHT_PRIOR;
exp_attr. auto_attr. hist_ratio_slope= 0x100;
exp_attr. auto_attr. max_hist_offset= 0x40;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr. auto_attr. antiflicker. enable= TD_TRUE;
exp_attr. auto_attr. antiflicker. frequency= 50;
exp_attr. auto_attr. antiflicker. mode= OT_ISP_ANTIFLICKER_NORMAL_MODE;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr. auto_attr. ae_delay_attr. black_delay_frame = 10;
exp_attr. auto_attr. ae_delay_attr. white_delay_frame = 0;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
手动曝光属性设置:
ot_vi_pipe vi_pipe = 0;
ot_isp_exposure_attr exp_attr;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);exp_attr. bypass= TD_FALSE;
exp_attr. op_type= OT_OP_MODE_MANUAL;
exp_attr. manual_attr. a_gain_op_type = OT_OP_MODE_MANUAL;
exp_attr. manual_attr. d_gain_op_type = OT_OP_MODE_MANUAL
exp_attr. manual_attr. ispd_gain_op_type = OT_OP_MODE_MANUAL;
exp_attr. manual_attr. exp_time_op_type = OT_OP_MODE_MANUAL;
exp_attr. manual_attr. a_gain = 0x400;
exp_attr. manual_attr. d_gain = 0x400;
exp_attr. manual_attr. isp_d_gain = 0x400;
exp_attr. manual_attr. exp_time = 0x40000;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
【相关主题】
ss_mpi_isp_get_exposure_attr¶
【描述】
获取AE曝光属性。
【语法】
td_s32 ss_mpi_isp_get_exposure_attr(ot_vi_pipe vi_pipe, ot_isp_exposure_attr *exp_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libss_isp.a、libot_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_wdr_exposure_attr¶
【描述】
设置WDR模式下的AE曝光属性。
【语法】
td_s32 ss_mpi_isp_set_wdr_exposure_attr(ot_vi_pipe vi_pipe, const ot_isp_wdr_exposure_attr *wdr_exp_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libss_isp.a、libot_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_get_wdr_exposure_attr¶
【描述】
获取WDR模式下的AE曝光属性。
【语法】
td_s32 ss_mpi_isp_get_wdr_exposure_attr(ot_vi_pipe vi_pipe, ot_isp_wdr_exposure_attr *wdr_exp_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libss_isp.a、libot_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_hdr_exposure_attr¶
【描述】
设置HDR模式下的AE曝光属性。
【语法】
td_s32 ss_mpi_isp_set_hdr_exposure_attr(ot_vi_pipe vi_pipe, const ot_isp_hdr_exposure_attr *hdr_exp_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
SS928V100不支持HDR模式。
【举例】
无
【相关主题】
ss_mpi_isp_get_hdr_exposure_attr¶
【描述】
获取HDR模式下的AE曝光属性。
【语法】
td_s32 ss_mpi_isp_get_hdr_exposure_attr(ot_vi_pipe vi_pipe, ot_isp_hdr_exposure_attr *hdr_exp_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
SS928V100不支持HDR模式。
【举例】
无
【相关主题】
ss_mpi_isp_set_smart_exposure_attr¶
【描述】
设置智能模式下的AE曝光属性。仅在有智能信息时生效。
【语法】
td_s32 ss_mpi_isp_set_smart_exposure_attr(ot_vi_pipe vi_pipe, const ot_isp_smart_exposure_attr *smart_exp_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
客户使用此功能时可通过自己的智能模块得到相应智能信息并传递给ISP,传递方式可参考ss_mpi_isp_set_smart_info接口,ISP得到人脸或人形的亮度信息后,会针对性地调节曝光,以使人脸或人形亮度达到设定的目标值。
接口使用详见ot_isp_smart_exposure_attr说明。
【举例】
无
【相关主题】
ss_mpi_isp_get_smart_exposure_attr¶
【描述】
获取智能模式下的AE曝光属性。仅在有智能信息时生效。
【语法】
td_s32 ss_mpi_isp_get_smart_exposure_attr(ot_vi_pipe vi_pipe, ot_isp_smart_exposure_attr *smart_exp_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_fast_face_ae_attr¶
【描述】
设置人脸快速收敛模式下的AE曝光属性。仅在有人脸坐标信息时生效。
【语法】
td_s32 ot_mpi_isp_set_fast_face_ae_attr(ot_vi_pipe vi_pipe, const ot_isp_fast_face_ae_attr *fast_face_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【举例】
ot_vi_pipe vi_pipe = 0;
ot_isp_fast_face_ae_attr fast_face_attr;
ss_mpi_isp_get_fast_face_ae_attr (vi_pipe, &fast_face_attr);
fast_face_attr. enable = TD_TRUE;
ss_mpi_isp_set_fast_face_ae_attr (vi_pipe, &fast_face_attr);
【相关主题】
ss_mpi_isp_get_fast_face_ae_attr¶
【描述】
获取人脸快速收敛模式下的AE曝光属性。仅在有人脸坐标信息时生效。
【语法】
td_s32 ss_mpi_isp_get_fast_face_ae_attr(ot_vi_pipe vi_pipe, ot_isp_fast_face_ae_attr *fast_face_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【举例】
ot_vi_pipe vi_pipe = 0;
ot_isp_fast_face_ae_attr fast_face_attr;
ss_mpi_isp_get_fast_face_ae_attr (vi_pipe, &fast_face_attr);
fast_face_attr. enable = TD_TRUE;
ss_mpi_isp_set_fast_face_ae_attr (vi_pipe, &fast_face_attr);
【相关主题】
ss_mpi_isp_set_ae_route_attr¶
【描述】
设置AE曝光分配策略属性。
【语法】
td_s32 ss_mpi_isp_set_ae_route_attr(ot_vi_pipe vi_pipe, const ot_isp_ae_route *ae_route_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
此接口用于设定AE曝光分配路线,AE计算得到的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光优先、增益优先、光圈优先。
AE分配路线示意图如图1所示。AE分配路线遵循以下限定:
最大支持16个节点,每个节点有曝光时间、增益、光圈三个分量,增益包含模拟增益、数字增益、ISP数字增益。
节点中曝光时间的单位为us,不能设置为0,也不能设置太小导致实际对应的曝光行数为0,否则可能产生异常。
光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制,所以DC-Iris和手动光圈镜头光圈分量是无效的。即光圈类型为DC-Iris时,节点光圈分量不会对曝光量分配产生任何影响。
节点的曝光量是曝光时间、增益和光圈的乘积,节点曝光量单调递增,后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。
如果相邻节点的曝光量增加,那么应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如增益分量增加,那么该段路线的分配策略是增益优先。
不支持设置等曝光量节点。
用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
AE分配路线不能用于限制曝光参数的最大值和最小值。如果当前曝光量不在用户设定的路线范围当中,即曝光量超出了第一个节点或最后一个节点,曝光参数分配会超出节点限制,但不超过参数本身范围限制。
针对DC-Iris和手动光圈镜头,默认AE分配策略是首先分配曝光时间,其次分配增益。针对P-Iris镜头,默认AE分配策略是首先调节光圈,将光圈调至最大后调节曝光时间,最后再分配增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
在线进行DC-Iris和P-Iris切换,AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置AE route。
2合1WDR模式下,优先帧为短帧且增益分开配置不使能时,AE route不生效。
自动降帧时,若cmos.c里面设置了AE route,则在切换后会采用cmos.c中的AE route,否则采用已生效的AE route。同时,最大曝光时间的改变会更新到AE route中。
线性模式与WDR模式切换时,若cmos.c里面设置了AE route,则在切换后会采用cmos.c中的route,否则采用默认的AE route。
帧率或分辨率切换时,若用户设置的最大曝光目标时间大于切换后1帧所允许的最大曝光时间,那么分配路线的最大曝光时间会更新为切换后1帧所允许的最大曝光时间。
发生自动降帧、线性与WDR模式切换、帧率或分辨率切换、优先帧切换、增益分开配置切换、限制曝光时间或增益的最大最小值等情况时,实际生效的AE route可能与MPI设置的不一致,此时可以通过ss_mpi_isp_query_exposure_info获取实际生效的AE route。
【举例】
ot_vi_pipe vi_pipe = 0;
ot_isp_ae_route ae_route;
td_u32 route_node[3][3]
= {{100,1024,1},{40000,1024,1},{40000,16384,1}};
ss_mpi_isp_get_ae_route_attr(vi_pipe, &ae_route);ae_route.total_num = 3;
memcpy(ae_route. route_node, route_node, sizeof(route_node));
ss_mpi_isp_set_ae_route_attr(vi_pipe, &ae_route);
【相关主题】
ss_mpi_isp_get_ae_route_attr¶
【描述】
获取AE曝光分配策略属性。
【语法】
td_s32 ss_mpi_isp_get_ae_route_attr(ot_vi_pipe vi_pipe, ot_isp_ae_route *ae_route_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_ae_route_attr_ex¶
【描述】
设置AE曝光分配扩展属性,支持分别设置AE分配策略中的sensor模拟增益,sensor数字增益和ISP数字增益。
【语法】
td_s32 ss_mpi_isp_set_ae_route_attr_ex(ot_vi_pipe vi_pipe, const ot_isp_ae_route_ex *ae_route_attr_ex);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
此接口用于设定AE曝光分配扩展属性,AE计算得到的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光时间优先、sensor模拟增益优先、sensor数字增益优先、ISP数字增益优先和光圈优先。该接口可用于设置WDR模式下的曝光分配路线,减轻正常室内照度多帧合成WDR产生的工频闪现象,优化WDR模式图像效果。
AE曝光分配扩展属性是否生效可通过配置ss_mpi_isp_set_exposure_attr接口中的ae_route_ex_valid来实现。ae_route_ex_valid为TD_TRUE时使用扩展AE route,否则使用普通AE分配路线。
AE扩展分配路线遵循以下限定:
最大支持16个节点,每个节点有曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈五个分量。
节点中曝光时间的单位为us,不能设置为0,也不能设置太小导致实际对应的曝光行数为0,否则可能产生异常。
光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制,所以DC-Iris和手动光圈镜头光圈分量是无效的。即光圈类型为DC-Iris时,节点光圈分量不会对曝光量分配产生任何影响。
节点的曝光量是曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈的乘积,节点曝光量单调递增,后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。
如果相邻节点的曝光量增加,那么应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如sensor模拟增益分量增加,那么该段路线的分配策略是sensor模拟增益优先。
不支持设置等曝光量节点。
用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
AE分配路线不能用于限制曝光参数的最大值和最小值。如果当前曝光量不在用户设定的路线范围当中,即曝光量超出了第一个节点或最后一个节点,曝光参数分配会超出节点限制,但不超过参数本身范围限制。
针对DC-Iris和手动光圈镜头,默认AE扩展分配策略是先分配曝光时间,再分配sensor模拟增益、sensor数字增益,最后分配ISP数字增益。针对P-Iris镜头,默认AE扩展分配策略是先调节光圈,将光圈调至最大后调节曝光时间,最后再分配sensor模拟增益、sensor数字增益和ISP数字增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
在线进行DC-Iris和P-Iris切换,扩展AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置扩展AE route。
2合1WDR模式下,优先帧为短帧且增益分开配置不使能时,扩展AE route不生效。
自动降帧时,最大曝光时间的改变会更新到分配路线中。
线性模式与WDR模式切换时,若cmos.c里面设置了扩展AE route,且cmos.c中的扩展AE route标识符ae_route_ex_valid为TD_TRUE,则在切换后会采用cmos.c中的扩展AE route,否则采用默认的AE route。
帧率或分辨率切换时,若用户设置的最大曝光目标时间大于切换后1帧所允许的最大曝光时间,那么分配路线的最大曝光时间会更新为切换后1帧所允许的最大曝光时间。
发生自动降帧、线性与WDR模式切换、帧率或分辨率切换、优先帧切换、增益分开配置切换、限制曝光时间或增益的最大最小值等情况时,实际生效的扩展AE route可能与MPI设置的不一致,此时可以通过ss_mpi_isp_query_exposure_info获取实际生效的扩展AE route。
【举例】
ot_vi_pipe vi_pipe = 0;
ot_isp_exposure_attr exp_attr;
ot_isp_ae_route_ex ae_route_attr_ex;
td_u32 route_ex_node [6][5]
= {{ 30, 1024, 1024, 1024, 0},
{ 30, 1024, 1024, 1024, 10},
{ 30, 16384, 1024, 1024, 10},
{1000000, 16384, 1024, 1024, 10},
{1000000, 16384, 16384, 1024, 10},
{1000000, 16384, 16384, 4096, 10}};
ss_mpi_isp_get_ae_route_attr_ex(vi_pipe, &ae_route_attr_ex);ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr. ae_route_ex_valid = TD_TRUE;
ae_route_attr_ex. total_num = 6;
memcpy(ae_route_attr_ex. route_ex_node, route_ex_node, sizeof(route_ex_node));
ss_mpi_isp_set_ae_route_attr_ex (vi_pipe, & ae_route_attr_ex);
ss_mpi_isp_set_exposure_attr (vi_pipe, &exp_attr);
【相关主题】
ss_mpi_isp_get_ae_route_attr_ex¶
【描述】
获取AE曝光分配策略扩展属性。
【语法】
td_s32 ss_mpi_isp_get_ae_route_attr_ex(ot_vi_pipe vi_pipe, ot_isp_ae_route_ex *ae_route_attr_ex);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
无。
【举例】
无。
【相关主题】
ss_mpi_isp_set_ae_route_sf_attr¶
【描述】
WDR模式下,设置AE短帧的曝光分配策略属性。
【语法】
td_s32 ss_mpi_isp_set_ae_route_sf_attr(ot_vi_pipe vi_pipe, const ot_isp_ae_route *ae_route_sf_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
此接口用于WDR模式下设定AE短帧的曝光分配路线,AE计算得到的短帧的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光优先、增益优先、光圈优先。
AE分配路线遵循以下限定:
最大支持16个节点,每个节点有曝光时间、增益、光圈三个分量,增益包含模拟增益、数字增益、ISP数字增益。
节点中曝光时间的单位为us,不能设置为0,也不能设置太小导致实际对应的曝光行数为0,否则可能产生异常。
光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制,所以DC-Iris和手动光圈镜头光圈分量是无效的。即光圈类型为DC-Iris时,节点光圈分量不会对曝光量分配产生任何影响。光圈分量仅在优先帧为短帧时可控。
节点的曝光量是曝光时间、增益和光圈的乘积,节点曝光量单调递增,后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。
如果相邻节点的曝光量增加,那么应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如增益分量增加,那么该段路线的分配策略是增益优先。
不支持设置等曝光量节点。
用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
AE分配路线不能用于限制曝光参数的最大值和最小值。如果当前曝光量不在用户设定的路线范围当中,即曝光量超出了第一个节点或最后一个节点,曝光参数分配会超出节点限制,但不超过参数本身范围限制。
针对DC-Iris和手动光圈镜头,默认AE分配策略是首先分配曝光时间,其次分配增益。针对P-Iris镜头,默认AE分配策略是首先调节光圈,将光圈调至最大后调节曝光时间,最后再分配增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
在线进行DC-Iris和P-Iris切换,短帧AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置短帧AE route。
优先帧为长帧且增益分开配置不使能、以及线性模式下,短帧AE route不生效。
自动降帧时,最大曝光时间的改变会更新到分配路线中。
线性模式与WDR模式切换时,若cmos.c里面设置了短帧AE route,则在切换后会采用cmos.c中的route,否则采用默认的短帧AE route。
2合1WDR模式下,帧率或分辨率切换时,若用户设置的最大曝光目标时间大于切换后1帧所允许的最大曝光时间的一半,那么分配路线的最大曝光时间会更新为切换后1帧所允许的最大曝光时间的一半。
发生自动降帧、线性与2合1WDR模式切换、帧率或分辨率切换、优先帧切换、增益分开配置切换、限制曝光时间或增益的最大最小值等情况时,实际生效的AE route可能与MPI设置的不一致,此时可以通过ss_mpi_isp_query_exposure_info获取实际生效的短帧AE route。
【举例】
ot_vi_pipe vi_pipe = 0;
ot_isp_ae_route ae_route_sf_attr;
td_u32 route_node [3][3]
= {{100,1024,1},{20000,1024,1},{20000,16384,1}};
ss_mpi_isp_get_ae_route_sf_attr (vi_pipe, &ae_route_sf_attr);
ae_route_sf_attr.total_num = 3;
memcpy(ae_route_sf_attr.route_node, route_node, sizeof(route_node));
ss_mpi_isp_set_ae_route_sf_attr (vi_pipe, &ae_route_sf_attr);
【相关主题】
ss_mpi_isp_get_ae_route_sf_attr¶
【描述】
获取AE短帧曝光分配策略属性。
【语法】
td_s32 ss_mpi_isp_get_ae_route_sf_attr(ot_vi_pipe vi_pipe, ot_isp_ae_route *ae_route_sf_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_ae_route_sf_attr_ex¶
【描述】
WDR模式下,设置AE短帧的曝光分配策略扩展属性。
【语法】
td_s32 ss_mpi_isp_set_ae_route_sf_attr_ex(ot_vi_pipe vi_pipe, const ot_isp_ae_route_ex *ae_route_sf_attr_ex);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
此接口用于WDR模式下设定AE短帧的曝光分配扩展属性,AE计算得到的短帧的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光时间优先、sensor模拟增益优先、sensor数字增益优先、ISP数字增益优先和光圈优先。
AE曝光分配扩展属性是否生效可通过配置ss_mpi_isp_set_exposure_attr接口中的ae_route_ex_valid来实现。ae_route_ex_valid为TD_TRUE时使用扩展AE route,否则使用普通AE分配路线。
AE扩展分配路线遵循以下限定:
最大支持16个节点,每个节点有曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈五个分量。
节点中曝光时间的单位为us,不能设置为0,也不能设置太小导致实际对应的曝光行数为0,否则可能产生异常。节点曝光时间应设置不超过sensor最大曝光时间的一半。
光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制,所以DC-Iris和手动光圈镜头光圈分量是无效的。即光圈类型为DC-Iris时,节点光圈分量不会对曝光量分配产生任何影响。光圈分量仅在优先帧为短帧时可控。
节点的曝光量是曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈的乘积,节点曝光量单调递增,后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。
如果相邻节点的曝光量增加,那么应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如sensor模拟增益分量增加,那么该段路线的分配策略是sensor模拟增益优先。
不支持设置等曝光量节点。
用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
AE分配路线不能用于限制曝光参数的最大值和最小值。如果当前曝光量不在用户设定的路线范围当中,即曝光量超出了第一个节点或最后一个节点,曝光参数分配会超出节点限制,但不超过参数本身范围限制。
针对DC-Iris和手动光圈镜头,默认AE扩展分配策略是先分配曝光时间,再分配sensor模拟增益、sensor数字增益,最后分配ISP数字增益。针对P-Iris镜头,默认AE扩展分配策略是先调节光圈,将光圈调至最大后调节曝光时间,最后再分配sensor模拟增益、sensor数字增益和ISP数字增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
在线进行DC-Iris和P-Iris切换,扩展AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置短帧扩展AE route。
优先帧为长帧且增益分开配置不使能、以及线性模式下,短帧扩展AE route不生效。
自动降帧时,最大曝光时间的改变会更新到分配路线中。
线性模式与WDR模式切换时,若cmos.c里面设置了短帧扩展AE route,且cmos.c中的扩展AE route标识符ae_route_ex_valid为TD_TRUE,则在切换后会采用cmos.c中的短帧扩展AE route,否则采用默认的短帧AE route。
2合1WDR模式下,帧率或分辨率切换时,若用户设置的最大曝光目标时间大于切换后1帧所允许的最大曝光时间,那么分配路线的最大曝光时间会更新为切换后1帧所允许的最大曝光时间。
发生自动降帧、线性与WDR模式切换、帧率或分辨率切换、优先帧切换、增益分开配置切换、限制曝光时间或增益的最大最小值等情况时,实际生效的扩展AE route可能与MPI设置的不一致,此时可以通过ss_mpi_isp_query_exposure_info获取实际生效的短帧扩展AE route。
【举例】
ot_vi_pipe vi_pipe = 0;
ot_isp_exposure_attr exp_attr;
ot_isp_ae_route_ex ae_route_sf_attr_ex;
td_u32 route_ex_node [6][5]
= {{ 30, 1024, 1024, 1024, 0},
{ 30, 1024, 1024, 1024, 10},
{ 30, 16384, 1024, 1024, 10},
{20000, 16384, 1024, 1024, 10},
{20000, 16384, 16384, 1024, 10},
{20000, 16384, 16384, 4096, 10}};
ss_mpi_isp_get_ae_route_sf_attr_ex (vi_pipe, & ae_route_sf_attr_ex);
ss_mpi_isp_get_exposure_attr (vi_pipe, &exp_attr);
exp_attr. ae_route_ex_valid= TD_TRUE;
ae_route_sf_attr_ex. total_num= 6;
memcpy(ae_route_sf_attr_ex. route_ex_node, route_ex_node, sizeof(route_ex_node));
ss_mpi_isp_get_ae_route_sf_attr_ex (vi_pipe, & ae_route_sf_attr_ex);
ss_mpi_isp_set_exposure_attr (vi_pipe, &exp_attr);
【相关主题】
ss_mpi_isp_get_ae_route_sf_attr_ex¶
【描述】
获取AE短帧曝光分配策略扩展属性。
【语法】
td_s32 ss_mpi_isp_get_ae_route_sf_attr_ex(ot_vi_pipe vi_pipe, ot_isp_ae_route_ex *ae_route_sf_attr_ex);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
无。
【举例】
无。
【相关主题】
ss_mpi_isp_query_exposure_info¶
【描述】
获取AE内部状态信息,包括全局5段直方图、1024段直方图和平均亮度等统计信息,同时还可获取AE运行状态中的曝光时间、增益、曝光量和实际生效的AE route等信息。
【语法】
td_s32 ss_mpi_isp_query_exposure_info(ot_vi_pipe vi_pipe, ot_isp_exp_info *exp_info);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
获取的曝光时间以微秒(us)为单位,获取的sensor模拟增益、sensor数字增益和ISP数字增益以倍数为单位,精度是10bit。
获取的曝光量=(曝光时间 * 曝光增益),未考虑光圈状态,其中曝光时间以us为单位,曝光增益包括sensor模拟增益、sensor数字增益和ISP数字增益,以倍数为单位,6bit小数精度。若该值的精度不足以满足需求,可以根据上面高精度的曝光时间(us)和增益(10bit小数精度)重新计算一个曝光量。
可通过查询hist_error来获取AE是否稳定的信息,若hist_error的绝对值小于曝光容忍偏差值,意味着当前AE不会动作。
通过该接口获取的AE route与Proc信息中的AE route都是实际生效的值。只不过该接口的节点曝光时间以us为单位,而Proc信息中的曝光时间以行数为单位;该接口的光圈分量为F值大小,取值范围为[0x0, 0x400]。扩展AE route以及短帧AE route和短帧扩展AE route也是同样的对应关系。
若用户使用非SDK提供的AE算法,则该接口需要自己实现并且需要同步修改PQTOOLS的xml文件,具体修改方式请参考《图像质量调试工具使用指南》第2.1.3.7小节。
调用该接口需要确保系统已经运行起来并且统计信息已经生成;当系统刚运行起来第一帧,AE内部还没有统计信息时,调用该接口统计信息会返回全0,这时候系统内存是足够的。
【举例】
ot_vi_pipe vi_pipe = 0;
ot_isp_exp_info exp_info;
ss_mpi_isp_query_exposure_info (vi_pipe, &exp_info);
printf("Sensor exposure time: %d\n",exp_info.exp_time);
printf("Analog Gain: %d\n",exp_info. a_gain);
printf("Digital Gain: %d\n",exp_info. d_gain);
printf("ISP Gain: %d\n",exp_info. isp_d_gain);
printf("Exposure: %d\n",exp_info. exposure);
printf("Average Luminance: %d\n",exp_info. ave_lum);
printf("Hist error: %d\n",exp_info. hist_error);
exp_info. exposure_is_max? printf("Exposure is MAX!\n") : printf("Exposure is NOT MAX!\n");
for(i = 0; i < 1024; i++)
{
printf("Hist1024Value[%d]: %d\n",i, exp_info. ae_hist1024_value [i]);
}
【相关主题】
无
ss_mpi_isp_set_exp_convert¶
【描述】
设定等曝光量转换的曝光参数相关属性。
【语法】
td_s32 ss_mpi_isp_set_exp_convert(ot_vi_pipe vi_pipe, ot_isp_exp_conv_param *conv_param);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
作为输入的值,除了值要设定输入的vi_pipe号,还需对conv_param中的成员变量tar_fps进行设置目标帧率即可。
【举例】
ot_vi_pipe vi_pipe = 0;
td_s32 i;
ot_isp_exp_conv_param conv_param;
conv_param. tar_fps= 3000;
ss_mpi_isp_set_exp_convert (vi_pipe, &conv_param);
ss_mpi_isp_get_vd_time_out(vi_pipe, OT_ISP_VD_FE_START, 50);
ss_mpi_isp_get_exp_convert (vi_pipe, &conv_param);
for (i = 0; i < 4; i++) {
printf("time_reg. reg_addr [%d]: 0x%x, time_reg. reg_value [%d]: 0x%x\n", i, conv_param. time_reg [i]. reg_addr, i, conv_param. time_reg [i]. reg_value);
printf("again_reg. reg_addr [%d]: 0x%x, again_reg. reg_value [%d]: 0x%x\n", i, conv_param. again_reg [i]. reg_addr, i, conv_param. again_reg [i]. reg_value);
printf("dgain_reg. reg_addr [%d]: 0x%x, dgain_reg. reg_value [%d]: 0x%x\n", i, conv_param. dgain_reg [i]. reg_addr, i, conv_param. dgain_reg [i]. reg_value);
}
【相关主题】
无
ss_mpi_isp_get_exp_convert¶
【描述】
获取等曝光量转换的曝光参数相关属性。
【语法】
td_s32 ss_mpi_isp_get_exp_convert(ot_vi_pipe vi_pipe, ot_isp_exp_conv_param *conv_param);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
转换出来的Sensor曝光时间、模拟增益、数字增益均为Sensor寄存器的值并有对应的寄存器地址,可以直接配给Sensor寄存器使用。转换出来的ISP数字增益以倍数为单位,精度是10bit。
转换出来的Sensor曝光时间、模拟增益、数字增益分别最多为10个寄存器值和10个寄存器地址。
【举例】
无
【相关主题】
无
AI控制模块¶
光圈控制接口:
ss_mpi_isp_set_iris_attr:设置光圈的控制属性。
ss_mpi_isp_get_iris_attr:获取光圈的控制属性。
ss_mpi_isp_set_dciris_attr:设置DC-Iris自动光圈控制属性。
ss_mpi_isp_get_dciris_attr:获取DC-Iris自动光圈控制属性。
ss_mpi_isp_set_piris_attr:设置P-Iris自动光圈控制属性。
ss_mpi_isp_get_piris_attr:获取P-Iris自动光圈控制属性。
ss_mpi_isp_set_iris_attr¶
【描述】
设定光圈的控制属性,该函数可实现手动光圈属性和光圈类型等参数的设置。
【语法】
td_s32 ss_mpi_isp_set_iris_attr(ot_vi_pipe vi_pipe, const ot_isp_iris_attr *iris_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
进行AI算法测试前,建议确认AI电路特性是否符合_录像机_要求。
根据实际对接镜头光圈类型,设置正确的光圈类型属性,由此再去设置相关的DC-Iris/P-Iris控制属性。若对接的是手动光圈镜头,可将光圈类型设置为OT_ISP_IRIS_DC_TYPE,建议此时关闭AI使能。
手动光圈属性主要用于调试,可通过该MPI进行设置。对于P-Iris镜头,手动iris_fno值会受到最大、最小光圈目标值的影响。自动光圈属性的更多参数需要调用ss_mpi_isp_set_dciris_attr和ss_mpi_isp_get_piris_attr进行设置。
【举例】
无
【相关主题】
ss_mpi_isp_get_iris_attr¶
【描述】
获取光圈的控制属性。
【语法】
td_s32 ss_mpi_isp_get_iris_attr(ot_vi_pipe vi_pipe, ot_isp_iris_attr *iris_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_set_dciris_attr¶
【描述】
设定DC-Iris AI算法的控制属性,该函数可实现DC-Iris自动光圈的参数设置。
【语法】
td_s32 ss_mpi_isp_set_dciris_attr(ot_vi_pipe vi_pipe, const ot_isp_dciris_attr *dciris_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
DC-Iris光圈控制采用PID算法,算法根据画面亮度,调节PWM占空比对光圈大小进行控制。当曝光时间和增益达到最小目标值之后,会进入光圈控制区域。当光圈控制能满足目标亮度的要求时,AE直接返回,保持曝光时间和增益不变。当画面亮度稳定且PWM占空比维持在打开值一段时间后,AI算法会认为光圈已经打开至最大,退出光圈控制区,将控制权交还给AE。处于光圈控制区时,更改AE算法参数,如最大/最小曝光时间、最大/最小增益和抗闪等需要即时生效的参数,AE会即时响应,根据新设定的参数和环境亮度,AI算法重新决定是否要进入光圈控制区。由于进入光圈控制区域和退出光圈控制区域需要短暂时间,针对手动光圈镜头建议关闭AI功能,否则AE的调节速度会受到一点影响。针对DC-Iris镜头建议一直打开AI功能,随意开关AI容易导致光圈控制出现异常。针对某些长焦的DC-Iris镜头,默认参数可能会导致光圈打开/关闭速度过快,此时可以调节相关参数来解决,详见ot_isp_dciris_attr部分描述。
关闭AI功能,对于DC-Iris镜头,光圈会打开到最大。
【举例】
无
【相关主题】
ss_mpi_isp_get_dciris_attr¶
【描述】
获取DC-Iris自动光圈的控制属性。
【语法】
td_s32 ss_mpi_isp_get_dciris_attr(ot_vi_pipe vi_pipe, ot_isp_dciris_attr *dciris_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_set_piris_attr¶
【描述】
设定P-Iris自动光圈的控制属性。
【语法】
td_s32 ss_mpi_isp_set_piris_attr(ot_vi_pipe vi_pipe, const ot_isp_piris_attr *piris_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
P-Iris自动光圈控制属性包含一个只写参数step_fno_table_change,建议先对该结构体赋值,set MPI接口一次之后再get MPI 接口,直接get再set MPI可能会报错。
P-Iris镜头光圈控制通过AE分配路线进行。P-Iris对接重点在于正确设置镜头相关参数和合理设置AE分配路线,详见ot_isp_piris_attr和ss_mpi_isp_set_ae_route_attr部分描述,才能保证P-Iris正常工作。由于不同P-Iris的驱动方式可能会有差别,用户可以自行修改P-Iris驱动以适配不同镜头。
关闭AI功能,对于P-Iris镜头,光圈会打开到最大光圈目标值对应步进电机位置。
单光圈多pipe时,只能有一个pipe的AE控制光圈,其余pipe不能控制光圈,即当一路pipe enable光圈控制,其余路应设置为disable。
【举例】
ot_vi_pipe vi_pipe = 0;
ot_isp_piris_attr piris_attr, piris_attr_def;
td_u16 total_step_def = 93;
td_u16 step_count_def = 62;
td_u16 step_fno_table_def[1024] = {30,35,40,45,50,56,61,67,73,79,85,92,98,105,112,120,127,135,143,150,158,166,174,183,191,200,208,217,225,234,243,252,261,270,279,289,298,307,316,325,335,344,353,362,372,381,390,399,408,417,426,435,444,453,462,470,478,486,493,500,506,512};
ot_isp_iris_f_no max_iris_fno_target_def = 9;
ot_isp_iris_f_no min_iris_fno_target_def = 5;
piris_attr_def. step_fno_table_change= TD_TRUE;
piris_attr_def. zero_is_max= TD_TRUE;
piris_attr_def. step_count= step_count_def;
piris_attr_def. total_step= total_step_def;
piris_attr_def. max_iris_fno_target = max_iris_fno_target_def;
piris_attr_def. min_iris_fno_target = min_iris_fno_target_def;
memcpy(piris_attr_def. step_fno_table, step_fno_table_def, sizeof(piris_attr_def. step_fno_table));
ss_mpi_isp_set_piris_attr (vi_pipe, &piris_attr_def);
ss_mpi_isp_get_piris_attr (vi_pipe, &piris_attr);
【相关主题】
ss_mpi_isp_get_piris_attr¶
【描述】
获取P-Iris自动光圈的控制属性。
【语法】
td_s32 ss_mpi_isp_get_piris_attr(ot_vi_pipe vi_pipe, ot_isp_piris_attr *piris_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h、ss_mpi_ae.h
库文件:libot_isp.a、libss_isp.a、libot_ae.a
【注意】
无
【举例】
无
【相关主题】
无
数据类型¶
Register¶
OT_ISP_HIST_NUM: 定义直方图bin的数目。
OT_ISP_AI_MAX_STEP_FNO_NUM:定义光圈的最大步数。
ot_isp_ae_sensor_register:定义sensor注册结构体。
ot_isp_ae_sensor_exp_func:定义sensor回调函数结构体。
ot_isp_ae_sensor_default:定义AE算法库的初始化参数结构体。
ot_isp_ae_accuracy_type:定义曝光时间、增益的精度类型的枚举。
ot_isp_ae_accuracy:定义曝光时间、增益的精度的结构体。
OT_ISP_HIST_NUM¶
【说明】
定义直方图bin的数目。
【定义】
#define OT_ISP_HIST_NUM 1024
【注意事项】
无。
【相关数据类型及接口】
ot_isp_fe_ae_stat_1
ot_isp_be_ae_stat_1
ot_isp_ae_stats
ot_isp_ae_stitch_stats
OT_ISP_AI_MAX_STEP_FNO_NUM¶
【说明】
定义光圈的最大步数。
【定义】
#define OT_ISP_AI_MAX_STEP_FNO_NUM 1024
【注意事项】
无。
【相关数据类型及接口】
ot_isp_ae_sensor_register¶
【说明】
定义sensor注册结构体。
【定义】
typedef struct {
ot_isp_ae_sensor_exp_func sns_exp;
} ot_isp_ae_sensor_register;
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
ot_isp_ae_sensor_exp_func¶
【说明】
定义sensor回调函数结构体。
【定义】
typedef struct {
td_s32 (*pfn_cmos_get_ae_default)(ot_vi_pipe vi_pipe, ot_isp_ae_sensor_default *ae_sns_dft);
/* the function of sensor set fps */
td_void (*pfn_cmos_fps_set)(ot_vi_pipe vi_pipe, ot_float f32_fps, ot_isp_ae_sensor_default *ae_sns_dft);
td_void (*pfn_cmos_slow_framerate_set)(ot_vi_pipe vi_pipe, td_u32 full_lines, ot_isp_ae_sensor_default *ae_sns_dft);
/* while isp notify ae to update sensor regs, ae call these funcs. */
td_void (*pfn_cmos_inttime_update)(ot_vi_pipe vi_pipe, td_u32 int_time);
td_void (*pfn_cmos_gains_update)(ot_vi_pipe vi_pipe, td_u32 again, td_u32 dgain);
td_void (*pfn_cmos_again_calc_table)(ot_vi_pipe vi_pipe, td_u32 *again_lin, td_u32 *again_db);
td_void (*pfn_cmos_dgain_calc_table)(ot_vi_pipe vi_pipe, td_u32 *dgain_lin, td_u32 *dgain_db);
td_void (*pfn_cmos_get_inttime_max)(ot_vi_pipe vi_pipe, td_u16 man_ratio_enable, td_u32 *ratio,
ot_isp_ae_int_time_range *int_time, td_u32 *lf_max_int_time);
/* long frame mode set */
td_void (*pfn_cmos_ae_fswdr_attr_set)(ot_vi_pipe vi_pipe, ot_isp_ae_fswdr_attr *ae_fswdr_attr);
td_void (*pfn_cmos_ae_quick_start_status_set)(ot_vi_pipe vi_pipe, td_bool quick_start_status);
td_void (*pfn_cmos_exp_param_convert)(ot_vi_pipe vi_pipe, ot_isp_ae_convert_param *exp_param);
} ot_isp_ae_sensor_exp_func;
【成员】
【注意事项】
如果回调函数指针不需要赋值,需要置为NULL。
在ot_isp_ae_sensor_default中定义了曝光时间和增益的精度,pfn_cmos_inttime_update和pfn_cmos_gains_update中设置的曝光时间和增益都是带精度的值,如何转换成sensor的配置值与sensor强相关,请参阅sensor手册。
不使用无光敏快启功能时,pfn_cmos_ae_quick_start_status_set需要设置为NULL。
quick_start_status是AE无光敏快启收敛状态的标志位。该值为TD_TRUE时,无光敏快启收敛完成。
【相关数据类型及接口】
ot_isp_sensor_register
ot_isp_ae_sensor_default¶
【说明】
定义AE算法库的初始化参数结构体。
【定义】
typedef struct {
td_u8 ae_compensation;
td_u32 lines_per500ms;
td_u32 flicker_freq;
td_float fps;
td_u32 hmax_times;
td_u32 init_exposure;
td_u32 init_int_time;
td_u32 init_again;
td_u32 init_dgain;
td_u32 init_isp_dgain;
td_u32 init_ae_speed;
td_u32 init_ae_tolerance;
td_u32 full_lines_std;
td_u32 full_lines_max;
td_u32 full_lines;
td_u32 binning_full_lines;
td_u32 max_int_time;
td_u32 min_int_time;
td_u32 max_int_time_target;
td_u32 min_int_time_target;
ot_isp_ae_accuracy int_time_accu;
td_u32 max_again;
td_u32 min_again;
td_u32 max_again_target;
td_u32 min_again_target;
ot_isp_ae_accuracy again_accu;
td_u32 max_dgain;
td_u32 min_dgain;
td_u32 max_dgain_target;
td_u32 min_dgain_target;
ot_isp_ae_accuracy dgain_accu;
td_u32 max_isp_dgain_target;
td_u32 min_isp_dgain_target;
td_u32 isp_dgain_shift;
td_u32 max_int_time_step;
td_bool max_time_step_enable;
td_u32 max_inc_time_step[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 max_dec_time_step[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 lf_max_short_time;
td_u32 lf_min_exposure;
ot_isp_ae_route ae_route_attr;
td_bool ae_route_ex_valid;
ot_isp_ae_route_ex ae_route_attr_ex;
ot_isp_ae_route ae_route_sf_attr;
ot_isp_ae_route_ex ae_route_sf_attr_ex;
td_u16 man_ratio_enable;
td_u32 arr_ratio[OT_ISP_EXP_RATIO_NUM];
ot_isp_iris_type iris_type;
ot_isp_piris_attr piris_attr;
ot_isp_iris_f_no max_iris_fno;
ot_isp_iris_f_no min_iris_fno;
ot_isp_ae_strategy ae_exp_mode;
td_u16 iso_cal_coef;
td_u8 ae_run_interval;
td_u32 exp_ratio_max;
td_u32 exp_ratio_min;
td_bool diff_gain_support;
ot_isp_quick_start_param quick_start;
ot_isp_prior_frame prior_frame;
td_bool ae_gain_sep_cfg;
td_bool lhcg_support;
td_u32 sns_lhcg_exp_ratio;
td_u8 ae_stat_pos;
} ot_isp_ae_sensor_default;
【成员】
【注意事项】
线性/WDR模式切换时,会回调pfn_cmos_get_ae_default函数更新AE相关默认参数。若WDR模式要使用AE扩展分配路线而线性模式不需要,建议在cmos_get_ae_default函数里面先对AE路线清零:ae_route_ex_valid= TD_FALSE,ae_route_attr. total_num= 0,ae_route_attr_ex. total_num= 0,然后视需要在WDR分支赋值。
SDK提供的AE算法采用init_exposure作为初始5帧的曝光量,可用于运动DV加速启动。建议关注快速启动的产品形态根据常用场景配置一个合适的初始曝光量,以达到AE快速收敛。FSWDR模式该值对应的是长帧曝光量,FSWDR模式若要快速启动,最好在cmos.c设置为固定曝光比,以减少曝光比调整的时间,待AE稳定后再根据需要设置为自动曝光比。若在cmos.c未给init_exposure赋值或将init_exposure赋值为0,则AE算法内部按起始曝光量为1024开始计算。WDR模式切换时,SDK提供的AE算法内部会计算切换曝光量以保证切换平滑,如果希望在WDR模式切换时init_exposure生效,可以通过配置init_ae_speed为0xFFFFFFFF实现。
对于特定Sensor,内部仅支持固定曝光比,需要配置man_ratio_enable= TD_TRUE,并把ratio配置为Sensor支持的固定曝光比,如果使用自动曝光比或手动配置为不支持的曝光比,会使图像效果不正常。
max_int_time_step自动长帧模式下普通模式和长帧模式之前切换过程中, 对短帧曝光时间减小的最大调整步长,以行数为单位。仅在自动长帧模式下有效。此参数针对短帧曝光时间减小过快会出现坏帧的sensor开放,一般sensor可以设定为较大值,则可以受此参数限制。
max_time_step_enable,max_inc_time_step [0],max_dec_time_step [0],这部分参数针对2合1行合成WDR模式下,短帧曝光时间前后2帧之间增加或者减少有限制的sensor开放。
lf_max_short_time为自动长帧模式下短帧曝光时间的最大值,如果此参数设置过小会导致自动长帧模式下亮区噪声表现变差。
对于支持LCG+HCG模式的Sensor,如OV2775,如果使用该模式,需正确配置基础曝光比sns_lhcg_exp_ratio,并且必须配置prior_frame= OT_ISP_LONG_FRAME,ae_gain_sep_cfg= TD_TRUE,否则会使图像效果不正常。
【相关数据类型及接口】
ot_isp_sensor_exp_func
ot_isp_ae_accuracy_type¶
【说明】
定义曝光时间、增益的精度类型的枚举。
【定义】
typedef enum {
OT_ISP_AE_ACCURACY_DB = 0,
OT_ISP_AE_ACCURACY_LINEAR,
OT_ISP_AE_ACCURACY_TABLE,
OT_ISP_AE_ACCURACY_BUTT,
} ot_isp_ae_accuracy_type;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_ae_accuracy
ot_isp_quick_start_param
ot_isp_ae_accuracy¶
【说明】
定义曝光时间、增益的精度的结构体。
【定义】
typedef struct {
ot_isp_ae_accuracy_type accu_type;
float accuracy;
float offset;
} ot_isp_ae_accuracy;
【成员】
【注意事项】
大部分增益的精度均可归结为线性精度、DB精度和TABLE精度这几类。
线性精度指的是增益的倍数均匀增加。例如sensor能支持的again为1倍,1(1+1/16)倍,1(1+2/16)倍……这种情况下,精度类型可以设定为OT_ISP_AE_ACCURACY_LINEAR,精度值设置为0.0625,在这种精度下,again为32则表示32*0.0625= 2倍增益。
DB精度指的是增益的倍数以倍增的形式增加。例如sensor的芯片手册说明能支持的again为0db,0.3db,0.6db……这种情况下,精度类型可以设定为OT_ISP_AE_ACCURACY_DB,精度值设置为0.3,在这种精度下,again为80则表示80*0.3db=24db,24db是16倍增益。再例如sensor能支持的again为1倍,2倍,4倍,8倍……这种情况下,对应为db则为0db,6db,12db,18db,所以精度类型设定为OT_ISP_AE_ACCURACY_DB,精度值设置为6。由于AE算法内部实现线性转DB时计算精度存在误差,当DB精度较高(小于1)时,建议采用TABLE精度来实现。
TABLE精度指增益的倍数是通过查表的形式获得,表格统一使用10bit精度,即1024表示1倍增益。当某些sensor的增益值的增加规律不线性或者DB精度较高时,可以使用TABLE方式,AE算法计算出需要的模拟增益/数字增益的数值,用查询sensor增益表格中最接近的值作为数字增益/模拟增益的值。
使用TABLE模式时,需要相应的初始化回调结构体ot_isp_ae_sensor_exp_func中的回调函数。
曝光时间的精度通常都是线性的,都是以行为单位。若曝光时间为线性精度,精度accuracy为大于1的整数,则意味着AE计算出来的曝光行数只能为最小曝光时间加上accuracy的整数倍。该功能可用于计算某些sensor WDR模式下的长/短帧曝光时间,如某些sensor曝光行数必须为2n+1,则可以配置最小曝光时间为1或3,配置accuracy为2。
曝光时间与sensor增益保持线性关系是AE曝光量分配的前提,即认为曝光量一定的情况下,曝光时间和sensor增益可以相互转换而保持图像亮度基本不变。比如说曝光量为4096,那么分配为曝光时间(2)*增益(2048),也可以分配为曝光时间(4)*增益(1024),这2种情况下图像亮度应该基本不变。若不满足这种线性关系,在高亮环境下,由于曝光时间很短,1行曝光时间的变化也容易使画面发生闪烁。某些sensor采用1080p@30fps的初始化序列配置时,曝光时间必须偏移0.8018行之后才与sensor增益有线性关系,因此增加了offset这个变量,它为float型变量,以行为单位,将offset设置成0.8018,AE算法内部即可完成偏移处理。一般sensor的曝光时间和增益不存在这种偏移关系,需在cmos.c中将该值配为0。
规定这3种精度类型,可以以统一的接口形式对接绝大部分sensor。
【相关数据类型及接口】
ot_isp_sensor_register
AE¶
ot_isp_ae_mode:定义自动曝光的模式。
ot_isp_ae_strategy:定义AE曝光策略模式。
ot_isp_ae_delay:定义AE延时属性。
ot_isp_ae_range:定义曝光时间或增益的最大值和最小值。
ot_isp_antiflicker_mode:定义抗闪模式。
ot_isp_antiflicker:定义抗闪属性。
ot_isp_subflicker:定义ISP图像亚抗闪属性。
ot_isp_fswdr_mode:定义ISP FSWDR运行模式。
ot_isp_ae_attr:定义自动曝光属性。
ot_isp_me_attr:定义手动曝光属性。
ot_isp_exposure_attr:定义ISP曝光属性。
ot_isp_wdr_exposure_attr:定义WDR模式下的曝光属性。
ot_isp_hdr_exposure_attr:定义HDR模式下的曝光属性。
ot_isp_smart_exposure_attr:定义智能模式下的曝光属性。
ot_isp_fast_face_ae_attr: 定义人脸快速收敛算法的曝光属性。
ot_isp_ae_route_node:定义AE分配路线节点属性。
ot_isp_ae_route:定义AE曝光分配策略属性。
ot_isp_ae_route_ex_node:定义AE扩展分配路线节点属性。
ot_isp_ae_route_ex:定义AE曝光分配策略扩展属性。
ot_isp_exp_info:定义ISP曝光内部状态信息。
ot_isp_prior_frame:定义WDR模式下的优先帧。
ot_isp_ae_mode¶
【说明】
定义自动曝光的模式。
【定义】
typedef enum {
OT_ISP_AE_MODE_SLOW_SHUTTER = 0,
OT_ISP_AE_MODE_FIX_FRAME_RATE = 1,
OT_ISP_AE_MODE_BUTT
} ot_isp_ae_mode;
【成员】
【注意事项】
自动降帧模式是指自动曝光调节时会优先增大曝光时间来尽量减小增益。当sensor增益达到用户设置的最大值时,自动曝光调节会逐渐降帧率并延长曝光时间,持续到曝光时间等于自动曝光的最大时间为止。低照度环境下噪声较小但帧率会降低。
固定帧率模式是指自动曝光调节时保持帧率不变,低照度环境下噪声会较大。
Built-In WDR模式和多帧合成WDR模式支持降帧。若是客户自己对接的Line-WDR sensor,支持自动降帧处理需要修改cmos.c。
【相关数据类型及接口】
无
ot_isp_ae_strategy¶
【说明】
定义AE曝光策略模式。
【定义】
typedef enum {
OT_ISP_AE_EXP_HIGHLIGHT_PRIOR = 0,
OT_ISP_AE_EXP_LOWLIGHT_PRIOR = 1,
OT_ISP_AE_STRATEGY_MODE_BUTT
} ot_isp_ae_strategy;
【成员】
【注意事项】
线性模式下,AE算法默认曝光策略为高光优先,尽量避免画面过曝,但在宽动态场景时,暗处亮度较低。此时若主要关注暗处区域,可采用低光优先模式,但亮处容易过曝。
WDR模式下,AE算法默认使用低光优先模式。在低光优先模式和高光优先模式都是控制长帧曝光,手动模式曝光时间、最大最小曝光时间、AE_Route、AE_Route_Ex中曝光时间参数影响长帧曝光时间。
【相关数据类型及接口】
无
ot_isp_ae_delay¶
【说明】
定义AE延时属性。
【定义】
typedef struct {
td_u16 black_delay_frame;
td_u16 white_delay_frame;
} ot_isp_ae_delay;
【成员】
【注意事项】
black_delay_frame/white_delay_frame设置越大,在AE调节步长相同的情况下,调节至目标亮度需要越长时间。
人眼对于过曝比较敏感,建议white_delay_frame要设置得比black_delay_frame小一些。
固定降帧时,若帧率较低,black_delay_frame/white_delay_frame要做出相应调整,建议不要设置过大,否则AE收敛时间会较长。
【相关数据类型及接口】
无
ot_isp_ae_range¶
【说明】
定义曝光时间或增益的最大值和最小值。
【定义】
typedef struct {
td_u32 max;
td_u32 min;
} ot_isp_ae_range;
【成员】
【注意事项】
最小值不能大于最大值。
【相关数据类型及接口】
无
ot_isp_antiflicker_mode¶
【说明】
定义抗闪模式。
【定义】
typedef enum {
OT_ISP_ANTIFLICKER_NORMAL_MODE = 0x0,
OT_ISP_ANTIFLICKER_AUTO_MODE = 0x1,
OT_ISP_ANTIFLICKER_MODE_BUTT
} ot_isp_antiflicker_mode;
【成员】
【注意事项】
OT_ISP_ANTIFLICKER_NORMAL_MODE为普通抗闪模式,曝光时间可以根据亮度进行调节,最小曝光时间固定为1/120 sec(60Hz)或1/100 sec(50Hz),不受曝光时间最小值的限制。
有灯光的环境:曝光时间可与光源频率相匹配,能够防止图像闪烁。
高亮度的环境:亮度越高,要求曝光时间就最短。而普通抗闪模式的最小曝光时间不能匹配光源频率,产生过曝。
OT_ISP_ANTIFLICKER_AUTO_MODE为自动抗闪模式,曝光时间可以根据亮度进行调节,最小曝光时间可达到sensor的最小曝光时间。与普通抗闪模式的差别主要在高亮度的环境体现。
高亮度的环境:最小曝光时间可以达到sensor的最小曝光时间,能够有效抑制过曝,但此时抗闪失效。
【相关数据类型及接口】
无
ot_isp_antiflicker¶
【说明】
定义抗闪属性。
【定义】
typedef struct {
td_bool enable;
td_u8 frequency;
ot_isp_antiflicker_mode mode;
} ot_isp_antiflicker;
【成员】
【注意事项】
抗闪开启后曝光时间会受到最大/最小曝光时间的限制,若最小抗闪时间大于最大曝光时间,那么开启抗闪后曝光时间将被限制为最大曝光时间。开启抗闪时,AE Route中各节点的Again、DGain、ISPDGain参数至少有一个需小于对应参数范围的上限,避免特定场景下无法进行补偿导致图像闪烁。
【相关数据类型及接口】
ot_isp_subflicker¶
【说明】
定义ISP图像亚抗闪属性。
【定义】
typedef struct {
td_bool enable;
td_u8 luma_diff; /
} ot_isp_subflicker;
【成员】
【注意事项】
强制抗闪模式时,最小曝光时间固定为1/120 s(60Hz)或1/100 s(50Hz),在某些场景(如室内对准室外窗户的背光场景)画面可能会过曝严重,但不抗闪画面工频闪又比较厉害。在这种情况下引入亚抗闪模式是为了取得过曝与闪烁之间的平衡。在强制抗闪模式下,当亚抗闪功能生效时,若画面亮度小于(ae_compensation + luma_diff),那么曝光时间仍会固定为最小抗闪时间1/120 s (60Hz)或1/100 s (50Hz)以防止图像闪烁。若画面亮度大于(ae_compensation + luma_diff),则取消抗闪,调整画面目标亮度为(ae_compensation + luma_diff),通过引入一定程度的画面闪烁来避免画面过曝严重。
注意:非背光场景luma_diff较小时(如小于10)可能会导致曝光时间在最小抗闪点左右来回变化,导致画面轻微闪烁,建议设置该值不小于20。实际上,若luma_diff设置较小,背光场景下相当于取消了抗闪功能,与自动抗闪模式下的效果相近,达不到亚抗闪的目的,因此该值只有设置一个稍大些的值才有意义。
只有在满足打开抗闪、强制抗闪模式且抗闪频率值不等于0的前提下,亚抗闪功能才能生效。
自动抗闪模式不支持亚抗闪。在自动抗闪模式下打开亚抗闪,再将其切换到抗闪模式时,在极亮场景时可能有一帧过曝。
【相关数据类型及接口】
无
ot_isp_fswdr_mode¶
【说明】
定义ISP FSWDR运行模式。
【定义】
typedef enum {
OT_ISP_FSWDR_NORMAL_MODE = 0x0,
OT_ISP_FSWDR_LONG_FRAME_MODE = 0x1,
OT_ISP_FSWDR_AUTO_LONG_FRAME_MODE = 0x2,
OT_ISP_FSWDR_MODE_BUTT
} ot_isp_fswdr_mode;
【成员】
长帧模式,此时AE将短帧曝光时间设置为最小值,长帧曝光时间接近1帧所允许的最大值,合成模块只输出长帧数据,可用于优化弱宽动态场景或低照度时的图像质量。 |
|
自动长帧模式,此时AE短帧曝光时间不会超过sensor限制的长帧模式下短帧最大曝光时间,在曝光量超过sensor设置的阈值时,自动切换为长帧模式,合成模块只输出长帧数据。 |
【注意事项】
长帧模式及自动长帧模式仅在行模式WDR长帧优先模式下有效,并且为了保证图像质量,WDR模块的运动检测及长短帧融合阈值均为自动配置,不支持手动配置。在线将模式切换到WDR模式,默认为正常FSWDR模式。
长帧模式下,如果WDR模块开启FUSION模式,可能会导致亮区颜色偏粉或变灰,因此不推荐长帧模式与WDR模块FUSION模式同时开启。
长帧模式和自动长帧模式仅支持在优先帧为长帧且增益分开配置不使能的情况下使用。
长帧模式和WDR模式切换时,如果打开dehaze,由于画面亮度变化,dehaze使用前一帧统计信息,可能会导致切换时画面呈现由暗变亮的过渡过程。
长帧模式和WDR模式切换时,在目前WDR合成模块的框架下,画面会出现亮度变化(长帧模式切换到WDR模式时画面会变暗,反之变亮),曝光比越大现象越明显。此外,ISP中存在时域依赖的模块(如DRC,LDCI, Dehaze),有可能因此引起画面闪烁,所以不建议在大曝光比时进行长帧模式和WDR模式的切换。
【相关数据类型及接口】
无
ot_isp_ae_attr¶
【说明】
定义自动曝光属性。
【定义】
typedef struct {
/* base parameter */
ot_isp_ae_range exp_time_range;
ot_isp_ae_range a_gain_range;
ot_isp_ae_range d_gain_range;
ot_isp_ae_range ispd_gain_range;
ot_isp_ae_range sys_gain_range;
td_u32 gain_threshold;
td_u8 speed;
td_u16 black_speed_bias;
td_u8 tolerance;
td_u8 compensation;
td_u16 ev_bias;
ot_isp_ae_strategy ae_strategy_mode;
td_u16 hist_ratio_slope;
td_u8 max_hist_offset;
ot_isp_ae_mode ae_mode;
ot_isp_antiflicker antiflicker;
ot_isp_subflicker subflicker;
ot_isp_ae_delay ae_delay_attr;
td_bool manual_exp_value;
td_u32 exp_value;
ot_isp_fswdr_mode fswdr_mode;
td_bool wdr_quick;
td_u16 iso_cal_coef;
} ot_isp_ae_attr;
【成员】
【注意事项】
自动模式下,更改手动曝光属性的值不会生效。
自动曝光的最大最小时间及增益。
可根据不同的场景对曝光时间及增益进行限定,如有高速运动物体场景可限定最大曝光时间值为较小值,这样可减轻运动物体拖影现象。
注意:
为了防止图像过曝区域颜色不饱和,ISP内部会根据sensor黑电平自动修正Isp_dgain值,因此即使限制Isp_dgain最大值为1024,Isp_dgain实际生效值仍会大于1024。
自动曝光的系统增益
非扩展路径下,若(sensor模拟增益最小值*sensor数字增益最小值*ISP数字增益最小值)小于系统增益最小值,则AE算法内部计算时最小增益会被限制到系统增益的最小值。若(sensor模拟增益最大值*sensor数字增益最大值*ISP数字增益最大值)大于系统增益最大值,则AE算法内部计算时最大增益会被限制到系统增益的最大值。推荐通过设置系统增益的最大、最小值进行增益限制,分别限制sensor模拟增益、sensor数字增益和ISP数字增益时,若把较高精度的ISP数字增益限制到1倍,容易导致闪烁。
扩展路径下,采用系统增益的最大/最小值结合曝光时间的范围来限制曝光量的范围,sensor模拟增益、sensor数字增益及ISP数字增益不直接受系统增益的影响。实际上,AE算法内部利用系统增益来计算最大/最小曝光量,而并不是直接限制某项增益的值。比如说系统增益最大值限制为1倍,但sensor模拟增益的最小值限制为2倍,则实际生效的结果以sensor模拟增益的限制为准,sensor数字增益及ISP数字增益的限制也同理。手动模式下,系统增益不起作用,不对某项增益的值进行限制。
自动降帧时的系统增益门限值
在SLOW_SHUTTER模式下,当系统增益达到所设置的门限值时,系统将自动进入SLOW_SHUTTER模式。
speed用于设定自动曝光时的收敛速度,该值越大曝光的收敛速度越快,但也会导致收敛过程中出现反复震荡。
black_speed_bias用于设定画面由暗到亮AE调节速度的偏差值。默认speed下,画面从亮到暗的速度会快于画面从暗到亮的速度,若想双方向的AE调节速度差不多,可以调高black_speed_bias。
亮度补偿属性compensation用于调节曝光的目标亮度。曝光亮度补偿值越大则图像亮度越高。
曝光偏差属性ev_bias用于在特殊场景下对画面的目标亮度进行微调,也可认为是更高精度的亮度补偿值,通过调节该值来改变画面目标亮度,真实生效的AE目标亮度为 compensation * ev_bias /1024。compensation不变时,该值越大则图像亮度越高。
曝光容忍偏差属性tolerance用于调节曝光对环境的灵敏度,曝光容忍偏差值越大则曝光越不敏感,且可能导致同一目标亮度值多次调节得到的亮度差异越大,所以该属性推荐不能设定过大。尤其当目标亮度较低时,tolerance较大,最终画面收敛亮度可能会有明显差异。通过改变Ev_bias对画面目标亮度进行微调时,若tolerance较大,过小的Ev_bias变化量可能会看不出调整效果。
曝光策略属性ae_strategy_mode用于选择对高光优先或低光优先的曝光策略。高光优先意味着对高光敏感,尽量避免画面过曝。低光优先意味着对低光敏感,尽量看清楚暗处区域,不管画面是否过曝。默认的曝光策略是高光优先,用户可根据场景需要进行调整。
hist_ratio_slope用于设定感兴趣区域的权重。若是高光优先曝光模式,则该值设置的是高光区域的权重,该值越大,则意味着对高光区域越敏感。反之,若是低光优先模式,则该值设置的是低光区域的权重,该值越大,则意味着对暗处区域越敏感,建议hist_ratio_slope的值设置不要超过0x100。高光优先曝光模式下,如果该值过大,只要画面中有一小部分过曝区域,AE算法就会认为画面亮度远大于目标亮度,这样曝光量就会不断往下调,导致画面变得很黑,同时画面中的过曝区域也在快速变小,达到某个程度的话AE算法又会认为画面亮度比目标亮度小了,曝光量又会往上调,如此反复出现来回调的现象,看起来像是画面闪烁。类似的,在低光优先模式下,如果AE目标亮度设置得比较低,若画面中有黑色物体来回移动,对画面亮度也会有较大影响,此时调低曝光调整速度和提高容忍偏差tolerance能够缓解该问题。
自动曝光时,可设定感兴趣区域对统计平均值影响的最大程度max_hist_offset。该值相当于对提高hist_ratio_slope时增加的权重做限制,若该值为0,无论hist_ratio_slope多大,也不会对高光或低光区域做特殊处理,此时的统计平均值就是原始值。通过合理设置该值,可以保证任何场景AE稳定后画面平均亮度都在一定范围内,在高光优先曝光模式下,如果该值设置较大,在对比度稍高一些的场景,如睛天室外场景,有天空有树木,则可能导致整体画面亮度偏低,因为此时优先保证了亮区天空的效果,通过限制该值从而限制对亮区的倾斜程度可以解决该问题。
曝光策略切换时,最好同时更新hist_ratio_slope和max_hist_offset的值,否则这2个值会采用默认配置,效果可能与预期不符。
在做强光抑制方案时,例如在RGBIR模式下,建议设置成高光优先曝光,通过降低AE目标亮度,同时适当设置hist_ratio_slope和max_hist_offset为较大值来抑制强光,暗区则可以通过使能DRC来看清楚。低光优先则可以用于实现非指定区域的背光补偿。
AE曝光控制类型为自动时,可设定曝光模式ae_mode。该值可设定为慢快门模式(SLOW_SHUTTER)或固定帧率模式。慢快门模式通常用于低照度场景下进行自动降帧,以减少画面噪声。
抗闪属性结构体antiflicker可用于设定抗闪使能,抗闪频率和抗闪模式等属性。FSWDR模式下,长帧抗闪有效,在优先帧为短帧且增益分开配置时,长短帧抗闪都有效。由于随着曝光比的变化,短帧曝光时间的最大值会受到限制,建议FSWDR模式使用自动抗闪模式。
注意:部分sensor WDR模式下只曝光一次,曝光时间只有短帧有效,因此抗闪及亚抗闪效果并不能达到预期。
亚抗闪属性结构体subflicker可用于设定亚抗闪使能及抗闪程度属性。若有自动光圈,建议关闭亚抗闪功能。
AE曝光控制类型为自动时,可设定AE延时生效属性结构体ae_delay_attr。该值的合理设置可提高画面亮度的稳定性,防止快速运动物体经过导致画面亮度发生变化。低码率设置时可适当增加该值,以避免AE调节时出现块效应。
用户可以通过将manual_exp_value置为TD_TRUE,手动设置曝光量exp_value来屏蔽AE算法的曝光量调整部分,只用到曝光量分配部分。exp_value的值会受到最大、最小曝光量的限制。最大、最小曝光量分别对应最大、最小曝光时间与增益的乘积。
WDR模式下,优先帧为长帧时,exp_time_range设置的是长帧的曝光时间范围,优先帧为短帧时,exp_time_range设置的是短帧的曝光时间范围。
FSWDR运行模式改变时,需要相应修改cmos.c中的以下回调函数:cmos_long_frame_mode_set,cmos_get_ae_default,cmos_fps_set,cmos_get_inttime_max,以保证长、短帧曝光时间在合理范围内。正常WDR和长帧模式切换时,会回调cmos_get_ae_default,更新曝光时间最大/最小值,增益最大/最小值,光圈最大/最小值和compensation等参数,同时,AE内部会将hist_ratio_slope和max_hist_offset更新为算法默认值。需要注意的是,此时曝光比相关设置不会更新,仍会保持上一次的值。另外,长帧模式打开时,DRC强度会逐渐收敛至Auto目标值。客户可以根据需要,在切换完成后调用MPI接口修改参数。
注意:平滑切换的前提是切换前/后短帧曝光量与长帧曝光量相等。当曝光比较大时,由于正常WDR模式会限制增益,而长帧模式为了保证低照度效果会放开增益限制,可能会导致切换前/后短帧曝光量与长帧曝光量不等,这样切换就会有几帧突然之间变亮或者变暗,属于正常现象。若要避免这种现象,可以在切换完成之后再放开增益限制。
长帧模式仅在行模式WDR下才有效,帧模式WDR把曝光比设置为1:1,关闭运动检测,即可达到与行模式WDR长帧模式一样的效果。建议非行模式WDR统一将fswdr_mode设置为OT_ISP_FSWDR_NORMAL_MODE。
行模式WDR只曝光一次的sensor不支持长帧模式。
【相关数据类型及接口】
ot_isp_me_attr¶
【说明】
定义手动曝光属性。
【定义】
typedef struct {
ot_op_mode exp_time_op_type;
ot_op_mode a_gain_op_type;
ot_op_mode d_gain_op_type;
ot_op_mode ispd_gain_op_type;
td_u32 exp_time;
td_u32 a_gain;
td_u32 d_gain;
td_u32 isp_d_gain;
} ot_isp_me_attr;
【成员】
【注意事项】
手动模式下,手动曝光时间和增益的值会受到自动模式下最大/最小曝光时间和增益的限制。
手动曝光使能参数有效时,必须设置相应的手动曝光参数,若不设置,则采用系统默认值。
增益单位为10bit小数精度的倍数,即1024代表1倍。
若曝光参数设置超出最大(小)值,将使用sensor支持的最大(小)值代替。
【相关数据类型及接口】
ot_isp_exposure_attr¶
【说明】
定义ISP曝光属性。
【定义】
typedef struct {
td_bool bypass;
ot_op_mode op_type;
td_u8 ae_run_interval;
td_bool hist_stat_adjust;
td_bool ae_route_ex_valid;
ot_isp_me_attr manual_attr;
ot_isp_ae_attr auto_attr;
ot_isp_prior_frame prior_frame;
td_bool ae_gain_sep_cfg;
td_bool advance_ae;
} ot_isp_exposure_attr;
【成员】
建议该值设置不要大于2,否则AE调节速度会受到影响。WDR模式时,该值建议设置为1,这样AE收敛会更加平滑。该值默认为1。 |
|
【注意事项】
AE bypass为TD_TRUE时,AE模块被bypass,任何AE配置都不会对图像亮度产生影响。ot_isp_ae_result保持为AE bypass前一帧的值。
SDK提供的AE主要基于全局1024段直方图信息进行亮度调整,正常场景1024段直方图只统计Gb或Gr分量。hist_stat_adjust为TD_TRUE时,若进入了大面积单色场景(如大面积红色或蓝色),AE算法会根据全局平均值信息对1024段直方图统计方式进行调整,把R分量或B分量也考虑进来,如此可以防止大面积红色或蓝色场景画面亮度偏高。hist_stat_adjust为TD_FALSE时,AE算法不会调整1024段直方图统计方式。红外场景建议将hist_stat_adjust设置为TD_FALSE。
WDR/线性模式切换时,ae_run_interval会重置为1,用户可以在切换完成后,根据需要修改该值。
ae_gain_sep_cfg仅在2to1WDR模式下配置生效。
手动模式不支持长短帧增益分开分配。
Advance AE目前可在正常FSWDR模式下生效(长帧模式不生效),使能advance_ae,可使图像暗区和亮区的曝光更加合理、准确,当场景发生亮暗比例变化时,图像亮暗区曝光更加稳定。
【相关数据类型及接口】
ot_isp_wdr_exposure_attr¶
【说明】
定义WDR模式下的曝光属性。
【定义】
typedef struct { ot_op_mode exp_ratio_type;
td_u32 exp_ratio[OT_ISP_EXP_RATIO_NUM];
td_u32 exp_ratio_max;
td_u32 exp_ratio_min;
td_u16 tolerance;
td_u16 speed;
td_u16 ratio_bias;
td_u16 high_light_target;
td_u16 exp_coef_min;
} ot_isp_wdr_exposure_attr;
【成员】
【注意事项】
建议tolerance不要设置为太大的值,避免曝光比不能正确的反映场景动态范围变化。
针对某些对短帧最大曝光时间有限制的sensor,曝光比较小时,长帧最大曝光时间较短,图像动态范围及噪声表现较差,导致自动曝光比计算不准确,此时建议限制最小曝光比,保证长帧最大曝光时间至少达到3ms。
建议speed不要设置小于0x8,避免某些场景由于计算精度不足导致曝光比调节太慢甚至不调。speed过大可能导致曝光比变化太快,造成画面亮度出现振荡。
建议手动模式下exp_ratio不要设置大于0x400。如果曝光比大于0x400,在较亮的超宽动态场景,适当调高曝光比会优化长帧图像噪声表现。但是在较暗或低宽动态场景,如果曝光比过大,由于短帧最大曝光时间会被压缩,导致图像噪声表现会变差,而且会出现明显的噪声不连续,运动表现也会变差。
使能Advance ae,当曝光比达到设置的最大曝光比,图像过曝程度仍未达到目标值时,会适当降低AE亮度目标值,以换取图像整体过曝程度的降低。通过合理设置exp_coef_min,可使 AE亮度目标值最多可以下降到compensation * exp_coef_min/1024。
【相关数据类型及接口】
ot_isp_hdr_exposure_attr¶
【说明】
定义HDR模式下的曝光属性。
【定义】
typedef struct {
ot_op_mode exp_hdr_lv_type;
td_u32 exp_hdr_lv;
td_u32 exp_hdr_lv_max;
td_u32 exp_hdr_lv_min;
td_u32 exp_hdr_lv_weight;
} ot_isp_hdr_exposure_attr;
【成员】
【相关数据类型及接口】
【注意事项】
WDR-HDR模式是指前端ISP配置使用WDR多帧融合模式进行数据生成,linear-HDR模式是指前端ISP配置使用线性模式进行数据生成。
ot_isp_smart_exposure_attr¶
【说明】
定义智能模式下的曝光属性。
【定义】
typedef struct {
td_bool enable;
td_bool ir_mode;
ot_op_mode smart_exp_type;
td_u16 exp_coef;
td_u8 luma_target;
td_u16 exp_coef_max;
td_u16 exp_coef_min;
td_u8 smart_interval;
td_u8 smart_speed;
td_u16 smart_delay_num;
} ot_isp_smart_exposure_attr;
【成员】
【注意事项】
建议luma_target设置范围为[90,130],如果设置的值过于不合理,会导致曝光调整结果与智能检测结果相互影响,出现图像亮度振荡。
建议exp_coef_max值不超过0x1000,否则在人脸很暗的场景亮区会出现大面积过曝,而损失过多亮区细节。建议exp_coef_min值不超过0x100,否则在人脸很亮的场景亮区会出现暗区过黑,而损失过多暗区细节。
智能AE运行间隔smart_interval受到AE自身运行间隔ae_run_interval影响,如ae_run_interval为2,smart_interval为3,则智能AE间隔实际为两者乘积,每六帧运行一次。
智能AE运行间隔smart_interval建议与智能检测结果保持一致,如当前Sensor帧率为25帧,智能检测结果帧率为8帧,则建议运行间隔为3。
ss_mpi_isp_set_smart_info接口调用需要和智能检测帧率保持一致,如智能检测结果帧率为8帧,则每秒调用8次ss_mpi_isp_set_smart_info。
调整智能运行间隔smart_interval与智能调整速度smart_speed均可以调整收敛速度,当运行间隔较小,调整速度过大时,图像可能会出现亮度震荡,此时可适当降低运行速度。
智能AE延迟恢复帧数smart_delay_num可以调整人离开场景后的曝光恢复时间,该值设置过小时在人形人脸信息出现漏检的情况可能会导致图像亮度震荡,另外,适当设置较大值可以避免人连续进出的场景下图像亮度反复调节。
当人脸模型不可用,只有人形模型可用时,普通模式下计算的曝光系数不会低于1倍,红外模式下计算的曝光系数不会高于1倍。
场景中过曝比例很大的时候可能会导致人脸检测模型不准,算法此时会自适应的关掉smart ae功能,如果需要常开smart ae功能,人脸模型需要使能且常开ir mode。
【相关数据类型及接口】
ot_isp_fast_face_ae_attr¶
【说明】
定义人脸快速收敛算法的曝光属性。
【定义】
typedef struct {
td_bool enable;
td_u8 face_tolerance;
td_u8 face_comp;
td_u8 stat_delay_num;
td_u8 speed;
td_u16 face_delay_num;
} ot_isp_fast_face_ae_attr;
【成员】
【注意事项】
由于快速人脸收敛算法调节导致曝光量变化较大可能引起后端模块闪烁。建议在使用该算法时将DRC、LDCI模块关闭。
画面亮度出现震荡时建议将tolerance放大。
enable只有当该值与传入的人脸框信息中的enable同时使能时人脸快速收敛AE算法才能生效。
AE算法在配置sensor时一般会延后几帧生效,大多数sensor的延时都是帧。该值与sensor驱动中的delay时间相对应。
人脸快速收敛算法延迟恢复帧数face_delay_num可以调整人离开场景后的曝光恢复时间,该值设置过小时在人脸信息出现漏检的情况可能会导致图像亮度震荡,另外,适当设置较大值可以避免人连续进出的场景下图像亮度反复调节。
【相关数据类型及接口】
ot_isp_ae_route_node¶
【说明】
定义AE分配路线节点属性。
【定义】
typedef struct {
td_u32 int_time;
td_u32 sys_gain;
ot_isp_iris_f_no iris_fno;
td_u32 iris_fno_lin;
} ot_isp_ae_route_node;
【成员】
【注意事项】
节点的曝光量是曝光时间、增益和光圈的乘积,节点曝光量必须单调递增,即后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。在计算曝光量时,光圈F值要等效成一个增益,公式如下:等效增益FNO = 1 <<OT_ISP_IRIS_F_NO_XX_XX。由此可知F32.0对应增益1,F22.0对应增益2,F16.0对应增益4,以此类推,F1.0对应增益1024。
可以通过设置结构体ot_isp_piris_attr中的fno_ex_valid来决定实际生效的AE route节点光圈值采用iris_fno或iris_fno_lin。fno_ex_valid为TD_TRUE时采用高精度的iris_fno_lin,默认采用iris_fno。iris_fno会受到ot_isp_piris_attr中max_iris_fno_target / min_iris_fno_target的限制,iris_fno_lin会受到ot_isp_piris_attr中max_iris_fno_target_linear / min_iris_fno_target_linear的限制。另外,iris_fno和iris_fno_lin还会受到ot_isp_ae_sensor_default中max_iris_fno / min_iris_fno的限制,所以对接P-Iris时要在cmos.c中给max_iris_fno / min_iris_fno赋合适的值。
不支持设置等曝光量节点。
为了保证曝光节点的曝光量,曝光节点的一个分量发生限制时,会对其他未达到最大值的分量进行调整,实际生效路径可能与设定路径不一致。为了防止曝光量溢出,如果光圈分量使能,则同一节点的曝光时间与增益的乘积最大值不能超过0x1FFFFFFFFFFFFF,如果光圈分量不使能,则同一节点的曝光时间与10bit精度系统增益的乘积最大值不能超过0x7FFFFFFFFFFFFFFF。
如果相邻节点的曝光量增加,则应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如增益分量增加,那么该段路线的分配策略是增益优先。
光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制。
针对P-Iris,建议将第一个节点的曝光时间、增益和光圈F值都设置为相应的最小目标值,最后一个节点的曝光时间、增益和光圈F值都设置为相应的最大目标值。
【相关数据类型及接口】
ot_isp_ae_route¶
【说明】
定义AE曝光分配策略属性。
【定义】
typedef struct {
td_u32 total_num;
ot_isp_ae_route_node route_node[OT_ISP_AE_ROUTE_MAX_NODES];
} ot_isp_ae_route;
【成员】
【注意事项】
最大支持16个节点,每个节点有曝光时间、增益、光圈三个分量,增益包含sensor模拟增益、sensor数字增益、ISP数字增益。
用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
针对DC-Iris和手动光圈镜头,默认AE分配策略是曝光时间优先,其次分配增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。在DC_Iris调节时,曝光量调节并不会参考AE_ROUTE,因此实际生效的AE_ROUTE不会更新。
针对P-Iris,默认AE分配策略是首先调节光圈,将光圈调至最大后调节曝光时间,最后再分配增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
在线进行DC-Iris和P-Iris切换,AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置AE route。默认分配策略的AE route参数与切换时的AE曝光时间最小/最大值,增益最大/最小值和光圈分量最大/最小值相对应。注意:由于cmos.c也可以设置AE分配路线,若要在线进行DC-Iris和P-Iris切换,请不要在cmos.c中给iris_type赋值,这样AE算法设置的光圈类型就会传递到cmos.c中,此时回调cmos_get_ae_default或cmos_fps_set等函数,才能得到与光圈类型相匹配的AE route。
【相关数据类型及接口】
ot_isp_ae_route_ex_node¶
【说明】
定义AE扩展分配路线节点属性。
【定义】
typedef struct {
td_u32 int_time;
td_u32 a_gain;
td_u32 d_gain;
td_u32 isp_d_gain;
ot_isp_iris_f_no iris_fno;
td_u32 iris_fno_lin;
} ot_isp_ae_route_ex_node;
【成员】
【注意事项】
节点的曝光量是曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈的乘积,节点曝光量必须单调递增,即后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。在计算曝光量时,光圈F值要等效成一个增益,公式如下:等效增益FNO = 1 << OT_ISP_IRIS_F_NO_XX_XX。由此可知F32.0对应增益1,F22.0对应增益2,F16.0对应增益4,以此类推,F1.0对应增益1024。
可以通过设置结构体ot_isp_piris_attr中的fno_ex_valid来决定实际生效的扩展AE route节点光圈值采用iris_fno或iris_fno_lin。fno_ex_valid为TD_TRUE时采用高精度的iris_fno_lin,默认采用iris_fno。iris_fno会受到ot_isp_piris_attr中max_iris_fno_target/ min_iris_fno_target的限制,iris_fno_lin会受到ot_isp_piris_attr中max_iris_fno_target/ min_iris_fno_target的限制。另外,iris_fno和iris_fno_lin还会受到ot_isp_ae_sensor_default中max_iris_fno/ min_iris_fno的限制,所以对接P-Iris时要在cmos.c中给max_iris_fno/ min_iris_fno赋合适的值。
不支持设置等曝光量节点。
为了保证曝光节点的曝光量,曝光节点的一个分量发生限制时,会对其他未达到最大值的分量进行调整,实际生效路径可能与设定路径不一致。
如果相邻节点的曝光量增加,则应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如sensor模拟增益分量增加,那么该段路线的分配策略是sensor模拟增益优先。
光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制。
针对P-Iris,建议将第一个节点的曝光时间、增益和光圈F值都设置为相应的最小目标值,最后一个节点的曝光时间、增益和光圈F值都设置为相应的最大目标值。
节点的曝光时间不能设置为0,也不能设置过小,导致以us为单位的曝光时间对应的曝光行数为0,否则可能产生异常。
节点增益的范围相比非扩展AE route有所缩小。此外,为防止曝光量溢出,sensor模拟增益、sensor数字增益和ISP数字增益的乘积等效为的10bit精度系统增益不能大于0xFFFFFFFF。如果光圈分量使能,则同一节点的曝光时间与10bit精度系统增益的乘积最大值不能超过0x1FFFFFFFFFFFFF,如果光圈分量不使能,则同一节点的曝光时间与10bit精度系统增益的乘积最大值不能超过0x7FFFFFFFFFFFFFFF。
若某段路线需要设置ISP数字增益优先,请注意不要把ISP数字增益用满,因为ISP数字增益还有弥补分配精度的作用,建议至少留下2倍ISP数字增益的余量,供弥补精度使用,即分配路线中节点的Isp_d_gain不要大于max_Isp_d_gain/2。
开启增益分开配置功能时,曝光节点中的ISP数字增益在实际分配时可能有部分被分配到WDRGain。
【相关数据类型及接口】
ot_isp_ae_route_ex¶
【说明】
定义AE曝光分配策略扩展属性。
【定义】
typedef struct {
td_u32 total_num;
ot_isp_ae_route_ex_node route_ex_node[OT_ISP_AE_ROUTE_EX_MAX_NODES];
} ot_isp_ae_route_ex;
【成员】
【注意事项】
最大支持16个节点,每个节点有曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈五个分量。
用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
针对DC-Iris和手动光圈镜头,默认AE扩展分配策略是曝光时间优先,再分配sensor模拟增益、sensor数字增益、最后分配ISP数字增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。在DC_Iris调节时,曝光量调节并不会参考AE_ROUTE_EX,因此实际生效的AE_ROUTE_EX不会更新。
针对P-Iris,默认AE扩展分配策略是首先调节光圈,将光圈调至最大后调节曝光时间,最后再分配sensor模拟增益、sensor数字增益和ISP数字增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
在线进行DC-Iris和P-Iris切换,扩展AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置扩展AE route。默认分配策略的AE route参数与切换时的AE曝光时间最小/最大值,增益最大/最小值和光圈分量最大/最小值相对应。注意:由于cmos.c也可以设置AE分配路线,若要在线进行DC-Iris和P-Iris切换,请不要在cmos.c中给iris_type赋值,这样AE算法设置的光圈类型就会传递到cmos.c中,此时回调cmos_get_ae_default或cmos_fps_set等函数,才能得到与光圈类型相匹配的扩展AE route。
【相关数据类型及接口】
ot_isp_exp_info¶
【说明】
定义ISP曝光内部状态信息。
【定义】
typedef struct {
td_u32 exp_time;
td_u32 short_exp_time;
td_u32 median_exp_time;
td_u32 long_exp_time;
td_u32 a_gain;
td_u32 d_gain;
td_u32 a_gain_sf;
td_u32 d_gain_sf;
td_u32 isp_d_gain;
td_u32 exposure;
td_bool exposure_is_max;
td_s16 hist_error;
td_u32 ae_hist1024_value[OT_ISP_HIST_NUM];
td_u8 ave_lum;
td_u32 lines_per500ms;
td_u32 piris_fno;
td_u32 fps;
td_u32 iso;
td_u32 isosf;
td_u32 iso_calibrate;
td_u32 ref_exp_ratio;
td_u16 wdr_exp_coef;
td_u32 first_stable_time;
td_u32 quick_star_iso;
ot_isp_ae_route ae_route;
ot_isp_ae_route_ex ae_route_ex;
ot_isp_ae_route ae_route_sf;
ot_isp_ae_route_ex ae_route_sf_ex;
} ot_isp_exp_info;
【成员】
统计信息,AE的目标亮度值与实际值的差,该值为正表示当前期望的亮度信息大于实际的亮度信息,该值为负表示期望的亮度信息小于实际的亮度信息。 |
|
ae_hist1024_value [OT_ISP_HIST_NUM] |
|
参考曝光比,用于估计当前场景的动态范围,会受到ot_isp_wdr_exposure_attr中tolerance和speed等值的影响。 |
|
基于原始亮度目标值调整的曝光系数,仅在使能advance ae时有效,值越小,图像整体亮度越低。AE实际亮度目标值为compensation * wdr_exp_coef /1024。 |
|
不带光敏AE启动快速收敛模式下,AE快速计算出当前亮度环境下,收敛完成后大致的ISO值,用户可根据此ISO值决定是否要打开IR CUT和IR LED。 |
|
实际生效的AE route,各个节点中的曝光时间以us为单位,增益为10bit精度,光圈取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。光圈类型为DC-Iris时,节点光圈值不会对曝光量分配产生影响。 |
|
实际生效的扩展AE route,各个节点中的曝光时间以us为单位,增益为10bit精度,光圈取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。光圈类型为DC-Iris时,节点光圈值不会对曝光量分配产生影响。 |
|
实际生效的短帧AE route,各个节点中的曝光时间以us为单位,增益为10bit精度,光圈取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。光圈类型为DC-Iris时,节点光圈值不会对曝光量分配产生影响。 |
|
实际生效的短帧扩展AE route,各个节点中的曝光时间以us为单位,增益为10bit精度,光圈取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。光圈类型为DC-Iris时,节点光圈值不会对曝光量分配产生影响。 |
【注意事项】
曝光量的计算未考虑光圈状态,为曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益4者乘积,其中曝光时间的单位为曝光行数,曝光增益为6bit小数精度。若该值的精度不足以满足需求,可以根据高精度的曝光时间(us)和增益(10bit小数精度)重新计算一个曝光量。
ISP是否达到最大曝光水平的计算未考虑光圈状态。如果当前曝光时间大于等于最大目标曝光时间,当前增益大于等于最大目标增益,那么就认为ISP达到最大曝光水平,否则就未达到最大曝光水平。
图像平均亮度经过归一化处理,取值范围:[0, 255]
ispdgain有亮度补偿作用如果bypass ispdgain可能会导致画面闪烁。
fps可用于查询自动降帧状态下的实际帧率。
iso和ref_exp_ratio都可作为FSWDR模式下切换到长帧模式的参考量。不过需要注意的是,若以iso作为参考量,需要考虑到曝光比对于切换阈值的影响,避免来回在长帧模式和正常WDR模式之间切换;若以ref_exp_ratio作为参考量,长帧模式下亮区可能是过曝的,ref_exp_ratio已不能正确表示场景动态范围,这会影响到长帧模式切换回正常WDR模式的判别。线性模式下ref_exp_ratio值可作为场景动态范围参考,当前场景动态范围越小,ref_exp_ratio越小;当前场景动态范围越大,ref_exp_ratio越大。
a_gain_sf、d_gain_sf、isosf在线性模式下默认为1024、1024、100,但从其他模式切换到线性模式时保留上一次的值不更新。
当长短帧增益分开配置时,iso、isosf的结果还包含对应帧的WDRGain。
WDR模式下,优先帧为长帧时,exposure_is_max表示长帧是否达到最大曝光量,优先帧为短帧时,exposure_is_max表示短帧是否达到最大曝光量。
在增益分开配置使能时,isp_d_gain显示为两帧中的最小值。
【相关数据类型及接口】
ot_isp_prior_frame¶
【说明】
WDR模式下的优先帧。
【定义】
typedef enum {
OT_ISP_LONG_FRAME = 0,
OT_ISP_SHORT_FRAME = 1,
OT_ISP_PRIOR_FRAME_BUTT
} ot_isp_prior_frame;
【成员】
【注意事项】
优先帧为长帧时,优先根据长帧的曝光路线设置长帧的曝光参数,其中2合1WDR模式下当增益分开配置时,短帧的曝光路线会根据长帧的曝光参数进行调整,优先帧为短帧时同理。默认优先帧为长帧。
优先帧切换时,会回调cmos_get_ae_default,更新曝光时间最大/最小值,增益最大/最小值,光圈最大/最小值和AE compensation等参数,同时,AE内部会将hist_ratio_slope和max_hist_offset更新为算法默认值。客户可以根据需要,在切换完成后调用MPI接口修改参数。
线性模式下优先帧设置无效。
【相关数据类型及接口】
无
AI¶
ot_isp_iris_status:定义ISP光圈状态。
ot_isp_iris_type:定义ISP光圈类型。
ot_isp_iris_f_no:定义ISP光圈F值。
ot_isp_mi_attr:定义手动光圈属性。
ot_isp_dciris_attr:定义DC-Iris AI算法属性。
ot_isp_piris_attr:定义P-Iris属性。
ot_isp_iris_attr:定义ISP光圈属性。
ot_isp_exp_conv_param:定义不同帧率等曝光量转换相关曝光参数属性。
ot_isp_exp_param_reg:定义寄存器状态。
ot_isp_iris_status¶
【说明】
定义ISP光圈状态。
【定义】
typedef enum {
OT_ISP_IRIS_KEEP = 0,
OT_ISP_IRIS_OPEN = 1,
OT_ISP_IRIS_CLOSE = 2,
OT_ISP_IRIS_BUTT
} ot_isp_iris_status;
【成员】
【注意事项】
该值设置为OT_ISP_IRIS_OPEN或OT_ISP_IRIS_CLOSE时,光圈处于全开或全关的状态,可用于测试AI电路和驱动是否正确。OPEN和CLOSE的优先级高于AI使能和手动/自动模式,AI算法运行时,为保证其能够正常工作,需将该值设置为OT_ISP_IRIS_KEEP。
【相关数据类型及接口】
无
ot_isp_iris_type¶
【说明】
定义ISP光圈类型。
【定义】
typedef enum {
OT_ISP_IRIS_DC_TYPE = 0,
OT_ISP_IRIS_P_TYPE,
OT_ISP_IRIS_TYPE_BUTT,
} ot_isp_iris_type;
【成员】
【注意事项】
必须设置正确的光圈类型,AI算法才能正常工作。
若对接的是手动光圈镜头,可将该值设置为OT_ISP_IRIS_DC_TYPE,建议此时关闭AI使能。
由DC-Iris切换至P-Iris,需提前设置好P-Iris镜头相关参数,并且将光圈状态设置为OT_ISP_IRIS_KEEP,再进行切换。
【相关数据类型及接口】
无
ot_isp_iris_f_no¶
【说明】
定义ISP光圈F值。
【定义】
typedef enum {
OT_ISP_IRIS_F_NO_32_0 = 0,
OT_ISP_IRIS_F_NO_22_0,
OT_ISP_IRIS_F_NO_16_0,
OT_ISP_IRIS_F_NO_11_0,
OT_ISP_IRIS_F_NO_8_0,
OT_ISP_IRIS_F_NO_5_6,
OT_ISP_IRIS_F_NO_4_0,
OT_ISP_IRIS_F_NO_2_8,
OT_ISP_IRIS_F_NO_2_0,
OT_ISP_IRIS_F_NO_1_4,
OT_ISP_IRIS_F_NO_1_0,
OT_ISP_IRIS_F_NO_BUTT,
} ot_isp_iris_f_no;
【成员】
【注意事项】
针对P-Iris,AE算法根据分配路线计算曝光量时,光圈F值要等效成一个增益,公式如下:等效增益FNO = 1 << OT_ISP_IRIS_F_NO_XX_XX。由此可知F32.0对应增益1,F22.0对应增益2,F16.0对应增益4,以此类推,F1.0对应增益1024。
【相关数据类型及接口】
无
ot_isp_mi_attr¶
【说明】
定义手动光圈属性。
【定义】
typedef struct {
td_u32 hold_value;
ot_isp_iris_f_no iris_fno;
} ot_isp_mi_attr;
【成员】
【注意事项】
对接DC-Iris镜头时,若ot_isp_iris_status设置为OT_ISP_IRIS_KEEP,手动光圈使能,hold_value可用于DC-Iris的调试,此时PWM的占空比即为hold_value。
对接P-Iris镜头时,若ot_isp_iris_status设置为OT_ISP_IRIS_KEEP,手动光圈使能,iris_fno可用于P-Iris的调试,此时会控制P-Iris步进电机走到光圈F值与iris_fno最接近的位置。自动曝光模式下,P-Iris手动光圈不生效,此时若要固定光圈为某个F值,可以将max_iris_fno_target/ min_iris_fno_target设置为相同值来实现。
【相关数据类型及接口】
无
ot_isp_dciris_attr¶
【说明】
定义DC-Iris AI算法属性。
【定义】
typedef struct {
td_s32 kp;
td_s32 ki;
td_s32 kd;
td_u32 min_pwm_duty;
td_u32 max_pwm_duty;
td_u32 open_pwm_duty;
} ot_isp_dciris_attr;
【成员】
【注意事项】
当光圈关闭出现振荡时,一般意味着光圈关闭速度太快了,可以通过适当减小kp和增大min_pwm_duty来解决。
open_pwm_duty的取值要求在min_pwm_duty和max_pwm_duty之间,必须确保该值能将光圈较快的打开。
【相关数据类型及接口】
ot_isp_piris_attr¶
【说明】
定义P-Iris 属性。
【定义】
typedef struct {
td_bool step_fno_table_change;
td_bool zero_is_max;
td_u16 total_step;
td_u16 step_count;
td_u16 step_fno_table[OT_ISP_AI_MAX_STEP_FNO_NUM];
ot_isp_iris_f_no max_iris_fno_target;
ot_isp_iris_f_no min_iris_fno_target;
td_bool fno_ex_valid;
td_u32 max_iris_fno_target_linear;
td_u32 min_iris_fno_target_linear;
} ot_isp_piris_attr;
【成员】
【注意事项】
在线更换P-Iris镜头时,可以通过MPI设置该结构体,将新镜头的参数传递给AE算法和P-Iris驱动。
step_fno_table_change为只写寄存器,通过MPI获取该参数的值始终为TD_FALSE。
total_step表示P-Iris步进电机的总步数,可用于标定光圈的起始位置。step_count表示P-Iris步进电机的可用步数,一般小于total_step,因为靠近光圈关闭端的位置在将光圈孔径转换为F值时误差较大,光圈调节过程中容易出现振荡,所以通常不会利用光圈关闭端附近的那些位置。当前最多支持1024步的P-Iris镜头,若P-Iris镜头的精度很高,可调节步数超过1024,建议舍去光圈关闭端附近的那些位置。
P-Iris步进电机位置与光圈F值映射表step_fno_table一般根据镜头原厂提供的步进电机位置与光圈孔径对应关系制作。由于P-Iris的控制通过AE分配路线进行,这就要求光圈F值与曝光时间和增益有较好的线性关系,因此映射表需要较高的精度。这里用1024表示F1.0,512表示F1.4,以此类推,1表示F32.0。制作映射表时,可以根据最大光圈孔径对应的实际F值来规定映射表的最大值,也可以不用管光圈达到最大时的实际F值是多少,统一将最大光圈孔径映射为1024。同一款镜头处于不同焦距时,step_fno_table可能需要修改。
Tabell 1中步进电机位置与孔径面积对应关系是镜头原厂提供的。该款镜头步进电机总步数为93,步进电机位置为0时,光圈孔径面积最大,标称最大相对孔径为F1.4,据此规定映射表F值最大值为512。规定好最大值后,就可以计算出其他孔径面积对应的F值,因为孔径面积与F值成线性关系。比如说步进电机位置1对应的孔径面积为48.835,得到F值为(48.835/49.366)*512=506,以此类推,可以得到所有有效步进电机位置对应的F值。由下表可以看到,当镜头靠近关闭端时,孔径面积很小,与最大孔径面积相差上万倍,映射表F值精度已不足以表现出孔径面积的变化,得到的F值都为0。实际上,哪怕提高映射表精度,由于镜头关闭端附近标称孔径面积与实际孔径面积一般相差较大,得到的F值也是不正确的,建议不要使用,否则在光圈调节过程中容易出现振荡。对于该款镜头,建议制作映射表时只取前62步,因此得到镜头相关的参数如Tabell 2所示。
步进电机位置与光圈F值映射表step_fno_table的前step_count个元素才是有效的,会被AE算法计算时用到,需要保证数组座标小于step_count时,值单调递增,当数组座标为(step_count-1)时,达到光圈最大F值。通过MPI设置step_fno_table时,只有前step_count个元素才会被写入寄存器保存;通过MPI获取step_fno_table时,只有前step_count个元素才会读出有效数值,其他值为0。
光圈类型为P-Iris时,AE算法计算最大/最小曝光量会参考max_iris_fno_target/min_iris_fno_target(若fno_ex_valid为true,则参考max_iris_fno_target_linear/min_iris_fno_target_linear)的值,因此这几个值要与step_fno_table的值相匹配,即最大/最小值都在step_fno_table有效数据范围内。
在手动配置DCF光圈相关信息时,需要关闭AI。如果需要配置的最大及实际光圈值为ot_isp_iris_f_no中定义的10个标准值,配置max_iris_fno_target为最大光圈值,配置min_iris_fno_target为实际光圈值即可。如果光圈不为10个标准值,则需要配置fno_ex_valid为TD_TRUE,以F32.0等效增益为1倍为基数计算实际光圈及最大光圈等效增益,并配置max_iris_fno_target_linear为最大光圈等效增益,配置min_iris_fno_target_linear为实际光圈等效增益。如果AI使能,则根据实际光圈生效的大小计算光圈值,并更新DCF信息。光圈最小可支持到F32.0。
当P-Iris步进电机0为最大光圈位置时,更改step_count,会影响它的最小值生效的大小。
表 1 P-Iris步进电机位置与F值映射表
表 2 P-Iris镜头相关参数
{30,35,40,45,50,56,61,67,73,79,85,92,98,105,112,120,127,135,143,150,158,166,174,183,191,200,208,217,225,234,243,252,261,270,279,289,298,307,316,325,335,344,353,362,372,381,390,399,408,417,426,435,444,453,462,470,478,486,493,500,506,512} |
根据表1,取步进电机前62步对应的F值,按照从小到大的排列顺序,制作映射表。AE算法计算时,只会用到step_fno_table数组中的前step_count个元素。当数组座标小于step_count时,值必须保证是单调递增的。当数组座标为(step_count-1)时,达到光圈最大F值512。 |
|
【相关数据类型及接口】
ot_isp_iris_attr¶
【说明】
定义ISP光圈属性。
【定义】
typedef struct {
td_bool enable;
ot_op_mode op_type;
ot_isp_iris_type iris_type;
ot_isp_iris_status iris_status;
ot_isp_mi_attr mi_attr;
} ot_isp_iris_attr;
【成员】
【注意事项】
进行AI算法测试前,建议确认AI电路特性是否符合_录像机_要求。
针对DC-Iris镜头,AI算法会根据画面亮度,调节PWM占空比对光圈进行控制。当曝光时间和增益达到最小目标值之后,会进入光圈控制区域。当光圈控制能满足目标亮度的要求时,AE直接返回,保持曝光时间和增益不变。当画面亮度稳定且PWM占空比维持在打开值一段时间后,AI算法会认为光圈已经打开至最大,退出光圈控制区,将控制权交还给AE。处于光圈控制区时,更改AE算法参数,如最大/最小曝光时间、最大/最小增益和抗闪等需要即时生效的参数,AE会即时响应,根据新设定的参数和环境亮度,AI算法重新决定是否要进入光圈控制区。由于进入光圈控制区域和退出光圈控制区域需要短暂时间,针对手动光圈镜头建议关闭AI功能,否则AE的调节速度会受到一点影响。针对DC-Iris镜头建议一直打开AI功能,随意开关AI容易导致光圈控制出现异常。针对某些长焦的DC-Iris镜头,默认参数可能会导致光圈打开/关闭速度过快,此时可以调节相关参数来解决,详见ot_isp_dciris_attr部分描述。
针对P-Iris镜头,光圈控制通过AE分配路线进行。P-Iris对接重点在于正确设置镜头相关参数和合理设置AE分配路线,详见ot_isp_piris_attr和ss_mpi_isp_set_ae_route_attr部分描述,才能保证P-Iris正常工作。由于不同P-Iris的驱动方式可能会有差别,用户可以自行修改P-Iris驱动以适配不同镜头。
关闭AI功能,对于DC-Iris镜头,光圈会打开到最大;对于P-Iris镜头,光圈会打开到最大光圈目标值对应步进电机位置,但此时曝光分配仍会参考AE路线,可能导致画面亮度异常,因此对接P-Iris镜头时,若不想使能AI,为保证曝光正常,需要把光圈类型切换至OT_ISP_IRIS_DC_TYPE。
由DC-Iris切换至P-Iris,需提前设置好P-Iris镜头相关参数,并且将光圈状态设置为OT_ISP_IRIS_KEEP,再进行切换。
利用Demo板或Ref板进行DC-Iris测试时,load ko时要配置以下2个寄存器,用于配置管脚复用和时钟:bspmm 0x102F0078 0x12F5;bspmm 0x11014590 0x0010。
利用Demo板或Ref板进行P-Iris测试时,load ko时要配置以下1个寄存器,用于配置管脚复用和时钟:bspmm 0x102F0108 0x1101。
注意:采用SDK提供的AE库时,AE_init会打开一次默认的PWM3信号,若客户需要采用PWM3做其他处理,需要指定AI对应的PWM Number为其他值。
【相关数据类型及接口】
ot_isp_exp_conv_param¶
【说明】
定义不同帧率等曝光量转换相关曝光参数属性。
【定义】
typedef struct {
td_u32 tar_fps;
td_u32 tar_isp_dgain; /* 10 bit */
ot_isp_exp_param_reg time_reg[10];
ot_isp_exp_param_reg again_reg[10];
ot_isp_exp_param_reg dgain_reg[10];
} ot_isp_exp_conv_param;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_isp_exp_param_reg¶
【说明】
定义寄存器状态。
【定义】
typedef struct {
td_u32 reg_addr;
td_u32 reg_value;
} ot_isp_exp_param_reg;
【成员】
【注意事项】
无。
【相关数据类型及接口】
AWB¶
概述¶
色温随可见光的光谱成分变化而变化,在低色温光源下,白色物体偏红,在高色温光源下,白色物体偏蓝。人眼可根据大脑的记忆判断,识别物体的真实颜色,AWB算法的功能是降低外界光源对物体真实颜色的影响,使得我们采集的颜色信息转变为在理想日光光源下的无偏色信息。
重要概念¶
色温:色温是按绝对黑体来定义的,光源的辐射在可见区和绝对黑体的辐射完全相同时,此时黑体的温度就称为此光源的色温。
白平衡:在不同色温的光源下,白色在传感器中的响应会偏蓝或偏红。白平衡算法通过调整R, G, B三个颜色通道的强度,使白色真实呈现。
功能描述¶
AWB模块由硬件的WB信息统计模块及AWB策略控制算法firmware两部分组成。ISP的WB信息统计模块判断sensor输出的每个像素是否满足用户设定的白点条件,计算所有满足条件的像素的R、G、B三个颜色通道平均值。
支持将图像分成M*N(M行N列)区域,统计每个区域的R、G、B均值以及参与统计的白点个数。
支持输出整幅图像的R、G、B均值以及参与统计的白点个数。
AWB策略控制算法firmware在libot_awb.a和libot_awb_natura.a两个库中,这两个库的功能相同,针对不同应用场景做了相应的优化,使用的时候选择一个加载,不能同时加载。
AWB工作原理如图1所示。
API参考¶
AWB库接口¶
所有AWB库接口都只是针对SDK提供的AWB库,如果客户自己实现AWB库,不需要关注这些接口,且无法使用这些接口。
ss_mpi_awb_register:向ISP注册AWB库。
ss_mpi_awb_unregister:向ISP注销AWB库。
ss_mpi_awb_sensor_reg_callback:AWB库提供的sensor注册的回调接口。
ss_mpi_awb_sensor_unreg_callback:AWB库提供的sensor注销的回调接口。
ss_mpi_awb_register¶
【描述】
向ISP注册AWB库。
【语法】
td_s32 ss_mpi_awb_register(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *awb_lib);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
该接口调用了ISP库提供的AWB注册回调接口。ss_mpi_isp_awb_lib_reg_callback,以实现向ISP库注册的功能。
用户调用此接口完成AWB库向ISP库注册。
AWB库可以注册多个实例。
此接口不支持多进程操作。
【举例】
无
【相关主题】
ss_mpi_isp_awb_lib_reg_callback
ss_mpi_awb_unregister¶
【描述】
向ISP注销AWB库。
【语法】
td_s32 ss_mpi_awb_unregister (ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *awb_lib);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
该接口调用了ISP库提供的AWB反注册回调接口。ss_mpi_isp_awb_lib_unreg_callback,以实现AWB向ISP库反注册的功能。
用户调用此接口完成AWB库向ISP库反注册。
此接口不支持多进程操作。
【举例】
无
【相关主题】
ss_mpi_isp_awb_lib_reg_callback
ss_mpi_awb_sensor_reg_callback¶
【描述】
AWB库提供的sensor注册的回调接口。
【语法】
td_s32 ss_mpi_awb_sensor_reg_callback (ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *awb_lib, ot_isp_sns_attr_info *sns_attr_info, ot_isp_awb_sensor_register * awb_sns_register);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【需求】
sensor_id是sensor库中自定义的值,主要用于校对向ISP注册的sensor和向3A注册的sensor是否为同一个sensor。
AWB通过sensor注册的一系列回调接口,获取差异化的初始化参数,并控制sensor。
此接口不支持多进程操作。
【举例】
ot_isp_3a_alg_lib awb_lib;
ot_isp_awb_sensor_register awb_register;
ot_isp_sns_attr_info sns_attr_info;
ot_isp_awb_sensor_exp_func *exp_funcs = &awb_register.sns_exp;
memset(exp_funcs, 0, sizeof(ot_isp_awb_sensor_exp_func));
exp_funcs-> pfn_cmos_get_awb_default = cmos_get_awb_default;
ot_vi_pipe vi_pipe = 0;
awb_lib.id = 0;
sns_attr_info. sensor_id = SENSOR_NAME_ID;
strcpy(awb_lib. lib_name, OT_AWB_LIB_NAME);
ret = ss_mpi_awb_sensor_reg_callback(vi_pipe, &awb_lib, &sns_attr_info, &awb_register);
if (ret) {
printf("sensor register callback function to awb lib failed!\n");
return ret;
}
【相关主题】
无
ss_mpi_awb_sensor_unreg_callback¶
【描述】
AWB库提供的sensor注消的回调接口。
【语法】
td_s32 ss_mpi_awb_sensor_unreg_callback (ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *awb_lib, ot_sensor_id sensor_id);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
此接口不支持多进程操作。
【相关主题】
无
AWB控制模块¶
ss_mpi_isp_set_wb_attr:设置白平衡属性。
ss_mpi_isp_get_wb_attr:获取白平衡属性。
ss_mpi_isp_set_awb_attr_ex:设置自动白平衡扩展属性。
ss_mpi_isp_get_awb_attr_ex:获取自动白平衡扩展属性。
ss_mpi_isp_query_wb_info:获取当前白平衡增益系数,当前色温值,饱和度值,颜色校正矩阵系数等信息。
ss_mpi_isp_cal_gain_by_temp:计算特定色温下的白平衡增益系数。
ss_mpi_isp_set_wb_attr¶
【描述】
设置白平衡属性。
【语法】
td_s32 ss_mpi_isp_set_wb_attr(ot_vi_pipe vi_pipe, const ot_isp_wb_attr * wb_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
白平衡控制类型为自动时,AWB算法自动调节白平衡系数。
白平衡控制类型为手动时,AWB算法失效,需自行设定Rgain、Ggain、Bgain。
环境色温、照度会影响白点的分布范围,SDK提供的AWB算法在运行过程中,会根据环境参数自动刷新AWB Bayer域统计信息的白点参数。用户希望在AWB算法运行时修改AWB统计参数,需要调用ss_mpi_isp_set_wb_attr接口,关闭统计参数自动刷新功能。用户关闭统计参数自动刷新功能,到ISP收到配置并响应,有2帧的延时。因此,用户设置后需要等待2帧时间再修改AWB统计参数。
【举例】
无
【相关主题】
ss_mpi_isp_get_wb_attr¶
【描述】
获取白平衡属性。
【语法】
td_s32 ss_mpi_isp_get_wb_attr (ot_vi_pipe vi_pipe, ot_isp_wb_attr *wb_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_awb_attr_ex¶
【描述】
设置自动白平衡扩展属性。
【语法】
td_s32 ss_mpi_isp_set_awb_attr_ex (ot_vi_pipe vi_pipe, ot_isp_awb_attr_ex *awb_attr_ex);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
当ss_mpi_isp_set_wb_attr接口成员wb_attr. auto_attr. alg_type为 OT_ISP_AWB_ALG_ADVANCE时,此接口才有效。
【举例】
无
【相关主题】
ss_mpi_isp_get_awb_attr_ex¶
【描述】
获取自动白平衡扩展属性。
【语法】
td_s32 ss_mpi_isp_get_awb_attr_ex (ot_vi_pipe vi_pipe, ot_isp_awb_attr_ex *awb_attr_ex);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_query_wb_info¶
【描述】
获取当前白平衡增益系数,当前色温值,饱和度值,颜色校正矩阵系数等信息。
【语法】
td_s32 ss_mpi_isp_query_wb_info(ot_vi_pipe vi_pipe, ot_isp_wb_info *wb_info);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
若用户使用非AWB算法,则该接口需要自己实现并且需要同步修改PQTOOLS的xml文件,具体修改方式请参考《图像质量调试工具使用指南》第2.1.3.7小节。
【举例】
无
【相关主题】
无
ss_mpi_isp_cal_gain_by_temp¶
【描述】
计算特定色温下的白平衡增益系数。
【语法】
td_s32 ss_mpi_isp_cal_gain_by_temp(ot_vi_pipe vi_pipe, const ot_isp_wb_attr *wb_attr, td_u16 color_temp, td_s16 shift, td_u16 *awb_gain);
【参数】
白平衡的参数属性。需要用到ot_isp_awb_attr中的static_wb,curve_para两组标定参数。 |
||
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
白平衡标定参数决定预设色温增益计算的准确性,因此,在调用该接口前,必须完成标定,且标定参数配置到ISP。用户先通过ss_mpi_isp_set_wb_attr接口设置标定结果,再调用ss_mpi_isp_cal_gain_by_temp接口计算预设色温的增益,过程中不能再修改标定结果。
ss_mpi_isp_cal_gain_by_temp功能基于AWB标定参数实现,因此,该接口仅对ot_isp_awb_attr结构体的标定参数static_wb,curve_para 做有效范围检查,不对其他参数做约束。
shift参数决定光源点与Planckian曲线的位置关系,shift为负数时,光源点位于Planckian曲线左侧,计算的白平衡增益在预设色温下会稍微偏红;shift为正数时,光源点位于Planckian曲线右侧,计算的白平衡增益在预设色温下会稍微偏绿。
【举例】
无
【相关主题】
数据类型¶
Register¶
OT_ISP_CCM_MATRIX_NUM:定义AWB可配置的CCM矩阵组数。
OT_ISP_AWB_CURVE_PARA_NUM:定义AWB标定的Plank曲线参数个数。
OT_ISP_AWB_ZONE_ORIG_ROW:定义AWB水平方向分区间数目。
OT_ISP_AWB_ZONE_ORIG_COLUMN:定义AWB垂直方向分区间数目。
OT_ISP_AWB_ZONE_NUM:定义AWB分区间数目。
OT_ISP_AWB_ZONE_STITCH_MAX:定义拼接模式下AWB分区间数目最大值。
OT_ISP_AWB_LUM_HIST_NUM:定义AWB的亮度分组数目。
OT_ISP_AWB_LS_NUM:定义AWB的独立光源点数目。
OT_ISP_AWB_MULTI_CT_NUM:定义AWB的色温分组数目。
ot_isp_awb_sensor_register:定义sensor注册结构体。
ot_isp_awb_sensor_exp_func:定义sensor回调函数结构体。
ot_isp_awb_sensor_default:定义AWB算法库的初始化参数结构体。
ot_isp_awb_agc_table:定义饱和度初始化参数结构体。
ot_isp_awb_ccm_tab:定义不同色温下自动颜色校正矩阵系数。
ot_isp_awb_ccm:定义CCM颜色校正矩阵属性。
OT_ISP_CCM_MATRIX_NUM¶
【说明】
定义AWB可配置的CCM矩阵组数。
【定义】
#define OT_ISP_CCM_MATRIX_NUM 7
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AWB_CURVE_PARA_NUM¶
【说明】
定义AWB标定的Plank曲线参数个数。
【定义】
#define OT_ISP_AWB_CURVE_PARA_NUM 6
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AWB_ZONE_ORIG_ROW¶
【说明】
定义AWB水平方向分区间数目。
【定义】
#define OT_ISP_AWB_ZONE_ORIG_ROW 32
【注意事项】
无。
【相关数据类型及接口】
ot_isp_awb_grid_info
OT_ISP_AWB_ZONE_ORIG_COLUMN¶
【说明】
定义AWB垂直方向分区间数目。
【定义】
#define OT_ISP_AWB_ZONE_ORIG_COLUMN 32
【注意事项】
无。
【相关数据类型及接口】
ot_isp_awb_grid_info
OT_ISP_AWB_ZONE_NUM¶
【说明】
定义AWB分区间数目。
【定义】
#define OT_ISP_AWB_ZONE_NUM (OT_ISP_AWB_ZONE_ORIG_ROW * OT_ISP_AWB_ZONE_ORIG_COLUMN)
【注意事项】
无。
【相关数据类型及接口】
ot_isp_wb_stats
OT_ISP_AWB_ZONE_STITCH_MAX¶
【说明】
定义拼接模式下AWB分区间数目最大值。
【定义】
#define OT_ISP_AWB_ZONE_STITCH_MAX (OT_ISP_AWB_ZONE_NUM * OT_ISP_MAX_STITCH_NUM)
【注意事项】
无。
【相关数据类型及接口】
ot_isp_wb_stitch_stats
OT_ISP_AWB_LUM_HIST_NUM¶
【说明】
定义AWB的亮度分组数目。
【定义】
#define OT_ISP_AWB_LUM_HIST_NUM 6
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AWB_LS_NUM¶
【说明】
定义AWB的独立光源点数目。
【定义】
#define OT_ISP_AWB_LS_NUM 4
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AWB_MULTI_CT_NUM¶
【说明】
定义AWB的色温分组数目。
【定义】
#define OT_ISP_AWB_MULTI_CT_NUM 8
【注意事项】
无。
【相关数据类型及接口】
ot_isp_awb_sensor_register¶
【说明】
定义sensor注册结构体。
【定义】
typedef struct {
ot_isp_awb_sensor_exp_func sns_exp;
} ot_isp_awb_sensor_register;
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
ot_isp_awb_sensor_exp_func¶
【说明】
定义sensor回调函数结构体。
【定义】
typedef struct {
td_s32 (*pfn_cmos_get_awb_default)(ot_vi_pipe vi_pipe, ot_isp_awb_sensor_default *awb_sns_dft);
} ot_isp_awb_sensor_exp_func;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_sensor_register
ot_isp_awb_sensor_default¶
【说明】
定义AWB算法库的初始化参数结构体。
【定义】
typedef struct {
td_u16 wb_ref_temp;
td_u16 gain_offset[OT_ISP_BAYER_CHN_NUM];
td_s32 wb_para[OT_ISP_AWB_CURVE_PARA_NUM];
td_u16 golden_rgain;
td_u16 golden_bgain;
td_u16 sample_rgain;
td_u16 sample_bgain;
ot_isp_awb_agc_table agc_tbl;
ot_isp_awb_ccm ccm;
td_u16 init_rgain;
td_u16 init_ggain;
td_u16 init_bgain;
td_u8 awb_run_interval;
td_u16 init_ccm[OT_ISP_CCM_MATRIX_SIZE];
} ot_isp_awb_sensor_default;
【成员】
【注意事项】
参考色温即静态白平衡校正的环境色温,需要提供色度计测量的实际值。
【相关数据类型及接口】
ot_isp_sensor_exp_func
ot_isp_awb_agc_table¶
【说明】
定义饱和度初始化参数结构体。
【定义】
typedef struct {
td_bool valid;
td_u8 saturation[OT_ISP_AUTO_ISO_NUM];
} ot_isp_awb_agc_table;
【成员】
【注意事项】
saturation 为非单调递减序列。
【相关数据类型及接口】
ot_isp_awb_ccm_tab¶
【说明】
定义不同色温下自动颜色校正矩阵系数。
【定义】
typedef struct {
td_u16 color_temp;
td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE];
} ot_isp_awb_ccm_tab;
【成员】
不同色温下的颜色校正矩阵,8bit小数精度。Bit [15]是符号位,0表示正数,1表示负数,例如0x8010表示-16。Bit[12],Bit[13],Bit[14]是无效的,即正数从0x0000到0x0FFF,负数从0x8000到0x8FFF,是CCM的合理参数。 |
【注意事项】
不同色温下的自动颜色校正矩阵,应满足灰色数据不变的约束条件,即矩阵中每行参数的和为0x100。请通过ot_isp_wb_info查询当前生效的颜色校正矩阵的值,确认每行参数的和为0x100。
【相关数据类型及接口】
ot_isp_awb_ccm¶
【说明】
定义CCM颜色校正矩阵属性。
【定义】
typedef struct {
td_u16 ccm_tab_num;
ot_isp_awb_ccm_tab ccm_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_awb_ccm;
【成员】
ccm_tab[OT_ISP_CCM_MATRIX_NUM] |
【注意事项】
如果选择三组CCM,推荐高色温CCM在D50光源标定,中色温CCM在TL84光源标定,低色温CCM在A光源标定。
【相关数据类型及接口】
AWB¶
ot_isp_awb_attr:定义ISP自动白平衡属性。
ot_isp_awb_cbcr_track_attr:定义Bayer域统计信息的联动参数。
ot_isp_awb_lum_histgram_attr:定义白平衡的亮度直方图统计参数。
ot_isp_awb_alg_type:定义GW白平衡的计算方式属性。
ot_isp_awb_ct_limit_attr:定义白平衡的增益范围限制属性。
ot_isp_mwb_attr:定义ISP手动白平衡属性。
ot_isp_wb_attr:定义白平衡属性。
ot_isp_awb_multi_ls_type:定义混合光源下的白平衡策略。
ot_isp_awb_indoor_outdoor_status:定义室内外状态。
ot_isp_awb_attr_ex:定义自动白平衡扩展属性。
ot_isp_awb_extra_light_source_info:定义独立光源点的信息。
ot_isp_awb_in_out_attr:定义对场景做室内外判断的参数。
ot_isp_wb_info:定义白平衡,饱和度,颜色校正信息。
ot_isp_awb_attr¶
【说明】
定义ISP自动白平衡属性。
【定义】
typedef struct {
td_bool enable;
td_u16 ref_color_temp;
td_u16 static_wb[OT_ISP_BAYER_CHN_NUM];
td_s32 curve_para[OT_ISP_AWB_CURVE_PARA_NUM];
ot_isp_awb_alg_type alg_type;
td_u8 rg_strength;
td_u8 bg_strength;
td_u16 speed;
td_u16 zone_sel;
td_u16 high_color_temp;
td_u16 low_color_temp;
ot_isp_awb_ct_limit_attr ct_limit;
td_bool shift_limit_en;
td_u8 shift_limit;
td_bool gain_norm_en;
td_bool natural_cast_en;
ot_isp_awb_cbcr_track_attr cb_cr_track;
ot_isp_awb_lum_histgram_attr luma_hist;
td_bool awb_zone_wt_en;
td_u8 zone_wt[OT_ISP_AWB_ZONE_NUM];
} ot_isp_awb_attr;
【成员】
curve_para[OT_ISP_AWB_CURVE_PARA_NUM] |
|
zone_wt[OT_ISP_AWB_ZONE_NUM] |
【差异说明】
无
【注意事项】
enable为TD_TRUE时,AWB正常工作,RGB通道增益系数由AWB根据环境色温计算;enable为TD_FALSE时,AWB不工作,RGB通道增益系数固定,为校正的静态白平衡系数。
ref_color_temp、static_wb、curve_para是用户通过校正工具得到的AWB参数,是AWB准确的前提。更换光学器件后,建议重新校正这三组参数。ref_color_temp是进行静态白平衡校正光源的真实色温,推荐在D50光源下做静态白平衡校正。curve_para[0],curve_para[1],curve_para[2]三个参数确定Planckian曲线,curve_para[3],curve_para[4],curve_para[5]三个参数确定色温曲线,curve_para[4]取值固定为128。
自动白平衡通过curve_para等标定参数计算环境色温。在[2500K, 10000K]范围内,色温计算准确度较高,超出以上范围后,色温计算误差较大。
自动白平衡R/B通道校准强度,一般情况不建议调整。
可通过调整R/B通道校准强度使AWB校准偏强或者偏弱,0x80表示标准强度。建议rg_strength、bg_strength两个参数取相同值,且小于等于0x80。在低色温场景,校准强度小于0x80时图像偏红,大于0x80时图像偏蓝;在高色温场景,校准强度小于0x80时图像偏蓝,大于0x80时图像偏红。
speed控制AWB增益的收敛速度。speed越大,切换光源时,AWB收敛的速度越快,但帧间的波动幅度也变大;speed越小,切换光源时,AWB收敛的速度越慢,但帧间的波动幅度变小,稳定性提高。
zone_sel参数为0或255时,采用了近似灰度世界的算法;zone_sel为其他值时,AWB算法会对所有统计块进行分类筛选,提高AWB精度。
自动白平衡算法的色温上限/下限,以Kelvin为单位。
AWB算法支持的最高/最低色温。若实际场景中的色温大于色温上限或小于色温下限,则AWB不能完全恢复,图像会偏向光源色,低色温下偏黄,高色温下偏蓝。
注意:色温计算在高、低色温段误差较大,设置色温上限小于1000K时,可能出现随参数值递增或递减,颜色表现不平滑的现象。
shift_limit_en决定AWB增益是否向Planckian曲线做映射。shift_limit控制白色块的范围,取值较小时,对光源的支持范围较窄,精度较高;取值较大时,支持更多的光源,精度降低。shift_limit_en仅控制AWB增益是否向Planckian曲线做映射,无论shift_limit_en打开或关闭,shift_limit取值的改变都会影响AWB结果。校正静态白平衡系数的光源色温值,要求在AWB算法设置的色温上下限范围内。
gain_norm_en使能,对RGB通道增益进行限制,可以改善低色温、低照度场景的信噪比。
natural_cast_en使能,低色温下AWB保留光源色,图像颜色更自然。
权重表与AWB统计分块的对应顺序如下:
非拼接模式下,AWB统计信息分块个数是32x32,zone_wt[0]对应第一行第一列,zone_wt[1]对应第一行第二列,zone_wt[31]对应第一行第32列,zone_wt[32]对应第二行第一列,依次类推。
不支持拼接模式下配置AWB统计信息权重。
特定应用产品,客户使能awb_zone_wt_en后,可通过设置权重表改变每个区域的权重,优化AWB表现。在shading较严重时,可加大中心区域的权重,保证中间区域AWB准确还原,降低shading对AWB的影响。在行车记录仪应用,感兴趣区域一般在画面的中心偏下区域,可加大此区域的权重,降低天空、树木等区域对AWB的干扰。
【相关数据类型及接口】
ot_isp_awb_cbcr_track_attr¶
【说明】
定义Bayer域统计信息的联动参数。
【定义】
typedef struct {
td_bool enable;
td_u16 cr_max[OT_ISP_AUTO_ISO_NUM];
td_u16 cr_min[OT_ISP_AUTO_ISO_NUM];
td_u16 cb_max[OT_ISP_AUTO_ISO_NUM];
td_u16 cb_min[OT_ISP_AUTO_ISO_NUM];
} ot_isp_awb_cbcr_track_attr;
【成员】
【注意事项】
统计参数联动使能后,AWB算法会根据环境照度、色温、用户设置的 cr_max数组等实时计算cr_max、cr_min、cb_max和cb_min四个参数,并配置相应的逻辑寄存器,此时用户通过PQ Tools设置以上四个统计参数不生效。
统计参数联动使能,AWB算法计算的cr_max等统计参数在根据ISO插值的基础上还和环境色温相关。低色温时,白点范围较宽;中高色温时,白点范围较窄。
用户手动配置cr_max、cr_min、cb_max、cb_min四个参数时,需要先关闭联动功能。
cr_max[0]、cr_min[0]、cb_max[0]、cb_min[0]的取值可在AWB参数标定时确定。用户确定了支持的色温范围后,捕获高低色温的RAW图片,计算白色区域的R/G、B/G值。cr_max[0]和cb_min[0]分别对应低色温的R/G、B/G;cr_min[0]和cb_max[0]分别对应高色温的R/G、B/G。推荐用户设置的Cr、Cb范围稍大于RAW图统计的R/G、B/G取值范围。
AWB算法计算的cr_max等统计参数在根据ISO插值的时候,会基于cr_max[0]、cr_min[0]、cb_max[0]、cb_min[0]的值。所以不同ISO下的取值设定应以ISO100的值为基础,单调递增或递减。
建议在低色温(钠灯)环境标定cr_max、cb_min数组。用户统计不同照度下白色区域的R/G、B/G值,设置cr_max、cb_min数组。推荐用户设置的Cr、Cb范围稍大于RAW图片统计的R/G、B/G取值范围。
因低照度下环境色温多在5000K以下,cr_min、cb_max两个数组的取值可设为常数。
当AWB统计信息配置在DRC后的时候,ot_isp_awb_cbcr_track_attr参数不生效,cr_min、cb_min固定为128,cr_max、cb_max固定为512。
表 1 cr_max [16]在不同的增益情况下的设置值(仅供参考)
表 2 cr_min [16]在不同的增益情况下的设置值(仅供参考)
表 3 cb_max [16]在不同的增益情况下的设置值(仅供参考)
表 4 cb_min [16]在不同的增益情况下的设置值(仅供参考)
【相关数据类型及接口】
ot_isp_awb_lum_histgram_attr¶
【说明】
定义白平衡的亮度直方图统计参数。
【定义】
typedef struct {
td_bool enable;
ot_op_mode op_type;
td_u8 hist_thresh[OT_ISP_AWB_LUM_HIST_NUM];
td_u16 hist_wt[OT_ISP_AWB_LUM_HIST_NUM];
} ot_isp_awb_lum_histgram_attr;
【成员】
hist_thresh[OT_ISP_AWB_LUM_HIST_NUM] |
|
hist_wt[OT_ISP_AWB_LUM_HIST_NUM] |
【注意事项】
hist_thresh[0]固定为0,hist_thresh[5]固定为0xFF。hist_thresh应严格单调递增。
hist_wt参数用来设置hist_thresh 的权重。对应用户可通过hist_wt设置实现亮区优先、暗区优先。
【相关数据类型及接口】
ot_isp_awb_alg_type¶
【说明】
定义白平衡的算法类型属性。
【定义】
typedef enum {
OT_ISP_AWB_ALG_LOWCOST = 0,
OT_ISP_AWB_ALG_ADVANCE = 1,
OT_ISP_AWB_ALG_NATURA = 2,
OT_ISP_AWB_ALG_BUTT
} ot_isp_awb_alg_type;
【成员】
【注意事项】
OT_ISP_AWB_ALG_LOWCOST CPU占用低,AWB不同照度的稳定性较好,对光源的适应性稍好。
OT_ISP_AWB_ALG_ADVANCE CPU占用高,高低色温的极低照度情况下,保留轻微光源色;提高了大面积纯色场景(室外大面积绿色、室内大面积肤色等)AWB算法准确度。
OT_ISP_AWB_ALG_NATURA 推荐无人机、运动DV等主要在自然光源应用的设备选择该配置。优化大面积绿色、土地等场景表现,提升快速运动时的颜色稳定性。
【相关数据类型及接口】
ot_isp_awb_ct_limit_attr¶
【说明】
定义白平衡的增益范围限制属性。
【定义】
typedef struct {
td_bool enable;
ot_op_mode op_type;
td_u16 high_rg_limit;
td_u16 high_bg_limit;
td_u16 low_rg_limit;
td_u16 low_bg_limit;
} ot_isp_awb_ct_limit_attr;
【成员】
【注意事项】
ot_isp_awb_ct_limit_attr结构体定义环境色温超过用户设定的色温范围时,AWB应采取的动作。AWB检测到环境色温超过用户设置的上下限时,相关参数才会生效。
支持自动模式和手动模式选择。自动模式下,AWB根据用户校正的色温曲线计算色温上下限色温的AWB增益,以限制R, B通道增益;手动模式下,高色温时,AWB调用high_rg_limit、high_bg_limit参数限制R, B通道增益,低色温时,AWB调用low_rg_limit、low_bg_limit参数限制R,B通道增益。
建议用户在进行AWB色温曲线校正时,确定了AWB工作的色温范围后,再确定high_rg_limit、high_bg_limit、low_rg_limit、low_bg_limit四个参数取值。Rg对应Planckian曲线的横坐标值,Bg对应Planckian曲线的纵坐标值。
【相关数据类型及接口】
ot_isp_mwb_attr¶
【说明】
定义ISP手动白平衡属性。
【定义】
typedef struct {
td_u16 r_gain;
td_u16 gr_gain;
td_u16 gb_gain;
td_u16 b_gain;
} ot_isp_mwb_attr;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_wb_attr¶
【说明】
定义白平衡属性。
【定义】
typedef struct {
td_bool bypass;
td_u8 awb_run_interval;
ot_op_mode op_type;
ot_isp_mwb_attr manual_attr;
ot_isp_awb_attr auto_attr;
ot_isp_awb_alg alg_type;
} ot_isp_wb_attr;
【成员】
【注意事项】
bypass 为TD_TRUE时,WB的其它参数设置不生效,RGB通道增益系数固定为0x100。
awb_run_interval默认为2,表示每2帧运行一次AWB。客户可根据业务需求降低AWB的运行频率。
SS928V100仅支持GW AWB。
【相关数据类型及接口】
ot_isp_awb_multi_ls_type¶
【说明】
定义混合光源下的AWB策略。
【定义】
typedef enum {
OT_ISP_AWB_MULTI_LS_SAT = 0,
OT_ISP_AWB_MULTI_LS_CCM = 1,
OT_ISP_AWB_MULTI_LS_BUTT
} ot_isp_awb_multi_ls_type;
【成员】
【注意事项】
OT_ISP_AWB_MULTI_LS_CCM对图像饱和度损失较少,但会改变颜色的色调。
OT_ISP_AWB_MULTI_LS_SAT方式降低图像整体饱和度,改善混合光源下的偏色程度。
【相关数据类型及接口】
ot_isp_awb_indoor_outdoor_status¶
【说明】
定义AWB室内外状态。
【定义】
typedef enum {
OT_ISP_AWB_INDOOR_MODE = 0,
OT_ISP_AWB_OUTDOOR_MODE = 1,
OT_ISP_AWB_INDOOR_OUTDOOR_BUTT
} ot_isp_awb_indoor_outdoor_status;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_awb_attr_ex¶
【说明】
定义自动白平衡扩展属性。
【定义】
typedef struct {
td_u8 tolerance;
td_u8 zone_radius;
td_u16 curve_l_limit;
td_u16 curve_r_limit;
td_bool extra_light_en;
ot_isp_awb_extra_light_source_info light_info[OT_ISP_AWB_LS_NUM];
ot_isp_awb_in_out_attr in_or_out;
td_bool multi_light_source_en;
ot_isp_awb_multi_ls_type multi_ls_type;
td_u16 multi_ls_scaler;
td_u16 multi_ct_bin[OT_ISP_AWB_MULTI_CT_NUM];
td_u16 multi_ct_wt[OT_ISP_AWB_MULTI_CT_NUM];
td_bool fine_tun_en;
td_u8 fine_tun_strength;
} ot_isp_awb_attr_ex;
【成员】
light_info[OT_ISP_AWB_LS_NUM] |
|
multi_ct_bin[OT_ISP_AWB_MULTI_CT_NUM] |
|
multi_ct_wt[OT_ISP_AWB_MULTI_CT_NUM] |
|
图 2 混合光源场景色温权重设置示例说明(n为色温分段点个数)

【注意事项】
tolerance是AWB的灵敏度参数。该值为0时,AWB系数实时更新,CPU占用较高;该值较大时,AWB在检测到环境色温变化时再更新AWB系数,CPU占用较低,但在环境色温微调时,AWB可能出现轻微的偏色。推荐室外应用时tolerance置为0,室内应用时置为2。
zone_radius是选择光源环境白色块的色差半径。zone_radius越大,白色块的限制条件越宽,找到的白色块较多,稳定性稍好,精度稍低;zone_radius越小,白色块的限制条件越严格,找到的白色块较少,AWB精度更高。在混合光源的应用场景,推荐zone_radius比普通场景稍大。
curve_l_limit取值<=0x100, curve_r_limit取值>=0x100。curve_l_limit和curve_r_limit两个参数用来排除颜色块。如色温曲线的参数示意图所示,curve_l_limit排除了左侧的阴影区域,curve_r_limit排除了右侧的阴影区域。
AWB算法支持在色温曲线外,再增加独立光源点信息,提升特殊光源下的AWB表现。
multi_light_source_en使能后,AWB算法判断场景是否混合光源,在混合光源场景,自动降低饱和度或调整CCM,以减弱偏色程度。最大调整幅度由multi_ls_scaler决定。调整CCM方式会改变色调。
multi_ls_type= OT_ISP_AWB_MULTI_LS_SAT时,调整饱和度来改善混合光源场景的偏色。multi_ls_scaler/0x100表示饱和度增益系数的下限。multi_ls_scaler=0xC0,表示饱和度的增益系数下限是0xC0/0x100 = 0.75,图像饱和度的波动范围是[0.75, 1.0]( 1.0表示关闭multi_light_source_en功能的图像饱和度); multi_ls_scaler=0x0,表示饱和度的增益系数下限是0x0/0x100 =0,图像饱和度的波动范围是[0, 1],在混合光源下图像可能变黑白。multi_ls_scaler取值越小,图像饱和度的波动范围越大,颜色稳定性下降。
multi_ls_type= OT_ISP_AWB_MULTI_LS_CCM时,调整CCM来改善混合光源场景的偏色。multi_ls_scaler/0x100表示CCM的调整幅度,取值越大,图像饱和度越低。multi_ls_scaler=0xC0,表示CCM的最大调整幅度为0xC0; multi_ls_scaler=0x0,表示CCM的最大调整幅度为0,等效于multi_light_source_en=0。
multi_ct_bin、multi_ct_wt两组参数的合理配置,可以改善混合光源高色温或低色温区域颜色表现。AWB配置为OT_ISP_AWB_ALG_LOWCOST、OT_ISP_AWB_ALG_ADVANCE时,在非混合光源场景,这2组参数配置不生效。AWB配置为OT_ISP_AWB_ALG_NATURA 时,这2组参数在非混合光源场景也有效,客户可通过色温权重参数调整图像风格偏冷或偏暖。色温曲线的参数示意图说明色温和权重配置的映射关系。
如果混合光源场景希望使能色温权重来改善AWB表现,但不做饱和度或CCM调解,可配置如下:multi_light_source_en=TD_TRUE,multi_ls_type=OT_ISP_AWB_MULTI_LS_SAT,multi_ls_scaler=0x100。
fine_tun_en打开,AWB会自动检测肤色等特殊色,改善肤色场景AWB表现,提高AWB精度。但可能在蓝色背景+3500K光源时发生误判,导致图像轻微偏黄。
fine_tun_strength调整肤色检测的强度,取值越大,肤色场景AWB表现越好,但肤色误判时的副作用越明显。推荐采用默认值0x80。
【相关数据类型及接口】
ot_isp_awb_extra_light_source_info¶
【说明】
定义独立光源点的信息。
【定义】
typedef struct {
td_u16 white_r_gain;
td_u16 white_b_gain;
td_u16 exp_quant;
td_u8 light_status;
td_u8 radius;
} ot_isp_awb_extra_light_source_info;
【成员】
【注意事项】
独立光源点实现以下功能:用户设定CbCr坐标的某个区域,指定该区域为特殊光源下的白色表现,增加为独立光源点;或指定该区域为特定光源下的干扰色,进行删除。
通过light_status参数的设置实现功能选择。light_status设置为1时,在用户校正的Plankcian曲线外,增加特殊光源点,以优化该光源下颜色表现,不影响设备在其它光源下的表现;light_status设置为2时,支持用户删除特定光源的某个干扰色(肤色、绿色、蓝天等)。
建议删除干扰色仅用来优化特定环境的颜色表现,否则会影响其它光源的表现。在CbCr坐标,5500K光源下的肤色与3500K光源的白色重合度很高,在5500K环境删除肤色的干扰,会导致3500K光源下偏色。
white_r_gain、white_b_gain的取值。在该光源下捕获ColorChecker Raw数据,通过Calibration Tool Staitic WB选项校准得到的Rgain、Bgain即white_r_gain、white_b_gain坐标值。删除干扰色,可选择干扰色区域进行静态白平衡校正,来确定white_r_gain、white_b_gain坐标值。
radius取值由用户设置,增加光源点,建议取值在[0x8, 0x10]范围内,删除干扰色,尽量避免[white_r_gain、white_b_gain]为中心,radius为半径的圆形区域与Plankcian曲线重合。增加光源点或删除干扰色,设置radius半径太大时(覆盖场景内大多数统计块),会导致功能失效,甚至起反作用。
当前支持定义最多4个光源色,4个相互独立。4个光源点需要避免交集,特别需要避免以下情况:CbCr坐标的单个点,既指定为增加的独立光源点,又指定为删除的干扰色。
【相关数据类型及接口】
ot_isp_awb_in_out_attr¶
【说明】
定义对场景做室内外判断的参数。
【定义】
typedef struct {
td_bool enable;
ot_op_mode op_type;
ot_isp_awb_indoor_outdoor_status outdoor_status;
td_u32 out_thresh;
td_u16 low_start;
td_u16 low_stop;
td_u16 high_start;
td_u16 high_stop;
td_bool green_enhance_en;
td_u8 out_shift_limit;
} ot_isp_awb_in_out_attr;
【成员】
【注意事项】
out_thresh需要根据sensor的感光特性进行调整。等效曝光时间=曝光时间*模拟增益*数字增益*ISP数字增益。
用户调用自己的AE库,且室内外判断类型为自动时,请务必将当前曝光时间和ISO传递给AWB库。
设置色温范围的low_start、low_stop、high_start、high_stop等 4个参数,和sensor校正相关,建议用户针对sensor做微调。四个参数的取值范围要求:low_stop<low_start<high_start<high_stop。如果设置的室外色温范围[low_start, high_start]较宽,室外的大面积纯色场景颜色表现可能会稍差;如果设置的室外色温范围[low_start, high_start]较窄,在日落前等高低色温场景,AWB不能完全恢复,低色温下稍微偏黄,高色温下稍微偏蓝。
AWB校正参数调整后,low_start、low_stop、high_start、high_stop等 4个参数要再次进行调整,以达到最佳效果。
shift取值影响AWB算法表现。普通场景shift_limit、out_shift_limit两个参数的取值大小对AWB结果影响不大。特殊光源、大面积单色场景,shift_limit、out_shift_limit两个参数的取值大小对AWB结果影响较大。
两个Shift参数取值较小时,单色表现好,但特殊光源下容易偏色;
两个shift参数取值较大时,AWB表现稳定性好,但大面积绿色、黄色等场景可能偏色。
【相关数据类型及接口】
ot_isp_wb_info¶
【说明】
定义白平衡,饱和度,颜色校正信息。
【定义】
typedef struct {
td_u16 r_gain;
td_u16 gr_gain;
td_u16 gb_gain;
td_u16 b_gain;
td_u16 saturation;
td_u16 color_temp;
td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE];
td_u16 ls0_ct;
td_u16 ls1_ct;
td_u16 ls0_area;
td_u16 ls1_area;
td_u8 multi_degree;
td_u16 active_shift;
td_u32 first_stable_time;
ot_isp_awb_indoor_outdoor_status in_out_status;
td_s16 bv;
} ot_isp_wb_info;
【成员】
【注意事项】
multi_degree 非0时,表示场景是混合光源。该值越大,场景为混合光源的概率越大。
ls0_ct、ls1_ct、ls0_area、ls1_area等查询结果仅在 multi_degree非0时有效。
混合光源检测仅在室内场景打开,AWB判断为室外场景后,逐渐减弱混合光源检测的强度,以避免饱和度降低。
混合光源概率说明:主光源和次要光源的亮度、色温差等条件影响混合光源的概率计算。检测到场景内存在主光源和次要光源两种光源后,主光源和次要光源的色温差异越大、亮度差异越小,混合光源概率越大。
ls0_area和ls1_area之和有可能大于白平衡分区个数,原因是部分区域可能受到两种光源的影响,算法不将重叠区域严格识别,会叠加到主光源、次要光源。
SS928V100不支持bv值输出,查询结果固定为0。
first_stable_time是AWB首次收敛稳定后所对应的帧数,非0表示AWB已稳定。ISP系统启动后,1-64帧AWB固定每帧执行一次,以加速AWB收敛。
【相关数据类型及接口】
无
CCM¶
概述¶
sensor对光谱的响应,在RGB各分量上与人眼对光谱的响应通常是有偏差的,通常通过一个色彩校正矩阵校正光谱响应的交叉效应和响应强度,使前端捕获的图片与人眼视觉在色彩上保持一致。
重要概念¶
色彩还原:通常通过一个色彩校正矩阵校正光谱响应的交叉效应和响应强度,使ISP处理后的图片与人眼视觉在色彩上保持一致。
饱和度:也称色彩的纯度。取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。
功能描述¶
离线校准工具Calibration Tool支持3x3 Color Correction Matrix的预校正。在ISP运行时,FW根据当前的光照强度,调整饱和度,实现CCM(Color Correction Matrix)矩阵系数的动态调整。CCM矩阵如图1所示。
API参考¶
饱和度、色调和CCM接口只是针对SDK提供的AWB库,如果客户自己实现AWB库,不需要关注这些接口,且无法使用这些接口。
ss_mpi_isp_set_saturation_attr:设置颜色饱和度属性。
ss_mpi_isp_get_saturation_attr:获取颜色饱和度属性。
ss_mpi_isp_set_ccm_attr:设置颜色校正基础矩阵。
ss_mpi_isp_get_ccm_attr:获取颜色校正基础矩阵。
ss_mpi_isp_set_saturation_attr¶
【描述】
设置颜色饱和度属性。
【语法】
td_s32 ss_mpi_isp_set_saturation_attr (ot_vi_pipe vi_pipe, const ot_isp_saturation_attr *sat_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_get_saturation_attr¶
【描述】
获取颜色饱和度属性。
【语法】
td_s32 ss_mpi_isp_get_saturation_attr (ot_vi_pipe vi_pipe, ot_isp_saturation_attr *sat_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_ccm_attr¶
【描述】
设置颜色矩阵。
【语法】
td_s32 ss_mpi_isp_set_ccm_attr (ot_vi_pipe vi_pipe, const ot_isp_color_matrix_attr *ccm_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
颜色校正矩阵的数据格式,应与校正工具提供的保持一致。
可根据当前色温,设置不同的CCM,从而在高低色温下都达到较好的颜色还原。
该MPI支持最多支持七个,最少三个不同色温下的色彩还原矩阵,要按照色温递减的方式配置CCM,即0-6组CCM矩阵由高色温到低色温。典型的三组CCM为D50,TL84,A三个光源下的CCM。典型的五组CCM为10K,D65,D50,TL84,A五个光源下的CCM。前一组的色温值与后一组的色温值需符合如下规则:Tpre * (100 – 6.25) > Tpost * (100 + 6.25)。
手动模式下,ISP系统生效的CCM即用户手动配置的CCM,有利于CCM精调,因此建议在手动模式下校正不同色温光源下的CCM矩阵,得到多组CCM矩阵后再通过MPI写入,验证多个光源下的CCM组和效果。手动CCM模式下,饱和度调整有效。在特定光源下做CCM精调时,需要先确认饱和度是否期望值。
【举例】
无
【相关主题】
ss_mpi_isp_get_ccm_attr¶
【描述】
获取颜色矩阵。
【语法】
td_s32 ss_mpi_isp_get_ccm_attr (ot_vi_pipe vi_pipe, ot_isp_color_matrix_attr *ccm_attr);
【参数】
【返回值】
【需求】
头文件:ot_common_awb.h、ss_mpi_awb.h
库文件:libot_isp.a、libss_isp.a、libot_awb.a
【注意】
无
【举例】
无
【相关主题】
数据类型¶
ot_isp_saturation_attr:定义ISP颜色饱和度属性。
ot_isp_saturation_manual:定义手动饱和度属性。
ot_isp_saturation_auto:定义自动饱和度属性。
ot_isp_color_matrix_attr:定义ISP颜色矩阵属性。
ot_isp_color_matrix_auto:定义自动颜色校正矩阵属性。
ot_isp_color_matrix_manual:定义手动颜色校正矩阵属性。
ot_isp_color_matrix_param:定义多组颜色矫正矩阵系数
ot_isp_saturation_attr¶
【说明】
定义ISP颜色饱和度属性。
【定义】
typedef struct {
ot_op_mode op_type;
ot_isp_saturation_manual manual_attr;
ot_isp_saturation_auto auto_attr;
} ot_isp_saturation_attr;
【成员】
【注意事项】
设置饱和度功能分为自动和手动:
op_type为OT_OP_MODE_AUTO,使用自动饱和度调节功能。
此时饱和度值会根据系统增益自动调节,饱和度与系统增益的关系请参见成员变量sat [16]的描述。
在自动饱和度模式下,系统最终的饱和度由系统增益对应的sat [16]变量,AWB控制的混合光源下自动调节饱和度multi_ls_scaler,极低照度下CCM Bypass功能iso_act_en ,高、低色温下CCM Bypass功能temp_act_en,几个因素共同决定。
op_type为OT_OP_MODE_MANUAL,使用手动饱和度调节功能。
此时变量sat[16]无效。
在手动饱和度模式下,系统最终的饱和度由用户完全控制。
调节饱和度参数不能保证图像亮度不改变,在目标饱和度相对标准值128偏离较大时,会在改变饱和度的同时伴随有亮度的改变。
【相关数据类型及接口】
ot_isp_saturation_manual¶
【说明】
定义手动饱和度属性。
【定义】
typedef struct {
td_u8 saturation; /* RW; Range: [0, 0xFF]; Format:8.0; set the manual saturation of CCM */
} ot_isp_saturation_manual;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_saturation_auto¶
【说明】
定义自动饱和度属性。
【定义】
typedef struct {
td_u8 sat[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0, 0xFF]; should be decreased with increasing ISO */
} ot_isp_saturation_auto;
【成员】
表 1 sat[16]在不同的增益情况下的设置值
【注意事项】
无
【相关数据类型及接口】
ot_isp_color_matrix_attr¶
【说明】
定义ISP颜色矩阵属性。
【定义】
typedef struct {
ot_op_mode op_type;
ot_isp_color_matrix_manual manual_attr;
ot_isp_color_matrix_auto auto_attr;
} ot_isp_color_matrix_attr;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_color_matrix_auto¶
【说明】
定义自动颜色校正矩阵属性。
【定义】
typedef struct {
td_bool iso_act_en; /* RW; Range: [0, 1]; Format:1.0; if enabled, CCM will bypass in low light */
td_bool temp_act_en; /* RW; Range: [0, 1]; Format:1.0; if enabled, CCM will bypass when color temperature is larger than 8000K or less than 2500K */
td_u16 ccm_tab_num; /* RW; Range: [0x3, 0x7]; Format:16.0; The number of CCM matrixes */
ot_isp_color_matrix_param ccm_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_color_matrix_auto;
【成员】
ccm_tab[OT_ISP_CCM_MATRIX_NUM] |
【注意事项】
当ot_isp_saturation_attr中的op_type 为 OT_OP_MODE_AUTO,使用自动饱和度调节功能时,iso_act_en 和 temp_act_en功能生效。当op_type为OT_OP_MODE_MANUAL,使用手动饱和度调节功能时,iso_act_en 和temp_act_en功能不生效。
iso_act_en 功能指的是极低照度下(ISO大于12800)逐渐Bypass CCM,将由饱和度数组sat[16]控制得到的CCM矩阵逐渐调向接近单位阵,这时CCM的实际饱和度会和饱和度数组中设定的不一致。用户关闭该功能后,极低照度下,饱和度数组仍生效。
temp_act_en功能指的是在高色温(大于8000K)和低色温场景(小于2500K),AWB可能未完全恢复,此时采用高饱和度CCM矩阵,会加剧AWB的偏色程度。比如钠灯场景,AWB校正后白色区域蓝色稍有不足,采用高饱和度CCM矩阵,白色区域的蓝色分量可能为0,图像整体偏黄。使能temp_act_en,在高低色温下逐渐BypassCCM,将由饱和度数组sat[16]控制得到的CCM矩阵逐渐调向接近单位阵,优化类似场景颜色表现。
颜色校正矩阵的数据格式,应与校正工具提供的保持一致。
【相关数据类型及接口】
ot_isp_color_matrix_param¶
【说明】
定义不同色温下自动颜色校正矩阵系数。
【定义】
typedef struct {
td_u16 color_temp; /* RW; Range: [500, 30000]; Format:16.0; the current color temperature */
td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE]; /* RW; Range: [0x0, 0xFFFF]; Format:8.8;CCM matrixes for different color temperature */
} ot_isp_color_matrix_param;
【成员】
不同色温下的颜色校正矩阵,8bit小数精度。bit 15是符号位,0表示正数,1表示负数,例如0x8010表示-16。bit12,13,14是无效的,即正数从0x0000到0x0FFF,负数从0x8000到0x8FFF,是CCM的合理参数。 |
【注意事项】
颜色校正矩阵的数据格式,应与校正工具提供的保持一致。
当饱和度为自动的时候,实际生效的CCM参数和AWB算法反馈的当前色温值,自动饱和度参数有关。当饱和度为手动的时候,实际生效的CCM参数和AWB算法反馈的当前色温值有关。
不同色温下的自动颜色校正矩阵,应满足灰色数据不变的约束条件,即矩阵中每行参数的和为0x100。请通过ot_isp_wb_info查询当前生效的颜色校正矩阵的值,确认每行参数的和为0x100。
在调高饱和度时,如果需要配置的CCM值超过了最大正值0x0FFF或最小负值0x8FFF,会将CCM参数限制在合理范围内再配置。在这组异常的CCM参数下,图像中饱和度高的颜色可能会发生亮度变暗的现象,建议通过ot_isp_wb_info查询当前生效的CCM值,确认生效的值未发生clip。
【相关数据类型及接口】
ot_isp_color_matrix_manual¶
【说明】
定义手动颜色校正矩阵属性。
【定义】
typedef struct {
td_bool sat_en; /* RW; Range: [0, 1]; Format:1.0;
If sat_en=1, the active CCM = SatMatrix * ManualMatrix, else the active CCM = ManualMatrix */
td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE]; /* RW; Range: [0x0, 0xFFFF]; Format:8.8; Manual CCM matrix, */
} ot_isp_color_matrix_manual;
【成员】
【注意事项】
手动CCM模式下,用户可通过sat_en参数选择饱和度是否生效。
sat_en = 1,生效的CCM = Manual CCM * Saturation CCM,用户可用该功能确定不同照度下的饱和度数组;
sat_en = 0,生效的CCM = Manual CCM。
sat_en = 1,生效的CCM会自动修正,保持每行参数的和为0x100。sat_en = 0,生效的CCM为手动设定参数值。
【相关数据类型及接口】









