ISP 开发参考(1~5)
前言
本文为使用ISP开发的程序员而写,目的是为您在开发过程中遇到的问题提供解决办法和帮助。
说明:
- 本文如无特殊说明,Hi3519DV500与Hi3516DV500内容一致,Hi3516CV608与Hi3516CV610内容一致。
- 根据功能不同,将Hi3516CV610分为10B/00S/20S/00G/20G型号,正文描述以Hi3516CV610-20S为例,如无特殊说明,则内容一致。
- 本文描述中,cmos_ex.h在Hi3516CV610芯片上对应文件为cmos_param.h。
- Hi3516CV608不支持WDR。
与本文档相对应的产品版本如下。
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
概述
概述
ISP通过一系列数字图像处理算法完成对数字图像的效果处理。主要包括3A、坏点校正、去噪、强光抑制、背光补偿、色彩增强、镜头阴影校正等处理。ISP包括逻辑部分以及运行在其上的firmware。这里主要介绍ISP的用户接口。
功能描述
ISP的控制结构如图1所示,lens将光信号投射到sensor的感光区域后,sensor经过光电转换,将Bayer格式的原始图像送给ISP,ISP经过算法处理,输出RGB空间域的图像给后端的视频采集单元。在这个过程中,ISP通过运行在其上的firmware对ISP逻辑,lens和sensor进行相应控制,进而完成自动光圈、自动曝光、自动白平衡等功能。其中,firmware的运转靠视频采集单元的中断驱动。PQ Tools工具通过网口或者串口完成对ISP的在线图像质量调节。
ISP由ISP逻辑及运行在其上的Firmware组成,逻辑单元除了完成一部分算法处理外,还可以统计出当前图像的实时信息。Firmware通过获取ISP逻辑的图像统计信息,重新计算,反馈控制lens、sensor和ISP逻辑,以达到自动调节图像质量的目的。

ISP逻辑主要流程、具体概念和功能点请参见芯片手册。
架构
ISP的Firmware包含三部分,一部分是ISP控制单元和基础算法库,一部分是AE/AWB算法库,一部分是sensor库。Firmware设计的基本思想是单独提供3A算法库,由ISP控制单元调度基础算法库和3A算法库,同时sensor库分别向ISP基础算法库和3A算法库注册函数回调,以实现差异化的sensor适配。ISP firmware架构如图1所示。

不同的sensor都以回调函数的形式,向ISP算法库注册控制函数。ISP控制单元调度基础算法库和3A算法库时,将通过这些回调函数获取初始化参数,并控制sensor,如调节曝光时间、模拟增益、数字增益,控制lens步进聚焦或旋转光圈等。
AE/AWB算法库和sensor库不能调用ISP其他接口,否则可能会出现调用接口卡住问题。
开发模式
SDK支持用户使用多种开发模式:
-
用户使用SDK的3A算法库。这时用户需要根据ISP基础算法库和3A算法库给出的sensor适配接口去适配不同的sensor。每款sensor对应一个文件夹,文件夹中包含两个主要文件:
-
sensor_cmos.c
该文件中主要实现ISP需要的回调函数,这些回调函数中包含了sensor的适配算法,不同的sensor可能有所不同。
-
sensor_ctrl.c
sensor的底层控制驱动,主要实现sensor的读写和初始化动作。用户可以根据sensor的datasheet进行这两个文件的开发,必要的时候可以向sensor厂家寻求支持。
-
-
用户根据ISP库提供的3A算法注册接口,实现自己的3A算法库开发。这时用户需要根据ISP基础算法库和用户的3A算法库给出的sensor适配接口去适配不同的sensor。
- 用户部分使用SDK中3A算法库,部分实现自己的3A算法库。例如AE使用libss_mpi_ae.a,AWB使用自己的3A算法库。SDK提供了灵活多变的支持方式。
内部流程
Firmware内部流程分两部分,如图1所示。一部分是初始化任务,主要完成ISP控制单元的初始化、ISP基础算法库的初始化、3A算法库的初始化,包括调用sensor的回调获取sensor差异化的初始化参数;另一部分是动态调节过程,在这个过程中,firmware中的ISP控制单元调度ISP基础算法库和3A算法库,实时计算并进行相应控制。Firmware的软件结构如图2所示。


软件流程
ISP作为前端采集部分,需要和视频采集单元(VIU)协同工作。ISP初始化和基本配置完成后,需要VIU进行接口时序匹配。一是为了匹配不同sensor的输入时序,二是为ISP配置正确的输入时序。待时序配置完成后,ISP就可以启动Run来进行动态图像质量调节。此时输出的图像被VIU采集,进而送去显示或编码。软件使用流程如图1所示。
PQ Tools工具主要完成在PC端进行动态图像质量调节,可以调节多个影响图像质量的因子,如去噪强度、色彩转换矩阵、饱和度等。

如果用户调试好图像效果后,可以使用PQ Tools工具提供的配置文件保存功能进行配置参数保存。在下次启动时系统可以使用PQ Tools工具提供的配置文件加载功能加载已经调节好的图像参数。
代码示例:
td_s32 ret;
ot_isp_3a_alg_lib ae_lib;
ot_isp_3a_alg_lib awb_lib;
ot_isp_pub_attr pub_attr;
pthread_t isp_pid;
ot_vi_pipe vi_pipe = 0;
/* 注册sensor库 */
ret = sensor_register_callback(vi_pipe, &ae_lib, &awb_lib);
if (ret != TD_SUCCESS) {
printf("register sensor failed!\n");
return ret;
}
/* 注册AE算法库 */
ae_lib.id = 0;
strncpy(ae_lib.lib_name, OT_AE_LIB_NAME, sizeof(OT_AE_LIB_NAME));
ret = ss_mpi_ae_register(isp_dev, &ae_lib);
if (ret != TD_SUCCESS) {
printf("ss_mpi_ae_register failed with %#x!\n", ret);
return ret;
}
/* 注册AWB算法库 */
awb_lib.id = isp_dev;
strncpy(awb_lib.lib_name, OT_AWB_LIB_NAME, sizeof(OT_AWB_LIB_NAME));
ret = ss_mpi_awb_register(isp_dev, &awb_lib);
if (ret != TD_SUCCESS) {
printf("ss_mpi_awb_register failed with %#x!\n", ret);
return ret;
}
/* 初始化ISP外部寄存器 */
ret = ss_mpi_isp_mem_init(vi_pipe);
if (ret != TD_SUCCESS) {
printf("ss_mpi_isp_mem_init failed with %#x!\n", ret);
return ret;
}
/* 配置图像公共属性 */
ret = ss_mpi_isp_set_pub_attr(vi_pipe, &pub_attr);
if (ret != TD_SUCCESS) {
printf("ss_mpi_isp_set_pub_attr failed with %#x!\n", ret);
return ret;
}
/* 初始化ISP Firmware */
ret = ss_mpi_isp_init(vi_pipe);
if (ret != TD_SUCCESS) {
printf(”isp init failed!\n”);
return ret;
}
/* ss_mpi_isp_run单独启动线程运行 */
if (0 != pthread_create(&isp_pid, 0, ISP_Run, NULL))
{
printf("create isp running thread failed!\n");
return TD_FAILURE;
}
/* 启动VI/VO等业务 */
……
/* 停止VI/VO等业务 */
ret = ss_mpi_isp_exit (vi_pipe);
if (TD_SUCCESS != ret) {
printf(”isp exit failed!\n”);
return ret;
}
pthread_join(isp_pid, 0);
return TD_SUCCESS;
说明:
AE库有用到标准C库的数学库,请使用者在Makefile中增加 –lm 编译条件。
文件组织
ISP Firmware包含ISP库、3A库、sensor库、各算法库(包含dehaze库、ldci库、drc库、bnr库、acs库等)。Firmware中的drv生成的驱动程序向用户态上报ISP中断,并以该中断驱动Firmware的ISP控制单元运转。ISP控制单元从驱动程序中获取统计信息,并调度基础算法单元和3A算法库,最后通过驱动程序配置寄存器。
Src文件夹中包含ISP控制单元和基础算法单元,编译后生成libss_mpi_isp.a、libot_mpi_isp.a,即ISP库。3a文件夹中包含AE/AWB算法库,用户也可以基于统一的接口界面开发自己的3a算法。Sensor文件夹中包含了各个sensor的驱动程序,该部分代码开源。dehaze文件对应去雾算法程序,ldci文件对应局域自动对比度增强算法程序,drc文件夹对应动态范围压缩算法程序,bnr文件对应bayer域去噪算法程序,另外还有acs、ir_auto、extend_stats、calcficker等算法程序,该算法库部分代码不开源。
系统控制
功能概述
系统控制部分包含了ISP公共属性配置,初始化ISP Firmware、运行ISP firmware、退出ISP firmware,设置ISP各模块等功能。
API参考
本文档中接口,如无特殊说明,支持多进程。
- ss_mpi_isp_mem_init:初始化ISP外部寄存器。
- ss_mpi_isp_init:初始化ISP firmware。
- ss_mpi_isp_run:运行ISP firmware。
- ss_mpi_isp_run_once:运行ISP firmware 一次。
- ss_mpi_isp_exit:退出ISP firmware。
- ss_mpi_isp_set_pub_attr:设置ISP公共属性。
- ss_mpi_isp_get_pub_attr:获取ISP公共属性。
- ss_mpi_isp_set_fmw_state:设置ISP firmware状态。
- ss_mpi_isp_get_fmw_state:获取 ISP firmware状态。
- ss_mpi_isp_set_sns_slave_attr:设置从模式sensor行场同步信号。
- ss_mpi_isp_get_sns_slave_attr:获取从模式sensor行场同步信号。
- ss_mpi_isp_set_module_ctrl:设定ISP功能模块的控制。
- ss_mpi_isp_get_module_ctrl:获取ISP功能模块的控制。
- ss_mpi_isp_get_vd_time_out:获取ISP中断信息。
- ss_mpi_isp_sensor_reg_callback:ISP提供的sensor注册的回调接口。
- ss_mpi_isp_sensor_unreg_callback:ISP提供的sensor反注册的回调接口。
- ss_mpi_isp_ae_lib_reg_callback:ISP提供的AE库注册的回调接口。
- ss_mpi_isp_ae_lib_unreg_callback:ISP提供的AE库反注册的回调接口。
- ss_mpi_isp_awb_lib_reg_callback:ISP提供的AWB库注册的回调接口。
- ss_mpi_isp_awb_lib_unreg_callback:ISP提供的AWB库反注册的回调接口。
- ss_mpi_isp_set_bind_attr:设置ISP库与3A库、sensor的绑定关系。
- ss_mpi_isp_get_bind_attr:获取ISP库与3A库、sensor的绑定关系。
- ss_mpi_isp_set_dcf_info:设置DCF参数。
- ss_mpi_isp_get_dcf_info:获取DCF参数。
- ss_mpi_isp_set_pipe_differ_attr:设置多路ISP Pipe差异属性。
- ss_mpi_isp_get_pipe_differ_attr:获取多路ISP Pipe差异属性。
- ss_mpi_isp_set_ctrl_param:设置ISP的控制参数。
- ss_mpi_isp_get_ctrl_param:获取ISP的控制参数。
- ss_mpi_isp_set_mod_param:设置ISP模块参数。
- ss_mpi_isp_get_mod_param:获取ISP模块参数。
- ss_mpi_isp_set_smart_info:向ISP模块传递智能信息。
- ss_mpi_isp_get_smart_info:获取ISP模块智能信息。
- ss_mpi_isp_get_lightbox_gain:获取AWB在线标定得到的增益结构体。
- ss_mpi_isp_ir_auto:运行红外自动切换功能。
- ss_mpi_isp_set_be_frame_attr:设置ISP BE frame属性。
- ss_mpi_isp_get_be_frame_attr:获取ISP BE frame属性。
- ss_mpi_isp_get_noise_calibration:获取噪声模型标定参数。
- ss_mpi_isp_set_frame_info:设置ISP实时信息。
- ss_mpi_isp_get_frame_info:获取ISP实时信息。
- ss_mpi_isp_set_fe_roi_cfg:配置FE ROI区域大小,FE中算法可以只作用在ROI区域。
- ss_mpi_isp_get_fe_roi_cfg:获取FE ROI区域大小。
- ss_mpi_isp_mem_share:将ISP相关mmz buffer共享给特定的进程id。
- ss_mpi_isp_mem_unshare:解除ISP相关mmz buffer对进程id的共享。
- ss_mpi_isp_mem_share_all:共享ISP相关mmz buffer以不限进程id的方式共享给所有进程。
- ss_mpi_isp_mem_unshare_all:取消共享ISP相关mmz buffer对所有进程的共享。
- ss_mpi_isp_set_noise_calibration:设置噪声模型标定参数。
ss_mpi_isp_mem_init
【描述】
初始化ISP外部寄存器。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 外部寄存器初始化前需要确保ko已加载,sensor向ISP注册了回调函数。
- 调用此接口前,需要先创建并且初始化对应的VI pipe。
- 调用本接口后,才能调用ss_mpi_isp_set_pub_attr图像公共属性。
- 不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、ss_mpi_awb_register、ss_mpi_isp_init、ss_mpi_isp_run、ss_mpi_isp_exit接口在同一个进程调用。
- 当前业务正在运行ss_mpi_isp_run时,不能调用本接口。
- 调用ss_mpi_isp_init之后,再调用ss_mpi_isp_exit后,才能再调用本接口重新初始化。
- LiteOS没有内核模块加载概念,Linux load ko过程对应LiteOS release/ko下sdk_init.c中执行的相关过程。
- 不支持相同vi_pipe时,多线程执行ISP创建和销毁(多线程同时调用sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档)、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit)
- ISP初始化后,需要一帧时间给硬件读取算法系数表。所以ss_mpi_isp_init后一帧时间内,不能调用ss_mpi_vi_stop_pipe接口(请参考《MPP媒体处理软件V6.0开发参考》的“视频输入”章节)。
【举例】
无
【相关主题】
ss_mpi_isp_init
【描述】
初始化ISP firmware。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 初始化前需要确保ko已加载,sensor向ISP注册了回调函数。
- 初始化前需要确保已调用ss_mpi_isp_mem_init初始化ISP外部寄存器。
- 初始化前需要确保已调用ss_mpi_isp_set_pub_attr图像公共属性。
- 不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_run、ss_mpi_isp_exit接口在同一个进程调用。
- 不支持重复调用本接口。
- 推荐调用ss_mpi_isp_exit后,再调用本接口重新初始化。
- LiteOS没内核模块加载概念,Linux load ko过程对应LiteOS release/ko下sdk_init.c中执行的相关过程。
- 不支持相同vi_pipe时,多线程执行ISP创建和销毁(多线程同时调用sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档)、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit)
- ISP初始化后,需要一帧时间给硬件读取算法系数表。所以ss_mpi_isp_init后一帧时间内,不能调用ss_mpi_vi_stop_pipe接口(请参考《MPP媒体处理软件V6.0开发参考》的“视频输入”章节)。
【举例】
无
【相关主题】
ss_mpi_isp_run
【描述】
运行ISP firmware。
【语法】
【参数】
|
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 运行前需要确保sensor已经初始化,并且向ISP注册了回调函数。
- 运行前需要确保已调用ss_mpi_isp_init初始化ISP。
- 不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档)、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit接口在同一个进程调用。
- 该接口是阻塞接口,建议用户采用实时线程处理。
- wdr模式下只支持在主pipe调用此接口,非主pipe调用将返回失败。
【举例】
无
【相关主题】
ss_mpi_isp_run_once
【描述】
运行ISP firmware 一次。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 运行前需要确保sensor已经初始化,并且向ISP注册了回调函数。
- 运行前需要确保已调用ss_mpi_isp_init初始化ISP。
- 不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档)、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit接口在同一个进程调用。
- 该接口是阻塞接口,建议用户采用实时线程处理。
- 该接口工作在离线时用户给BE灌RAW场景。在使用时,要等待上一次发送的RAW数据处理完成之后才能进行下一次的ss_mpi_isp_run_once接口调用+发送RAW数据(可通过在ss_mpi_vi_send_pipe_raw后调用接口ss_mpi_vi_get_chn_frame实现,接口具体信息请参见《MPP 媒体处理软件Vx.y 开发参考》的VI章节),具体参考【举例】中的伪代码。
- 使用ss_mpi_isp_run_once模式时处理视频流时,支持模式切换及分辨率切换,切换流程与使用ss_mpi_isp_run处理视频流类似:即切换过程中ISP模块无需退出,VI模块需要销毁重建。区别在于:使用ss_mpi_isp_run_once处理视频流时需要用户创建一个线程,参考示例中伪代码。在追求性能效果的视频处理场景,更推荐使用runbe方案,请参考ot_isp_run_wakeup_select章节,runonce更推荐使用在抓拍场景。
- ss_mpi_isp_run和ss_mpi_isp_run_once对同一个vi_pipe不能同时使用。
- 该接口不支持帧合成wdr模式。
- 该接口配置sensor时间为调用该接口后才配置sensor。与ss_mpi_isp_run接口在帧起始或者帧结束配置sensor 有差异。
- 使用该接口的pipe,使用ss_mpi_isp_get_vd_time_out 接口时,ot_isp_vd_type 变量仅支持OT_ISP_VD_BE_END类型。runonce场景下,建议get_vd_timeout接口和runonce送帧在同一个线程,等待一帧处理完成再继续送帧。
- 开启vi distribute group功能时,不支持isp runonce。
【举例】
-
上一次发送的raw数据处理完,才能继续调用ss_mpi_isp_run_once:
…… ret = ss_mpi_isp_run_once(vi_pipe); if (ret != TD_SUCCESS) { printf("ss_mpi_isp_run_once failed with %#x\n", ret); return ret; } ret = ss_mpi_vi_send_pipe_raw(vi_pipe, frame_info, frame_num, milli_sec); if (ret != TD_SUCCESS) { printf("ss_mpi_vi_send_pipe_raw failed with %#x\n", ret); return ret; } ret = ss_mpi_vi_get_chn_frame(vi_pipe, vi_chn, &yuv_frame_info, milli_sec); if (ret != TD_SUCCESS) { printf("ss_mpi_vi_get_chn_frame failed with %#x\n", ret); return ret; } ret = ss_mpi_isp_get_vd_time_out(vi_pipe, SS_ISP_VD_BE_END, milli_sec_vd_timeout); if (ret != TD_SUCCESS) { printf("get vd timeout, ret: 0x%x.\n", ret); } ret = ss_mpi_vi_release_chn_frame(vi_pipe, vi_chn, &yuv_frame_info); if (ret != TD_SUCCESS) { printf("ss_mpi_vi_release_chn_frame failed with %#x\n", ret); return ret; } -
使用ss_mpi_isp_run_once处理视频流时需要用户创建一个线程:
… sns_type = HY_S0603_MIPI_8M_30FPS_12BIT; g_wdr_mode = HI_WDR_MODE_2To1_LINE; sample_comm_vi_get_default_vi_cfg(sns_type, &vi_cfg); ret = pthread_create(&thread, NULL, sample_vi_send_wdr_frame_proc, (td_void *)&send_raw_thread_info); if (ret != TD_SUCCESS) { pthread_detach(thread); } sample_comm_vi_swith_mode_stop_vi(&vi_route_info); g_runonce_swtich = 1; sns_type = HY_S0603_MIPI_8M_30FPS_12BIT; g_wdr_mode = HI_WDR_MODE_NONE; sample_comm_vi_get_default_vi_cfg(sns_type, &vi_cfg); sample_comm_vi_swith_mode_start_vi(&vi_route_info); g_runonce_swtich = 0; … static void *sample_vi_send_wdr_frame_proc(void *args) { … sample_get_pipe_num(&pipe_num, g_wdr_mode); for (i = 0; i < pipe_num; i++) { ret = ss_mpi_vi_set_pipe_frame_dump_attr(vi_pipe[i], &dump_attr); if (ret != HI_SUCCESS) { printf("set pipe[%d] dump attr failed\n", vi_pipe[i]); return HI_NULL; } } ret = ss_mpi_vi_set_pipe_frame_source(master_pipe, HI_VI_PIPE_FRAME_SOURCE_USER); if (ret != TD_SUCCESS) { printf("set pipe[%d] user fraem source failed\n", master_pipe); return HI_NULL; } while (1) { td_s32 millsec = 100; if (g_runonce_switch == 1) { ss_mpi_isp_run_once(master_pipe); } for (i = 0; i < pipe_num; i++) { ret = ss_mpi_vi_get_pipe_frame(vi_pipe[i], &dump_frame_info[i], millsec); if (ret != TD_SUCCESS) { printf("get pipe[%d] frame failed\n", vi_pipe[i]); goto release; } } ret = sample_vi_send_pipe_wdr_frame(master_pipe, dump_frame_info, pipe_num, millsec); if (ret != TD_SUCCESS) { printf("pipe[%d] send frame failed\n", master_pipe); } release: for (i = i - 1; i >= 0; i--) { (hi_void)ss_mpi_vi_release_pipe_frame(vi_pipe[i], &dump_frame_info[i]); } } return HI_NULL; }
【相关主题】
ss_mpi_isp_exit
【描述】
退出ISP firmware。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 调用ss_mpi_isp_init和ss_mpi_isp_run之后,再调用本接口退出ISP firmware。
- 不支持多进程,必须与sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档)、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_run接口同在一个进程调用。
- 支持重复调用本接口。
- 在拼接模式时,必须先退出主pipe,后退出其他pipe。
- 不支持相同vi_pipe时,多线程执行ISP创建和销毁(多线程同时调用sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit)
- 推荐调用ss_mpi_isp_init之后,再调用本接口。
- 多进程调用ISP接口场景,当主进程调用本接口退出当前pipe ISP firmware后,当前pipe ISP资源已经销毁,其他进程不能再调用ISP的接口去操作当前pipe,否则可能会访问非法资源导致未知错误。
【举例】
无
【相关主题】
ss_mpi_isp_set_pub_attr
【描述】
设置ISP公共属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 图像属性即对应的sensor的采集属性。
- ISP启动时,需要确保已调用ss_mpi_isp_mem_init初始化ISP外部寄存器。
- ISP支持运行过程中动态裁剪图像的起始位置。
-
调用本接口后ISP内的处理流程:
- ISP firmware判断图像WDR模式、分辨率、帧率是否变化,若都不变则直接返回;否则,ISP firmware会调用sensor cmos.c里面的cmos_set_wdr_mode、cmos_set_image_mode函数改变sensor模式;
- 若sensor模式不改变(返回值-2),判断ISP的裁剪宽高是否变化,若有变化,ISP firmware切换分辨率,并调用sensor_init函数重新配置sensor;
- 若sensor模式改变(返回值为0),则ISP firmware会调用sensor_init函数重新配置sensor;
- ISP firmware将帧率信息传给AE库,并决定是否更改帧率。
-
若调用本接口实现动态分辨率和帧率切换时sensor模式发生了改变,请参照sample提供的切换流程操作(先停掉Vi设备,再创建Vi设备,然后设置ss_mpi_isp_set_pub_attr进行切换)。当前系统不支持在VI并行模式下切换帧率。另外,动态分辨率和帧率切换时,切换的分辨率和帧率必须有一项要不同(即不能切换到自己本身,sensor序列需要发生变化),否则,sensor可能不会重新初始化而导致异常,模式切换时也不能切换到自己本身。对于ISP输入同样分辨率和帧率但需要采用不同初始化序列的情况,可以利用不同的sns_mode来实现模式切换。
- 拼接通路切换时,基本和非拼接通路切换一致,但是在将所有涉及pipe的vi设备都停止之后,需要再重新设置vi 拼接属性参数,调用接口注意事项请见《MPP媒体处理软件Vx.y开发参考》中“视频输入”的ss_mpi_vi_set_stitch_grp_attr接口。之后再重新创建所有涉及pipe的Vi设备,通过ss_mpi_isp_query_inner_state_info接口等待所有pipe切换完成,(拼接需要等待所有pipe切换完成才可以start vi pipe和enable vi chn,非拼只需要等待主pipe切换完成。模式切换时,需要等待拼接主pipe切换完成后再进行其他拼接pipe的切换)。并且设置ss_mpi_isp_set_pub_attr进行切换,具体可以参照sample提供的非拼接通路的切换流程操作,拼接切换需要在sample的基础上增加适配重新设置VI拼接属性参数和等待所有pipe切换完成操作。
-
使用ISP提供的裁剪功能时,需要注意:
动态裁剪图像的宽高时会重新初始化sensor,切换流程参照sample提供的切换流程(先停掉Vi设备,再创建Vi设备,然后设置ss_mpi_isp_set_pub_attr进行切换)。在线WDR模式下不支持ISP的裁剪功能。
当输入为YUV时,裁剪不生效。
-
用户可以更改sensor的xxx_cmos.c里面的cmos_set_image_mode函数调整sensor模式切换的顺序。如只提供了5M30fps和1080P60fps初始化序列的sensor,若要运行1080P30fps,可以从5M30fps裁剪得到,也可以从1080P60fps降帧得到,修改cmos_set_image_mode函数实现即可。
- 通过本接口配置超过sensor帧率范围的帧率时,该帧率值能配置到ISP中,但是sensor的xxx_cmos.c检测该帧率值超出范围而不做改变帧率的动作。此时应用层如果做模式切换(如:线性模式切WDR模式),sensor重新初始化,并从ISP中读取帧率,由于ISP中存的是前一个模式配置的超出范围的帧率,sensor重新配置帧率失败,会造成切换后的模式出现帧率异常,画面异常的现象。所以使用该接口配置帧率时不要配置超过sensor帧率范围的帧率值。
- 该接口不支持的情况:在不同的工作模式下从WDR切换到线性或在不同的工作模式下的分辨率或帧率的切换(例如不支持从OT_VI_ONLINE_VPSS_OFFLINE的WDR模式切换到OT_VI_PARALLEL_VPSS_OFFLINE 线性模式)。
- 切换线性模式和帧WDR模式时,同样会判断cmos_set_image_mode的返回值,因此线性模式和帧WDR模式应该采用不同的image_mode,才能保证切换成功。
- 物理pipe设置pub属性时,isp pub属性size必须小于等于VI dev_attr设置的size, 当VI pipe开启pre_crop裁剪时,需要小于等于VI pipe pre_crop裁剪之后的size。
- 物理pipe接sensor出图时,设置pub属性,isp pub属性宽高必须等于VI的pipe_attr 设置的宽高。
-
vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM时,不建议使用拼接场景,原因如下:
- 虚拟pipe不支持配置sensor, 不建议使用拼接场景,不保证拼接效果,需自行保证拼接触发时机,自行保证拼接效果。
- 送帧时机不固定, 虚拟pipe依赖送帧时机生成同步参数,做多路同步,拼接效果可能存在问题。
- 默认海思AE使用FE的统计信息,vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM只有be统计信息,无法控制曝光值。
- OT_ISP_MAX_FE_PIPE_NUM的定义请见OT_ISP_MAX_PIPE_NUM章节。
-
模式切换时,CA/Auto color shading/CSC/FPN/Local BLC/Mesh shading/Radial Crop/BayerSharpen/热感等算法在cmos中无linear和wdr的2套参数,并且在模式切换时也不会自动切不同参数。如果模式切换的同时,需要进行参数切换,则需要在切换完成之后重新调度该算法外部接口进行配置。
- 开启VI PIPE离线卷绕功能,并且开启sensor从模式省内存功能时,从模式所有pipe调用接口修改帧率的操作要连续,中间时间间隔尽量少,而且所有pipe都要设置相同的帧率。
- 模式切换时,为保证切换前后亮度不发生大幅度变化,可以在切换时获取上一模式自动曝光的曝光结果,在切换到下一模式时作为初始曝光使用。
- mipi switch场景,要等待所有pipe通路起来稳定出帧后,再调用此接口动态设置帧率,否则会设置帧率失败。
【举例】
无
【相关主题】
ss_mpi_isp_get_pub_attr
【描述】
获取ISP公共属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_fmw_state
【描述】
设置ISP firmware状态。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
当state值为OT_ISP_FMW_STATE_FREEZE后,ISP Firmware的3A算法,Sharpen算法,DRC算法,Crosstalk removal算法,NR算法,去雾算法,去马赛克算法,黑电平算法,去FPN算法,ACM算法,WDR算法等会冻结,Sensor的寄存器也会停止配置,并保持冻结前的值。当state值为OT_ISP_FMW_STATE_RUN后,ISP firmware正常运行。
【举例】
无
【相关主题】
ss_mpi_isp_get_fmw_state
【描述】
获取ISP firmware状态。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_sns_slave_attr
【描述】
设置从模式sensor行场同步信号。
【语法】
td_s32 ss_mpi_isp_set_sns_slave_attr (ot_slave_dev slave_dev, const ot_isp_slave_sns_sync *sns_sync);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 从模式sensor需要其提供行同步XHS和场同步信号XVS,在这两个信号的控制下进行曝光与数据读出,这个接口主要配置同步信号发生模块,使其输出sensor要求的行场时序。此接口一般在sensor库里调用。
- 支持从模式sensor设置不同的时序配置,当前在xxx_cmos.c/xxx_sensor_ctl.c文件中设定当前sensor的时序配置。
- 从信号有两组绑定关系,首先pipe和vsync之间有绑定关系,其次vsync内部还可选择不同的信号源slave,即不同pipe可以选择不同的从信号设备vsync,不同的从信号设备vsync又可以选择不同的信号源slave。
- 通常拼接模式,如果是两路拼接,最好选择同一个从信号设备,如果大于2路拼接,那么不同sensor必然会连接到不同的从信号设备上,这时不同的从信号设备要选择相同的信号源,这样才能保证不同sensor之间的同步。
- 通常如果多路从sensor,不使用拼接模式而独立操作,那么这时不同的sensor要连接到不同的从信号设备上,并且从信号设备还要选择不同的信号源。
【举例】
4路 slave sensor拼接模式时,使用pipe的id分别是0/2/4/6,他们分别绑定在从信号vsync0、vsync0、vsync1、vsync1,因为是拼接模式,所以他们要选择相同的从信号源slave,假设是slave0,那么驱动中设置可以用如下方式进行赋值:
td_s32 g_SlaveBindDev[ISP_MAX_PIPE_NUM] = {0, x, 0, x, 1, x, 1, x};
td_u32 g_SlaveSensorModeTime[ISP_MAX_PIPE_NUM] = {0, x, 0, x, 0, x, 0, x};
4路 slave sensor非拼接模式时,使用pipe的id分别是0/2/4/6,他们需要分别绑定不同的从信号vsync0、vsync1、vsync2、vsync3,因为是非拼接模式,所以他们要选择不同的从信号源slave0、slave1、slave2、slave3,那么驱动中设置可以用如下方式进行赋值:
td_s32 g_SlaveBindDev[ISP_MAX_PIPE_NUM] = {0, x, 1, x, 2, x, 3, x};
td_u32 g_SlaveSensorModeTime[ISP_MAX_PIPE_NUM] = {0, x, 1, x, 2, x, 3, x};
这里x代表满足接口的任意值,无需关注。
【相关主题】
ss_mpi_isp_get_sns_slave_attr
【描述】
获取从模式sensor行场同步信号。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_module_ctrl
【描述】
设定ISP功能模块的控制。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 该接口可控制ISP各功能模块的使能。
- 该接口对应的寄存器与各模块的使能寄存器复用。
【举例】
无
【相关主题】
ss_mpi_isp_get_module_ctrl
【描述】
获取ISP功能模块的控制。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_get_vd_time_out
【描述】
获取ISP中断信息。
【语法】
td_s32 ss_mpi_isp_get_vd_time_out(ot_vi_pipe vi_pipe, ot_isp_vd_type isp_vd_type, td_u32 milli_sec);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 该接口表示获取ISP产生中断的相关信息,包括是否产生了中断,中断产生时的当前ISP帧信息,中断是采用的帧开始中断。
- milli_sec参数的单位是毫秒,指超时时间。即在milli_sec毫秒内,如果获取不到ISP中断,则函数返回。当milli_sec设为0时,表示阻塞模式,程序一直等待,直到获取到ISP中断才返回。
- 非阻塞模式获取中断信息超时,接口返回失败。
- 等待时被信号处理打断,未等到逻辑上报中断而提前返回,接口返回失败。
- 使用OT_ISP_VD_FE_END方式获取ISP中断信息并读取统计信息。在极端情况下(cpu占用率高等),会出现读取统计信息不及时情况。建议使用OT_ISP_VD_FE_START方式获取ISP中断来读取统计信息。
- N个进程同时调用该接口获取同样的isp_vd_type时,每个进程获取到的中断信息为实际中断信息的(1/N),比如在灌raw场景中会使用OT_ISP_VD_FE_START的方式来发送raw数据,如果此时其他进程再使用OT_ISP_VD_FE_START运行业务,会导致灌raw业务的帧率减半。
- KOL模式时,调用此接口获取isp状态可以去控制sensor standby,详细使用参考KOL sample.
【举例】
无
【相关主题】
无
ss_mpi_isp_sensor_reg_callback
【描述】
ISP提供的sensor注册的回调接口。
【语法】
td_s32 ss_mpi_isp_sensor_reg_callback(ot_vi_pipe vi_pipe, ot_isp_sns_attr_info *sns_attr_info , const ot_isp_sns_register *sns_register);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- sns_id是sensor库中自定义的值,主要用于校对向ISP注册的sensor和向3A注册的sensor是否为同一个sensor。
- ISP通过sensor注册的一系列回调接口,获取差异化的初始化参数,并控制sensor。
- 此接口不支持多进程操作。

【举例】
ot_vi_pipe vi_pipe = 0;
td_s32 ret;
ot_isp_sensor_register isp_register;
ot_isp_sns_attr_info sns_attr_info;
ot_isp_sns_exp_func * sensor_exp_func = &isp_register.sns_exp;
(td_void)memset_s(sensor_exp_func, sizeof(ot_isp_sns_exp_func), 0, sizeof(ot_isp_sns_exp_func)); sensor_exp_func->pfn_cmos_sensor_init = sensor_init;
sensor_exp_func->pfn_cmos_sensor_exit = sensor_exit;
sensor_exp_func->pfn_cmos_sensor_global_init = sensor_global_init;
sensor_exp_func->pfn_cmos_set_image_mode = cmos_set_image_mode;
sensor_exp_func->pfn_cmos_set_wdr_mode = cmos_set_wdr_mode;
sensor_exp_func->pfn_cmos_get_isp_default = cmos_get_isp_default;
sensor_exp_func->pfn_cmos_get_isp_black_level = cmos_get_isp_black_level;
sensor_exp_func->pfn_cmos_set_pixel_detect = cmos_set_pixel_detect;
sensor_exp_func->pfn_cmos_get_sns_reg_info = cmos_get_sns_regs_info;
sns_attr_info.sns_id= HY_S0603_ID;
ret = ss_mpi_isp_sensor_reg_callback(vi_pipe, &sns_id, &isp_register);
if (ret) {
printf("sensor register callback function failed!\n");
return ret;
}
【相关主题】
ss_mpi_isp_sensor_unreg_callback
ss_mpi_isp_sensor_unreg_callback
【描述】
ISP提供的sensor反注册的回调接口。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- sns_id是sensor库中自定义的值,主要用于校对向ISP反注册的sensor和向3A反注册的sensor是否为同一个sensor。
- 此接口不支持多进程操作。
- ISP运行过程中不允许去注册。
【举例】
ot_vi_pipe vi_pipe = 0;
ret = ss_mpi_isp_sensor_unreg_callback(vi_pipe, HY_S0603_ID);
if (ret) {
printf("sensor unregister callback function failed!\n");
return ret;
}
【相关主题】
ss_mpi_isp_sensor_reg_callback
ss_mpi_isp_ae_lib_reg_callback
【描述】
ISP提供的AE库注册的回调接口。
【语法】
td_s32 ss_mpi_isp_ae_lib_reg_callback(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *ae_lib, const ot_isp_ae_register *ae_register);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- ISP提供统一的AE算法库接口,初始化、运行、控制、销毁AE算法库。使用SDK提供的AE算法库时,不需要关注此接口;使用用户自己的AE算法库时,需要调用此接口向ISP注册回调函数。
- 此接口不支持多进程操作。
- 最大支持2个AE库注册。

【举例】
ot_isp_ae_register ae_register = {0};
td_s32 ret = TD_SUCCESS;
ae_register.ae_exp_func.pfn_ae_init = ae_init;
ae_register.ae_exp_func.pfn_ae_run = ae_run;
ae_register.ae_exp_func.pfn_ae_ctrl = ae_ctrl;
ae_register.ae_exp_func.pfn_ae_exit = ae_exit;
ret = ss_mpi_isp_ae_lib_reg_callback(vi_pipe, ae_lib, &ae_register);
if (TD_SUCCESS != ret) {
printf("Ot_ae register failed!\n");
}
【相关主题】
ss_mpi_isp_ae_lib_unreg_callback
ss_mpi_isp_ae_lib_unreg_callback
【描述】
ISP提供的AE库反注册的回调接口。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 使用SDK提供的AE算法库时,不需要关注此接口;使用用户自己的AE算法库时,需要调用此接口向ISP反注册回调函数。
- 此接口不支持多进程操作。
- ISP运行过程中不允许去注册。
【举例】
td_s32 ret = TD_SUCCESS;
ret = ss_mpi_isp_ae_lib_unreg_callback(vi_pipe, ae_lib);
if (TD_SUCCESS != ret) {
printf("Ot_ae unregister failed!\n");
}
return ret;
【相关主题】
ss_mpi_isp_ae_lib_reg_callback
ss_mpi_isp_awb_lib_reg_callback
【描述】
ISP提供的AWB库注册的回调接口。
【语法】
td_s32 ss_mpi_isp_awb_lib_reg_callback(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *awb_lib, const ot_isp_awb_register *awb_register);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- ISP提供统一的AWB算法库接口,初始化、运行、控制、销毁AWB算法库。使用AWB算法库时,不需要关注此接口;使用用户自己的AWB算法库时,需要调用此接口向ISP注册回调函数。
- 此接口不支持多进程操作。
- 最大支持2个AWB库注册。

【举例】
无
【相关主题】
ss_mpi_isp_awb_lib_unreg_callback
ss_mpi_isp_awb_lib_unreg_callback
【描述】
ISP提供的AWB库反注册的回调接口。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
- 使用SDK提供的AWB算法库时,不需要关注此接口;使用用户自己的AWB算法库时,需要调用此接口向ISP反注册回调函数。
- 此接口不支持多进程操作。
- ISP运行过程中不允许去注册。
【相关主题】
ss_mpi_isp_awb_lib_reg_callback
ss_mpi_isp_set_bind_attr
【描述】
设置ISP库与3A库、sensor的绑定关系。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 不是必须调用的接口,仅当注册多个AE/AWB库,并希望切换算法库时才需要调用。当注册多个AE/AWB库时,默认绑定的为最后一个注册的AE库和AWB库。
- 此接口不支持多进程操作。
【举例】
无
【相关主题】
ss_mpi_isp_get_bind_attr
【描述】
获取ISP库与3A库、sensor的绑定关系。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
此接口不支持多进程操作。
【举例】
无
【相关主题】
ss_mpi_isp_set_dcf_info
【描述】
设置DCF参数。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
调用该接口前须调用ss_mpi_vb_set_supplement_cfg(请参考《MPP媒体处理软件Vx.y开发参考》的“系统控制”小节), 将supplement_cfg配置为OT_VB_SUPPLEMENT_JPEG_MASK。
【举例】
ot_vb_supplement_cfg supplement_conf = {0};
supplement_conf.supplement_cfg = OT_VB_SUPPLEMENT_JPEG_MASK;
ret=ss_mpi_vb_set_supplement_cfg(&supplement_conf);
if(ret != TD_SUCCESS) {
printf("ss_mpi_vb_set_supplement_conf err 0x%x\n",ret);
}
......
ret=ss_mpi_vb_init();
if(ret != TD_SUCCESS) {
printf("ss_mpi_vb_init err 0x%x\n",ret);
}
......
ot_vi_pipe vi_pipe;
ret=ss_mpi_isp_init(vi_pipe);
......
ot_isp_dcf_info isp_dcf;
//will:119 105 108 108
isp_dcf.isp_dcf_const_info.image_description[0]=119;
isp_dcf.isp_dcf_const_info.image_description[1]=105;
isp_dcf.isp_dcf_const_info.image_description[2]=108;
isp_dcf.isp_dcf_const_info.image_description[3]=108;
isp_dcf.isp_dcf_const_info.image_description[4]=0;
//otsi: 104 105 115 105
isp_dcf.isp_dcf_const_info.make[0]=104;
isp_dcf.isp_dcf_const_info.make[1]=105;
isp_dcf.isp_dcf_const_info.make[2]=115;
isp_dcf.isp_dcf_const_info.make[3]=105;
isp_dcf.isp_dcf_const_info.make[4]=0;
//funy:102 117 110 121
isp_dcf.isp_dcf_const_info.model[0]=102;
isp_dcf.isp_dcf_const_info.model[1]=117;
isp_dcf.isp_dcf_const_info.model[2]=110;
isp_dcf.isp_dcf_const_info.model[3]=121;
isp_dcf.isp_dcf_const_info.model[4]=0;
//v.1.1.0: 118 46 49 46 49 46 48
isp_dcf.isp_dcf_const_info.software[0] = 118;
isp_dcf.isp_dcf_const_info.software[1] = 46;
isp_dcf.isp_dcf_const_info.software[2] = 49;
isp_dcf.isp_dcf_const_info.software[3] = 46;
isp_dcf.isp_dcf_const_info.software[4] = 49;
isp_dcf.isp_dcf_const_info.software[5] = 46;
isp_dcf.isp_dcf_const_info.software[6] = 48;
isp_dcf.isp_dcf_const_info.software[7] = 0;
isp_dcf.isp_dcf_update_info.iso_speed_ratings = 500;
isp_dcf.isp_dcf_update_info.exposure_bias_value = 5;
isp_dcf.isp_dcf_update_info.exposure_time = 0x00010004;
isp_dcf.isp_dcf_update_info.f_number = 0x0001000f;
isp_dcf.isp_dcf_const_info.focal_length = 0x00640001;
isp_dcf.isp_dcf_update_info.max_aperture_value = 0x00010001;
isp_dcf.isp_dcf_const_info.contrast =5;
isp_dcf.isp_dcf_const_info.custom_rendered = 0;
isp_dcf.isp_dcf_update_info.exposure_mode = 0;
isp_dcf.isp_dcf_const_info.focal_length_in35mm_film = 0;
isp_dcf.isp_dcf_const_info.gain_control = 1;
isp_dcf.isp_dcf_const_info.light_source = 1;
isp_dcf.isp_dcf_const_info.metering_mode = 1;
isp_dcf.isp_dcf_const_info.saturation = 1;
isp_dcf.isp_dcf_const_info.scene_capture_type = 1;
isp_dcf.isp_dcf_const_info.scene_type = 0;
isp_dcf.isp_dcf_const_info.sharpness =5;
isp_dcf.isp_dcf_update_info.white_balance = 0;
ss_mpi_isp_set_dcf_info(vi_pipe,&isp_dcf);
【相关主题】
ss_mpi_isp_get_dcf_info
【描述】
获取DCF参数。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_pipe_differ_attr
【描述】
设置多路ISP Pipe差异属性。
【语法】
td_s32 ss_mpi_isp_set_pipe_differ_attr(ot_vi_pipe vi_pipe, const ot_isp_pipe_diff_attr *pipe_differ);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 该接口不是必调接口,用于多路ISP拼接模式,对拼接效果要求更高时,可以通过标定工具(PQ_Stitching_Tool)标定出多路ISP的亮度、颜色等差异,通过此接口配置减少多路ISP输出图像的差异。该接口必须在ss_mpi_isp_init之后调用。
- Hi3516CV610不支持。
【举例】
无
【相关主题】
ss_mpi_isp_get_pipe_differ_attr
ss_mpi_isp_get_pipe_differ_attr
【描述】
获取多路ISP Pipe差异属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 该接口不是必调接口,与ss_mpi_isp_set_pipe_differ_attr配套使用,可以获取对应配置的多路ISP差异参数。
- Hi3516CV610不支持
【举例】
无
【相关主题】
ss_mpi_isp_set_pipe_differ_attr
ss_mpi_isp_set_ctrl_param
【描述】
设置ISP控制参数。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
接口使用限制详见ot_isp_ctrl_param中的注意事项。
【举例】
无
【相关主题】
ss_mpi_isp_get_ctrl_param
【描述】
获取ISP控制参数。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_mod_param
【描述】
设置ISP模块参数。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
接口使用限制详见ot_isp_mod_param中的注意事项。
【举例】
无
【相关主题】
ss_mpi_isp_get_mod_param
【描述】
获取ISP模块参数。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_smart_info
【描述】
向ISP模块传递智能信息。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
接口使用详见ot_isp_smart_info说明。
【举例】
无
【相关主题】
ss_mpi_isp_get_smart_info
【描述】
获取ISP模块智能信息。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_get_lightbox_gain
【描述】
获取AWB在线标定得到的增益结构体。
【语法】
td_s32 ss_mpi_isp_get_lightbox_gain(ot_vi_pipe vi_pipe, ot_isp_awb_calibration_gain *awb_calibration_gain);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
AWB参数在线标定的接口主要为了支撑消费类客户对运动DV量产时产线上的AWB参数的校正。该接口的调用环境限于均匀光源下的均匀背景,且色温范围限于4500K到6500K。
【举例】
无
【相关主题】
无
ss_mpi_isp_ir_auto
【描述】
运行红外自动切换功能。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libir_auto.a
【注意】
- 该接口需要一定时间稳定后才会判断是否需要切换,若想缩短该时间,可通过调用1~3次该接口方式,次数越多越容易误判,不推荐使用。
- 使用此接口时需要包含libir_auto.a。
【举例】
无
【相关主题】
无
ss_mpi_isp_set_be_frame_attr
【描述】
设置be frame属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
配置该接口获取WDR合成后的raw数据时,WDR模块之后的ISP BE所有模块都被bypass;需要联合配置vi chn的相关属性才能从vi的通道中写出raw(会导致视频流的中断),具体参考举例中的伪代码(当vi输出raw时,需要关闭radial crop功能,radial crop不支持raw流输入)。ss_mpi_vi_set_chn_attr/ss_mpi_vi_get_chn_frame/ss_mpi_vi_release_chn_frame具体请参考《MPP 媒体处理软件Vx.y 开发参考》“视频输入”章节。
【举例】
ot_pixel_format ori_pix_format;
ot_compress_mode ori_compress_mode;
ot_vi_chn_attr chn_attr;
ot_isp_be_frame_attr be_frame_attr;
/* 设置 vi chn_attr 为16bit raw数据写出*/
ss_mpi_vi_get_chn_attr(vi_pipe, vi_chn, &chn_attr);
ori_pix_format = chn_attr.pixel_format;
ori_compress_mode = chn_attr.compress_mode;
chn_attr.compress_mode = OT_COMPRESS_MODE_NONE;
chn_attr.pixel_format = OT_PIXEL_FORMAT_RGB_BAYER_16BPP;
ss_mpi_vi_set_chn_attr(vi_pipe, vi_chn, &chn_attr);
/* 设置dump frame的位置*/
be_frame_attr.frame_pos = OT_ISP_DUMP_FRAME_POS_AFTER_WDR;
ss_mpi_isp_set_be_frame_attr(vi_pipe, &be_frame_attr);
/* dump frame */
td_s32 milli_sec = 5000;
ot_video_frame_info frame_info;
ss_mpi_vi_get_chn_frame(vi_pipe, vi_chn, &frame_info, milli_sec);
/* save frame data */
……
/* release dump frame */
ss_mpi_vi_release_chn_frame(vi_pipe, vi_chn, &frame_info);
/* dump 完成后恢复正常输出状态*/
chn_attr.compress_mode = ori_compress_mode;
be_frame_attr
chn_attr.pixel_format = ori_pix_format;
ss_mpi_vi_set_chn_attr(vi_pipe, vi_chn, &chn_attr);
be_frame_attr.frame_pos = OT_ISP_DUMP_FRAME_POS_NORMAL;
ss_mpi_isp_set_be_frame_attr(vi_pipe, &be_frame_attr);
【相关主题】
ss_mpi_isp_get_be_frame_attr
【描述】
获取be frame 属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_get_noise_calibration
【描述】
获取噪声模型标定参数。
【语法】
td_s32 ss_mpi_isp_get_noise_calibration(ot_vi_pipe vi_pipe, ot_isp_noise_calibration *noise_calibration);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_set_frame_info
【描述】
设置ISP实时信息。
【语法】
【参数】
ISP实时信息。ot_isp_frame_info详情请参见《MPP 媒体处理软件 Vx.y 开发参考》"系统控制”章节。 |
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_get_frame_info
【描述】
获取ISP实时信息。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_set_fe_roi_cfg
【描述】
配置FE ROI区域大小,FE中算法可以只作用在ROI区域。
【语法】
【参数】
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 当ROI使能打开的时候, FE中的算法只会作用在ROI区域,保护非ROI区域数据,设置了ROI区域的raw直接送到BE处理,ROI和非ROI区域可能存在差异。
- Hi3516CV610不支持此接口。
【举例】
无
【相关主题】
无
ss_mpi_isp_get_fe_roi_cfg
【描述】
获取FE ROI区域大小。
【语法】
【参数】
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
Hi3516CV610不支持此接口。
【举例】
无
【相关主题】
无
ss_mpi_isp_mem_share
【描述】
将ISP相关mmz buffer共享给特定的进程id。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 只有分配mmz buffer的进程能注册共享,其它进程注册共享返回失败。
- 分配mmz buffer的进程不需要被共享,如果pid参数是分配mmz buffer的进程id,接口返回失败。
- 如果mmz buffer已经是全进程共享的状态,接口返回失败。
- 1个mmz buffer最多可以允许5个进程id共享(包含分配该mmz buffer的进程id)。
- 重复共享给同一个进程id,接口返回成功。
- 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。
- 需要在ss_mpi_isp_init之后调用,并且其他非分配mmz buffer的进程在调用相关接口前调用,否则会导致非分配mmz buffer的进程调用相关接口时mmap失败,相关接口只要涉及到读写ISP内核态分配的mmz buffer,则需要进行共享,例如访问外部寄存器、读取统计信息和获取dcf info等。
- ss_mpi_isp_set_debug接口访问时也需要进行共享,并且需要互相共享,共享后才允许将debug信息写出到相应进程分配的mmz buffer中。例如,进程B调用ss_mpi_isp_set_debug接口将其分配的MMZ提供给ISP进程A写出debug信息步骤:
- ISP主进程A调用ss_mpi_isp_mem_share/ss_mpi_isp_mem_share_all, 允许ISP主进程A写出debug信息到进程B;
- 进程B调用ss_mpi_sys_mem_share/ss_mpi_sys_mem_share_all接口,将进程B分配的debug mmz访问权限授予ISP主进程A,接口参见《MPP 媒体处理软件 V6.0 开发参考》中“系统控制”章节;
- 进程B调用ss_mpi_isp_set_debug接口将debug mmz信息传递给ISP主进程A。
【举例】
无
【相关主题】
ss_mpi_isp_mem_unshare
【描述】
解除ISP相关mmz buffer对进程id的共享。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 分配mmz buffer的进程可以解除对非分配mmz buffer的进程id的共享。
- 被共享的进程只能解除对本进程id的共享。
- 调用unshare接口解除共享之后不会立即生效,再重新调用需要映射mmz_buffer的接口时才会生效。
- 如果mmz buffer已经是全进程共享的状态,接口返回失败。
- 重复解除对进程id的共享,接口返回失败。
- 与ss_mpi_isp_mem_share接口配对使用。
- 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。
【举例】
无
【相关主题】
ss_mpi_isp_mem_share_all
【描述】
共享ISP相关mmz buffer以不限进程id的方式共享给所有进程。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 只有分配mmz buffer的进程能注册共享,其它进程注册共享返回失败。
- 调用unshare接口解除共享之后不会立即生效,再重新调用需要映射mmz_buffer的接口时才会生效。
- 重复共享给所有进程,接口返回成功。
- 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。
- 需要在ss_mpi_isp_init之后调用,并且其他非分配mmz buffer的进程在调用相关接口前调用,否则会导致非分配mmz buffer的进程调用相关接口时mmap失败,相关接口只要涉及到读写ISP内核态分配的mmz buffer,则需要进行共享,例如访问外部寄存器、读取统计信息和获取dcf info等。
- ss_mpi_isp_set_debug接口访问时也需要进行共享,并且需要互相共享,共享后才允许将debug信息写出到相应进程分配的mmz buffer中。例如,进程B调用ss_mpi_isp_set_debug接口将其分配的MMZ提供给ISP进程A写出debug信息步骤:
- ISP主进程A调用ss_mpi_isp_mem_share/ss_mpi_isp_mem_share_all, 允许ISP主进程A写出debug信息到进程B;
- 进程B调用ss_mpi_sys_mem_share/ss_mpi_sys_mem_share_all接口,将进程B分配的debug mmz访问权限授予ISP主进程A,接口参见《MPP 媒体处理软件 V6.0 开发参考》中“系统控制”章节;
- 进程B调用ss_mpi_isp_set_debug接口将debug mmz信息传递给ISP主进程A;
【举例】
无
【相关主题】
ss_mpi_isp_mem_unshare_all
【描述】
取消共享ISP相关mmz buffer对所有进程的共享。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
- 只有分配mmz buffer的进程可以解除对所有进程的共享。
- 重复解除对所有进程的共享,接口返回成功。
- 与ss_mpi_isp_mem_share_all接口配对使用。
- 调用此接口解除对所有进程共享的状态之后,仍然保留原有对进程id的共享状态。
- 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。
【举例】
无
【相关主题】
ss_mpi_isp_set_noise_calibration
【描述】
设置噪声模型标定参数。
【语法】
td_s32 ss_mpi_isp_set_noise_calibration(ot_vi_pipe vi_pipe, const ot_isp_noise_calibration *noise_calibration);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a
【注意】
Hi3519DV500不支持
【举例】
无
【相关主题】
无
数据类型
本文档中变量,如未明确指定取值范围,则默认是数据类型对应的取值范围。例如td_u8数据类型的变量取值范围为[0, 255]。本文档中变量,如未明确指定数据精度,则默认是1。
- OT_ISP_BAYER_CHN_NUM:定义bayer数据的通道数目。
- OT_ISP_MAX_PIPE_NUM:定义ISP 支持的PIPE数目的最大值。
- OT_ISP_WDR_MAX_FRAME_NUM:定义WDR合成的最大帧数。
- OT_ISP_EXP_RATIO_NUM:定义WDR曝光比的数目。
- OT_ISP_AUTO_ISO_NUM:定义ISO档位数。
- OT_ISP_STRIPING_MAX_NUM:定义ISP BE离线分块数目的最大值。
- OT_ISP_MAX_STITCH_NUM:定义ISP拼接组的最大个数。
- ALG_LIB_NAME_SIZE_MAX:定义3A算法库名称的最大字符数。
- OT_ISP_MAX_SNS_REGS:曝光结果写到sensor时需要配置的寄存器个数的最大值。
- OT_ISP_PEOPLE_CLASS_MAX:定义人形、人脸检测类型的最大数目。
- OT_ISP_TUNNEL_CLASS_MAX:定义隧道检测类型的最大数目。
- OT_ISP_AE_ZONE_ROW:AE水平方向的分区间数目。
- OT_ISP_BE_AE_ZONE_ROW:AE BE水平方向的分区间数目。
- OT_ISP_AE_ZONE_COLUMN:AE垂直方向的分区间数目。
- OT_ISP_BE_AE_ZONE_COLUMN:AE BE垂直方向的分区间数目
- OT_ISP_MG_ZONE_ROW:MG水平方向的分区间数目。
- OT_ISP_MG_ZONE_COLUMN:MG垂直方向的分区间数目。
- OT_ISP_WDR_EXP_RATIO_MAX:WDR曝光比最大值。
- OT_ISP_WDR_EXP_RATIO_MIN:WDR曝光比最小值。
- OT_ISP_AE_ROUTE_MAX_NODES:AE ROUTE节点的最大数目。
- OT_ISP_AE_ROUTE_EX_MAX_NODES:扩展AE ROUTE节点的最大数目。
- OT_ISP_BAYER_CALIBRATION_MAX_NUM:定义标定噪声模型参数的iso档位个数的最大值。
- OT_BAYER_CALIBRATION_PARA_NUM_NEW:定义标定噪声模型参数的最大个数。
- OT_ISP_CCM_MATRIX_SIZE:CCM矩阵参数个数。
- OT_DCF_DESCRIPTION_LENGTH:定义DCF描述信息的深度。
- ISP_SNS_SAVE_INFO_MAX:定义记录sensor info的最大帧数。
- OT_ISP_LSC_GRID_COL:Mesh Shading在x方向上划分的分块所需点的数量。
- OT_ISP_LSC_GRID_ROW:Mesh Shading在y方向上划分的分块所需点的数量。
- OT_ISP_LSC_GRID_POINTS:Mesh Shading LUT表增益点的数量。
- OT_ISP_ACS_LIGHT_NUM:ACS划分的光源数量。
- OT_ISP_ACS_CHN_NUM:ACS标定的R和B通道分量。
- OT_ISP_PRO_MAX_FRAME_NUM:表示拍照pro模式下最大支持的帧数。
- OT_ISP_FACE_NUM:定义ISP 最多支持人脸坐标数量。
- OT_ISP_PIPE_SENSOR_MAX_NUM:定义ISP 支持的单PIPE绑定的sensor个数的最大值。
- ot_rect:定义裁剪窗口起始位置和图像宽高。
- ot_point:定义坐标信息。
- ot_isp_bayer_format:定义输入Bayer图像数据格式。
- ot_mipi_crop_attr:mipi裁剪参数。
- ot_isp_bayer_raw_bit:定义输入Bayer图像数据位宽。
- ot_size:定义sensor输出的宽高。
- ot_color_gamut:定义通道色域属性。
- ot_isp_pub_attr:定义ISP公共属性。
- ot_op_mode:定义模块运行状态。
- ot_isp_fmw_state:定义ISPfirmware状态。
- ot_isp_slave_sns_sync:定义从模式sensor同步信号配置。
- ot_isp_wdr_mode:定义ISP宽动态模式。
- ot_wdr_mode:定义宽动态模式。
- ot_isp_module_ctrl:定义ISP功能模块的控制。
- ot_isp_dump_frame_pos:定义dump be frame的位置信息。
- ot_isp_be_frame_attr:定义be frame的相关配置信息。
- ot_isp_vd_type:定义场同步信号。
- ot_isp_sns_attr_info:定义sensor属性。
- ot_isp_sns_register:定义sensor注册结构体。
- ot_isp_sns_exp_func:定义sensor回调函数结构体。
- ot_isp_cmos_sns_image_mode:定义sensor输出的宽高和帧率属性。
- ot_isp_cmos_lsc:定义LSC 参数。
- ot_isp_acs_y_shading_lut:定义Auto Color Shading亮度分量上的校正强度表。
- ot_isp_acs_color_shading_lut:定义Auto Color Shading颜色分量上的Lut表。
- ot_isp_acs_calib_param:定义Auto Color Shading的标定参数,用标定工具生成。
- ot_isp_cmos_acs:定义Auto Color Shading的CMOS参数。
- ot_isp_noise_calibration:定义NOISE校正参数。
- ot_isp_cmos_sns_max_resolution:定义sensor最大分辨率结构体。
- ot_isp_cmos_clut:定义CLUT结构体。
- ot_isp_cmos_sns_mode:定义sensor模式寄存器。
- ot_isp_cmos_dng_color_param:定义DNG白平衡校正系数。
- ot_isp_cmos_wdr_switch_attr:定义WDR切换属性。
- ot_isp_cmos_alg_key:定义ISP的各算法是否采用cmos中的默认配置的标志位。
- ot_isp_cmos_default:定义ISP基础算法库的初始化参数结构体。
- ot_isp_black_level_auto_attr:定义黑电平auto模式结构体。
- ot_isp_sns_total_size_attr:定义sensor写出数据的实际宽高。
- ot_isp_cmos_black_level:定义sensor的黑电平结构体。
- ot_isp_sns_regs_info:定义sensor的寄存器信息。
- ot_isp_3a_alg_lib:定义AE/AWB算法库结构体。
- ot_isp_bind_attr:定义ISP库与Sensor、3A库之间绑定关系的结构体。
- ot_isp_ctrl_proc_write:定义ISP的PROC信息。
- ot_isp_ctrl_cmd:定义ISP对3A的控制命令。
- ot_isp_stitch_attr:定义ISP拼接结构体。
- ot_isp_ae_register:定义AE注册结构体。
- ot_isp_ae_exp_func:定义AE回调函数结构体。
- ot_isp_ae_param:定义ISP提供给AE的初始化参数结构体。
- ot_isp_people_roi:定义ISP提供给AE的人形、人脸统计信息结构体。
- ot_isp_tunnel_roi:定义ISP提供给AE的隧道统计信息结构体。
- ot_isp_face_roi:定义ISP提供给AE的人脸快速收敛算法的结构体。
- ot_isp_people_type:定义ISP提供给AE的人形、人脸统计信息枚举类型。
- ot_isp_tunnel_type:定义ISP提供给AE的隧道统计信息枚举类型。
- ot_isp_smart_info:定义ISP提供给AE的人形、人脸统计信息结构体。
- ot_isp_fe_ae_stat_1:定义ISP FE中AE统计属性。
- ot_isp_be_ae_stat_1:定义ISP BE中AE统计属性。
- ot_isp_ae_info:定义ISP提供给AE的统计信息结构体。
- ot_isp_ae_stat_attr:定义AE库返回给ISP的配置寄存器结构体。
- ot_isp_ae_result:定义AE库返回给ISP的配置寄存器结构体。
- ot_isp_awb_register:定义AWB注册结构体。
- ot_isp_awb_exp_func:定义AWB回调函数结构体。
- ot_isp_awb_param:定义ISP提供给AWB的初始化参数结构体。
- ot_isp_awb_stat_1:定义AWB统计信息结构体。
- ot_isp_awb_stat_result:定义AWB统计信息结构体。
- ot_isp_awb_overlap_zone:定义拼接算法重叠区域。
- ot_isp_awb_overlap_all_zone:定义每一pipe图像左侧部分和右侧部分重叠区域位置。
- ot_isp_awb_info:定义ISP提供给AWB的统计信息结构体。
- ot_isp_awb_raw_stat_attr:定义AWB库返回给ISP的白点信息配置寄存器结构体。
- ot_isp_awb_overlap_result:定义AWB库返回的指定区域的ISP增益信息,用于拼接模块计算重叠区域AWB差异。
- ot_isp_awb_result:定义AWB库返回给ISP的增益配置寄存器结构体。
- ot_isp_awb_calibration_gain:定义AWB在线标定输出的增益结构体。
- ot_isp_dcf_const_info:定义DCF信息中用户配置参数。
- ot_isp_dcf_update_info:定义DCF信息中ISP实时更新参数。
- ot_isp_dcf_info:定义DCF信息参数结构体。
- ot_isp_pipe_diff_attr:定义多路ISP差异参数结构体。
- ot_isp_ob_stats_update_pos:定义读取ob区统计信息的位置。
- ot_isp_alg_run_select:定义是否屏蔽isp be中的算法模块。
- ot_isp_run_wakeup_select:定义那个中断驱动ISP firmware。
- ot_isp_ctrl_param:定义ISP控制参数结构体。
- ot_isp_mod_param:定义ISP模块参数结构体。
- ot_isp_quick_start_param:设定不带光敏AE快速启动参数结构体。
- ot_isp_init_attr:定义ISP第一次启动时AE/AWB的初始化参数结构体。
- ot_isp_sns_mirrorflip_type:定义sensor mirror-flip枚举。
- ot_isp_sns_blc_clamp:定义sensor黑电平矫正开关。
- ot_isp_sns_bus_ex:定义sensor通讯协议的扩展结构体。
- ot_isp_sns_obj:定义指向sensor的对象。
- ot_isp_sns_state:定义sensor相关全局变量参数结构体。
- ot_isp_awb_alg:定义AWB算法类型。
- ot_isp_ir_status:定义设备当前的红外状态。
- ot_isp_ir_switch_status:定义设备的红外切换状态。
- ot_isp_ir_auto_attr:定义红外自动切换属性。
- ot_isp_cmos_lblc:定义Local BLC结构体。
- ot_isp_fe_roi_cfg:定义fe roi区域的配置。
OT_ISP_BAYER_CHN_NUM
【说明】
定义bayer数据的通道数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
- ot_isp_awb_info
- ot_isp_awb_result
- ot_isp_awb_sensor_default
- ot_isp_pipe_diff_attr
- ot_isp_nr_snr_auto_attr
- ot_isp_nr_snr_manual_attr
- ot_isp_black_level_manual_attr
- ot_isp_inner_state_info
- ot_isp_ae_stats
- ot_isp_ae_stitch_stats
- ot_isp_mg_stats
- ot_isp_awb_attr
- ot_isp_dng_raw_format
- ot_isp_sns_state
OT_ISP_MAX_PIPE_NUM
【说明】
定义ISP 支持的PIPE数目的最大值。
【定义】
#define OT_ISP_MAX_FE_PIPE_NUM 4
#define OT_ISP_MAX_PHY_PIPE_NUM 7
#define OT_ISP_MAX_VIR_PIPE_NUM 8
#define OT_ISP_MAX_PIPE_NUM (OT_ISP_MAX_PHY_PIPE_NUM + OT_ISP_MAX_VIR_PIPE_NUM)
【注意事项】
- OT_ISP_MAX_PHY_PIPE_NUM表示物理pipe的个数,其中只有pipe [0, 2] 只支持raw输入,pipe 3支持yuv或者raw输入,pipe [4, 6]只支持yuv输入。
- OT_ISP_MAX_FE_PIPE_NUM表示,物理pipe[0, 3],支持raw输入。具体请参考《MPP 媒体处理软件 V6.0 开发参考》的“3.3.3 视频输入PIPE“小节和“3.3.1 功能框图“小节。
【相关数据类型及接口】
无
OT_ISP_WDR_MAX_FRAME_NUM
【说明】
定义WDR合成的最大帧数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
- ot_isp_ae_result
- ot_isp_ae_sensor_default
- ot_isp_fusion_attr
- ot_isp_nr_wdr_attr
- ot_isp_black_level_manual_attr
- ot_isp_inner_state_info
- ot_isp_ae_stats
- ot_isp_ae_stitch_stats
- ot_isp_fe_focus_stats
- ot_isp_sns_state
OT_ISP_EXP_RATIO_NUM
【说明】
定义WDR曝光比的数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AUTO_ISO_NUM
【说明】
定义ISO档位数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
- ot_isp_fswdr_auto_attr
- ot_isp_ldci_auto_attr
- ot_isp_ca_lut
- ot_isp_dp_dynamic_auto_attr
- ot_isp_nr_snr_auto_attr
- ot_isp_nr_tnr_auto_attr
- ot_isp_sharpen_auto_attr
- ot_isp_cr_attr
- ot_isp_anti_false_color_auto_attr
- ot_isp_demosaic_auto_attr
- ot_isp_cac_acac_auto_attr
- ot_isp_bayershp_auto_attr
- ot_isp_awb_cbcr_track_attr
- ot_isp_saturation_auto
OT_ISP_STRIPING_MAX_NUM
【说明】
定义ISP BE离线分块数目的最大值。
【定义】
Hi3519DV500:
Hi3516CV610:
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_MAX_STITCH_NUM
【说明】
定义ISP拼接组的最大个数。
【定义】
Hi3519DV500:
Hi3516CV610:
【注意事项】
Hi3516CV610不支持拼接。
【相关数据类型及接口】
ALG_LIB_NAME_SIZE_MAX
【说明】
定义3A算法库名称的最大字符数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_MAX_SNS_REGS
【说明】
曝光结果写到sensor时需要配置的寄存器个数的最大值。
【定义】
【注意事项】
如果sensor需要配置的寄存器个数过多,请注意系统压力较大时,尤其多路情况,是否存在中断长时间占用导致的异常情况。
【相关数据类型及接口】
OT_ISP_PEOPLE_CLASS_MAX
【说明】
定义人形、人脸检测类型的最大数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_TUNNEL_CLASS_MAX
【说明】
定义隧道检测类型的最大数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AE_ZONE_ROW
【说明】
AE水平方向的分区间数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_BE_AE_ZONE_ROW
【说明】
AE BE水平方向的分区间数目。
【定义】
Hi3519DV500:
Hi3516CV610:
【注意事项】
无
【相关数据类型及接口】
- ot_isp_ae_stat_attr
- ot_isp_ae_stats_cfg
- ot_isp_be_ae_grid_info
- ot_isp_ae_stats
- ot_isp_ae_stitch_stats
OT_ISP_AE_ZONE_COLUMN
【说明】
AE垂直方向的分区间数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_BE_AE_ZONE_COLUMN
【说明】
AE BE垂直方向的分区间数目。
【定义】
Hi3519DV500:
Hi3516CV610:
【注意事项】
无
【相关数据类型及接口】
- ot_isp_ae_stat_attr
- ot_isp_ae_stats_cfg
- ot_isp_be_ae_grid_info
- ot_isp_ae_stats
- ot_isp_ae_stitch_stats
OT_ISP_MG_ZONE_ROW
【说明】
MG水平方向的分区间数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_MG_ZONE_COLUMN
【说明】
MG垂直方向的分区间数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_WDR_EXP_RATIO_MAX
【说明】
WDR曝光比最大值。
【定义】
Hi3519DV500:
Hi3516CV610:
【注意事项】
无
【相关数据类型及接口】
ss_mpi_isp_set_wdr_exposure_attr.
OT_ISP_WDR_EXP_RATIO_MIN
【说明】
WDR曝光比最小值。
【定义】
【注意事项】
无
【相关数据类型及接口】
ss_mpi_isp_set_wdr_exposure_attr
OT_ISP_AE_ROUTE_MAX_NODES
【说明】
AE ROUTE节点的最大数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AE_ROUTE_EX_MAX_NODES
【说明】
扩展AE ROUTE节点的最大数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_BAYER_CALIBRATION_MAX_NUM
【说明】
定义标定噪声模型参数的iso档位个数的最大值。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_BAYER_CALIBRATION_PARA_NUM_NEW
【说明】
定义标定噪声模型参数的最大个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_CCM_MATRIX_SIZE
【说明】
CCM矩阵参数个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
- ot_isp_awb_result
- ot_isp_awb_ccm_tab
- ot_isp_awb_sensor_default
- ot_isp_pipe_diff_attr
- ot_isp_color_matrix_manual
- ot_isp_color_matrix_param
- ot_isp_wb_info
- ot_isp_init_attr
- ot_isp_dng_image_static_info
OT_DCF_DESCRIPTION_LENGTH
【说明】
定义DCF描述信息的深度。
【定义】
【注意事项】
无。
【相关数据类型及接口】
ISP_SNS_SAVE_INFO_MAX
【说明】
定义记录sensor info的最大帧数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_LSC_GRID_COL
【说明】
Mesh Shading在x方向上划分的分块所需点的数量。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_LSC_GRID_ROW
【说明】
Mesh Shading在y方向上划分的分块所需点的数量。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_LSC_GRID_POINTS
【说明】
Mesh Shading LUT表增益点的数量。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_ACS_LIGHT_NUM
【说明】
ACS划分的光源数量。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_ACS_CHN_NUM
【说明】
表示ACS标定的R和B通道分量。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_PRO_MAX_FRAME_NUM
【说明】
表示拍照pro模式下最大支持的帧数。
【定义】
【注意事项】
无
【相关数据类型及接口】
ss_mpi_snap_set_pipe_attr请参考《抓拍 使用指南》。
OT_ISP_FACE_NUM
【说明】
定义ISP 最多支持人脸坐标数量。
【定义】
【注意事项】
无
【相关数据类型及接口】
OT_ISP_PIPE_SENSOR_MAX_NUM
【说明】
定义ISP 支持的单PIPE绑定的sensor个数的最大值。
【定义】
【注意事项】
无
【相关数据类型及接口】
ot_rect
【说明】
定义裁剪窗口起始位置和图像宽高。
【定义】
【成员】
图像宽度,4对齐。使用shading功能时4对齐,否则shading功能会不正常。取值范围:[MinWidth, MaxWidth] |
|
图像高度,4对齐。使用shading功能时4对齐,否则shading功能会不正常。取值范围:[MinHeight, MaxHeight] |
表 1 支持的分辨率
【注意事项】
- 水平方向起始位置与图像宽度之和应小于sensor输出的图像宽度。
- 垂直方向起始位置与图像高度之和应小于sensor输出的图像高度,由于无法检测sensor实际输出的宽高,当不满足该条件时MPI不报错。
- 使能AF模块时,要求图像的最小宽度为256。
- ISP支持的分辨率限制如表1,通路视频输入的分辨率限制请见《MPP 媒体处理软件Vx.y开发参考》的“视频输入”章节。
【相关数据类型及接口】
无
ot_point
【说明】
定义坐标信息。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无
ot_isp_bayer_format
【说明】
定义输入Bayer图像数据格式。
【定义】
typedef enum {
OT_ISP_BAYER_RGGB = 0,
OT_ISP_BAYER_GRBG = 1,
OT_ISP_BAYER_GBRG = 2,
OT_ISP_BAYER_BGGR = 3,
OT_ISP_BAYER_BUTT
} ot_isp_bayer_format;
【成员】
【注意事项】
该格式可以从所使用sensor的DataSheet上获取,并和裁剪起始位置相关。
【相关数据类型及接口】
无
ot_mipi_crop_attr
【说明】
mipi裁剪参数。
【定义】
typedef struct {
td_bool mipi_crop_en;
[ot_rect](#ZH-CN_TOPIC_0000001388637013) mipi_crop_offset;
} ot_mipi_crop_attr;
【成员】
【注意事项】
PUB_ATTR中的mipi参数配置用于指导Dynamic BLC模块修改ob区统计范围。该参数配置需要与mipi裁剪的实际配置参数一致。
【相关数据类型及接口】
无
ot_isp_bayer_raw_bit
【说明】
定义输入Bayer图像数据位宽。
【定义】
typedef enum {
OT_ISP_BAYER_RAW_BIT_8BIT = 8,
OT_ISP_BAYER_RAW_BIT_10BIT = 10,
OT_ISP_BAYER_RAW_BIT_12BIT = 12,
OT_ISP_BAYER_RAW_BIT_14BIT = 14,
OT_ISP_BAYER_RAW_BIT_16BIT = 16,
OT_ISP_BAYER_RAW_BIT_BUTT
} ot_isp_bayer_raw_bit;
【成员】
【注意事项】
该格式可以从所使用sensor的DataSheet上获取,并和裁剪起始位置相关。
【相关数据类型及接口】
无
ot_size
【说明】
定义sensor输出的宽高。
【定义】
【成员】
表 1 sensor输出宽高取值范围
【注意事项】
图像宽度应小于sensor输出的图像宽度;图像高度应小于sensor输出的图像高度。
【相关数据类型及接口】
无
ot_color_gamut
【说明】
定义通道色域属性。
【定义】
typedef enum {
OT_COLOR_GAMUT_BT601 = 0,
OT_COLOR_GAMUT_BT709,
OT_COLOR_GAMUT_BT2020,
OT_COLOR_GAMUT_USER,
OT_COLOR_GAMUT_BUTT
} ot_color_gamut;
【成员】
【注意事项】
Hi3519DV500/Hi3516CV610不支持OT_COLOR_GAMUT_BT2020。
【相关数据类型及接口】
ot_isp_pub_attr
【说明】
定义ISP公共属性。
【定义】
typedef struct {
ot_rect wnd_rect;
ot_size sns_size;
td_float frame_rate;
ot_isp_bayer_format bayer_format;
ot_wdr_mode wdr_mode;
td_u8 sns_mode;
td_bool sns_flip_en;
td_bool sns_mirror_en;
ot_mipi_crop_attr mipi_crop_attr;
} ot_isp_pub_attr;
【成员】
【注意事项】
- 若sensor_flip_en为0时,mipi_crop_attr.y应设为0.
- 若sensor_flip_en为1时,mipi_crop_attr.y加mipi_crop_attr.height应等于sensor输出高度。
【相关数据类型及接口】
无
ot_op_mode
【说明】
定义模块运行状态。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
- ot_isp_fswdr_mdt_attr
- ot_isp_drc_attr
- ot_isp_ldci_attr
- ot_isp_dp_dynamic_attr
- ot_isp_nr_attr
- ot_isp_sharpen_attr
- ot_isp_anti_false_color_attr
- ot_isp_demosaic_attr
- ot_isp_fpn_attr
- ot_isp_dehaze_attr
- ot_isp_cac_attr
- ot_isp_bayershp_attr
- ot_isp_iris_attr
- ot_isp_me_attr
- ot_isp_exposure_attr
- ot_isp_wdr_exposure_attr
- ot_isp_hdr_exposure_attr
- ot_isp_smart_exposure_attr
- ot_isp_awb_ct_limit_attr
- ot_isp_awb_in_out_attr
- ot_isp_awb_lum_histgram_attr
- ot_isp_wb_attr
- ot_isp_color_matrix_attr
- ot_isp_saturation_attr
ot_isp_fmw_state
【说明】
定义ISPfirmware状态。
【定义】
typedef enum {
OT_ISP_FMW_STATE_RUN = 0,
OT_ISP_FMW_STATE_FREEZE,
OT_ISP_FMW_STATE_BUTT
} ot_isp_fmw_state;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_slave_sns_sync
【说明】
定义从模式sensor同步信号配置。
【定义】
typedef struct {
union {
struct {
td_u32 bit16_reserved : 16;
td_u32 bit_h_inv : 1;
td_u32 bit_v_inv : 1;
td_u32 bit12_reserved : 12;
td_u32 bit_h_enable : 1;
td_u32 bit_v_enable : 1;
} bits;
td_u32 bytes;
} cfg;
td_u32 vs_time;
td_u32 hs_time;
td_u32 vs_cyc;
td_u32 hs_cyc;
td_u32 hs_dly_cyc;
td_u32 slave_mode_time;
} ot_isp_slave_sns_sync;
【成员】
|
|
【注意事项】



【相关数据类型及接口】
无
ot_isp_wdr_mode
【说明】
定义ISP宽动态模式。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_wdr_mode
【说明】
定义宽动态模式。
【定义】
typedef enum {
OT_WDR_MODE_NONE = 0,
OT_WDR_MODE_BUILT_IN,
OT_WDR_MODE_QUADRA,
OT_WDR_MODE_2To1_LINE,
OT_WDR_MODE_2To1_FRAME,
OT_WDR_MODE_3To1_LINE,
OT_WDR_MODE_3To1_FRAME,
OT_WDR_MODE_4To1_LINE,
OT_WDR_MODE_4To1_FRAME,
OT_WDR_MODE_BUTT,
} ot_wdr_mode;
【成员】
【注意事项】
OT_WDR_MODE_BUILT_IN需要sensor支持。Hi3519DV500, Hi3516CV610只支持2to1 wdr模式,不支持3to1、4to1和OT_WDR_MODE_QUADRA模式。
【相关数据类型及接口】
无
ot_isp_module_ctrl
【说明】
定义ISP功能模块的控制。
【定义】
typedef union {
td_u64 key;
struct {
td_u64 bit_bypass_isp_d_gain : 1; /* RW;[0] */
td_u64 bit_bypass_anti_false_color : 1; /* RW;[1] */
td_u64 bit_bypass_crosstalk_removal : 1; /* RW;[2] */
td_u64 bit_bypass_dpc : 1; /* RW;[3] */
td_u64 bit_bypass_nr : 1; /* RW;[4] */
td_u64 bit_bypass_dehaze : 1; /* RW;[5] */
td_u64 bit_bypass_wb_gain : 1; /* RW;[6] */
td_u64 bit_bypass_mesh_shading : 1; /* RW;[7] */
td_u64 bit_bypass_drc : 1; /* RW;[8] */
td_u64 bit_bypass_demosaic : 1; /* RW;[9] */
td_u64 bit_bypass_color_matrix : 1; /* RW;[10] */
td_u64 bit_bypass_gamma : 1; /* RW;[11] */
td_u64 bit_bypass_fswdr : 1; /* RW;[12] */
td_u64 bit_bypass_ca : 1; /* RW;[13] */
td_u64 bit_bypass_csc : 1; /* RW;[14] */
td_u64 bit_bypass_radial_crop : 1; /* RW;[15], not support for Hi3516CV610 */
td_u64 bit_bypass_sharpen : 1; /* RW;[16] */
td_u64 bit_bypass_bayer_sharpen : 1; /* RW;[17] ,not support for Hi3516CV610*/
td_u64 bit_bypass_cac : 1; /* RW;[18]; */
td_u64 bit2_chn_select : 2; /* RW;[19:20] */
td_u64 bit_bypass_ldci : 1; /* RW;[21] */
td_u64 bit_bypass_pregamma : 1; /* RW;[22], not support for Hi3519DV500 and Hi3516CV610 */
td_u64 bit_bypass_ae_stat_fe : 1; /* RW;[23] */
td_u64 bit_bypass_ae_stat_be : 1; /* RW;[24] */
td_u64 bit_bypass_mg_stat : 1; /* RW;[25], not support for Hi3516CV610 */
td_u64 bit_bypass_af_stat_fe : 1; /* RW;[26], not support for Hi3516CV610 */
td_u64 bit_bypass_af_stat_be : 1; /* RW;[27] */
td_u64 bit_bypass_awb_stat : 1; /* RW;[28] */
td_u64 bit_bypass_clut : 1; /* RW;[29], not support for Hi3516CV610 */
td_u64 bit_bypass_rgbir : 1; /* RW;[30], not support for Hi3519DV500 and Hi3516CV610 */
td_u64 bit_bypass_lblc : 1; /* RW;[31],not support for Hi3516CV610 */
td_u64 bit_reserved32 : 32; /* H; [32:63] */
};
} ot_isp_module_ctrl;
【成员】
【注意事项】
WDR模式下,如果AWB统计信息在expander之后的位置,则开关WDR模块的使能,图像会有几帧颜色表现异常。在线WDR模式下,DRC使能时,不能同时bypass fswdr和nr,否则会导致帧率下降。
【相关数据类型及接口】
无
ot_isp_dump_frame_pos
【说明】
定义获取的帧数据在ISP BE中的位置。
【定义】
typedef enum {
OT_ISP_DUMP_FRAME_POS_NORMAL = 0,
OT_ISP_DUMP_FRAME_POS_AFTER_WDR = 1,
OT_ISP_DUMP_FRAME_POS_BUTT
} ot_isp_dump_frame_pos;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_be_frame_attr
【说明】
定义be frame的相关配置信息。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_vd_type
【说明】
定义ISP场同步信号。
【定义】
typedef enum {
OT_ISP_VD_FE_START = 0,
OT_ISP_VD_FE_END,
OT_ISP_VD_BE_END,
OT_ISP_VD_RUN_END,
OT_ISP_VD_STANDBY_FE_END,
OT_ISP_VD_BUTT
} ot_isp_vd_type;
【成员】
【注意事项】
- 在线和并行模式下不支持OT_ISP_VD_BE_END方式。
- 只在RUN BE模式下支持OT_ISP_VD_RUN_END,根据此状态,结合KOL其他配置,可保证获取到当帧AE收敛结果。
【相关数据类型及接口】
无
ot_isp_sns_attr_info
【说明】
定义ISP sensor属性。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无
ot_isp_sns_register
【说明】
定义sensor注册结构体。
【定义】
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
ot_isp_sns_exp_func
【说明】
定义sensor回调函数结构体。
【定义】
typedef struct {
td_void (*pfn_cmos_sns_init)(ot_vi_pipe vi_pipe);
td_void (*pfn_cmos_sns_exit)(ot_vi_pipe vi_pipe);
td_void (*pfn_cmos_sns_global_init)(ot_vi_pipe vi_pipe);
td_s32 (*pfn_cmos_set_image_mode)(ot_vi_pipe vi_pipe, ot_isp_cmos_sns_image_mode *sns_image_mode);
td_s32 (*pfn_cmos_set_wdr_mode)(ot_vi_pipe vi_pipe, td_u8 mode);
td_s32 (*pfn_cmos_get_isp_default)(ot_vi_pipe vi_pipe, ot_isp_cmos_default *def);
td_s32 (*pfn_cmos_get_isp_black_level)(ot_vi_pipe vi_pipe, ot_isp_cmos_black_level *black_level);
td_s32 (*pfn_cmos_get_blc_clamp_info)(ot_vi_pipe vi_pipe, td_bool *clamp_en);
td_s32 (*pfn_cmos_get_sns_reg_info)(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *sns_regs_info);
td_void (*pfn_cmos_set_pixel_detect)(ot_vi_pipe vi_pipe, td_bool enable);
td_s32 (*pfn_cmos_get_awb_gains)(ot_vi_pipe vi_pipe, td_u32 *sns_awb_gain);
td_s32 (*pfn_cmos_get_standby_cfg)(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *sns_regs_info);
td_s32 (*pfn_cmos_get_restart_cfg)(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *sns_regs_info);
td_s32 (*pfn_cmos_get_wrap_first_frame)(ot_vi_pipe vi_pipe, td_bool *first_frame);
} ot_isp_sns_exp_func;
【成员】
设置分辨率和帧率切换的回调函数指针。返回值0表示sensor模式发生改变,ISP会调用pfn_cmos_sns_init重新配置sensor;返回值为-2 sensor模式没有变化,ISP不会重新配置sensor。 |
|
获取sensor的黑电平值的回调函数指针,支持根据sensor增益动态调整黑电平值。若此处动态调整黑电平值,则外部只能通过接口ss_mpi_isp_set_black_level_attr的手动模式设置黑电平。 |
|
【注意事项】
- pfn_cmos_sensor_init, pfn_cmos_get_isp_default, pfn_cmos_get_isp_black_level, pfn_cmos_set_pixel_detect和pfn_cmos_get_sns_reg_info必须赋值,其他回调函数指针如果不需要赋值,应置为NULL。例如有的sensor不支持切换分辨率,那么pfn_cmos_set_image_mode需要置为NULL。
- Hi3519DV500不支持AWB增益在sensor配置,仅支持sensor侧获取当前AWB增益。
- 不支持切换AWB增益配置位置。
【相关数据类型及接口】
ot_isp_cmos_sns_image_mode
【说明】
定义sensor输出的宽高和帧率属性。
【定义】
typedef struct {
td_u16 width;
td_u16 height;
td_float fps;
td_u8 sns_mode;
} ot_isp_cmos_sns_image_mode;
【成员】
用于进行Sensor初始化序列的选择,在分辨率和帧率相同时,配置不同的sns_mode对应不同的初始化序列;其他情况,sns_mode默认为0。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_lsc
【说明】
定义LSC 参数。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_acs_y_shading_lut
【说明】
定义Auto Color Shading亮度分量上的校正强度表,也就是Gr/Gb分量的校正强度,用标定工具生成。
【定义】
typedef struct {
td_u16 g_param_high_ct[OT_ISP_LSC_GRID_POINTS];
td_u16 g_param_low_ct[OT_ISP_LSC_GRID_POINTS];
} ot_isp_acs_y_shading_lut;
【成员】
【注意事项】
算法根据场景从g_param_high_ct和g_param_low_ct两张表中进行插值。
【相关数据类型及接口】
ot_isp_acs_color_shading_lut
【说明】
定义Auto Color Shading颜色分量上的Lut表,用标定工具生成,算法会根据R/B分量上的Lut表,动态生成适合当前场景的Lut表。
【定义】
typedef struct {
td_float avg_rg_map[OT_ISP_LSC_GRID_POINTS];
td_float avg_bg_map[OT_ISP_LSC_GRID_POINTS];
td_float prof_rg_map[OT_ISP_LSC_GRID_POINTS];
td_float prof_bg_map[OT_ISP_LSC_GRID_POINTS];
} ot_isp_acs_color_shading_lut;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_acs_calib_param
【说明】
定义Auto Color Shading的标定参数,用标定工具生成。
【定义】
typedef struct {
td_s16 light_index[OT_ISP_ACS_LIGHT_NUM * OT_ISP_ACS_CHN_NUM];
td_float model_ar_min;
td_float model_ar_step;
td_float model_ab_min;
td_float model_ab_step;
td_s16 light_type_g_high;
td_s16 light_type_g_low;
} ot_isp_acs_calib_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_acs
【说明】
定义Auto Color Shading的CMOS参数。
【定义】
typedef struct {
ot_isp_acs_attr acs_attr;
ot_isp_acs_calib_param acs_calib_param;
ot_isp_acs_y_shading_lut acs_y_shading_lut;
ot_isp_acs_color_shading_lut acs_color_shading_lut;
} ot_isp_cmos_acs;
【成员】
【注意事项】
- 增益表的默认配置与ot_isp_cmos_alg_key中的bit1_acs标志位有关,如果bit1_acs=1,则采用cmos_ex.h中的配置值作为默认值;否则默认配置都为0。
- ACS模块的otp通过ot_isp_cmos_lsc中的lsc_lut.lsc_gain_lut接口实现,其中lsc_lut.lsc_gain_lut[0]配置为golden sample在D50下标定的表,lsc_lut.lsc_gain_lut[1[配置为当前镜头模组在D50下标定的表,可以解决镜头的一致性问题,模组与golden之间的差异越小,校正的效果越好。也可以在ISP启动后配置接口ss_mpi_isp_set_mesh_shading_gain_lut_attr中的lsc_gain_lut[0]和lsc_gain_lut[1],用法与上面描述一致。
【相关数据类型及接口】
ot_isp_noise_calibration
【说明】
定义NOISE 校正参数。
【定义】
typedef struct {
td_double calibration_coef[OT_BAYER_CALIBRATION_PARA_NUM_NEW]
} ot_isp_noise_calibration;
【成员】
calibration_coef[OT_BAYER_CALIBRATION_PARA_NUM_NEW] |
【注意事项】
无
【相关数据类型及接口】
ss_mpi_isp_get_noise_calibration
ot_isp_cmos_sns_max_resolution
【说明】
定义sensor最大分辨率结构体。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_clut
【说明】
定义CLUT结构体。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_sns_mode
【说明】
定义sensor模式寄存器。
【定义】
typedef struct {
td_u32 sns_id;
td_u8 sns_mode;
td_bool valid_dng_raw_format;
ot_isp_dng_raw_format dng_raw_format;
} ot_isp_cmos_sns_mode;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_dng_color_param
【说明】
定义DNG白平衡校正系数。
【定义】
typedef struct {
ot_isp_dng_wb_gain wb_gain1;
ot_isp_dng_wb_gain wb_gain2;
ot_isp_dng_ccm_tab ccm_tab1;
ot_isp_dng_ccm_tab ccm_tab2;
} ot_isp_cmos_dng_color_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_wdr_switch_attr
【说明】
定义WDR切换属性。
【定义】
【成员】
【注意事项】
在cmos_get_isp_default函数里根据WDR模式给exp_ratio赋默认值,所赋值要与cmos_get_ae_default中AE初始化的曝光比保持一致性:
- 若ae_sns_dft->man_ratio_enable为TRUE,exp_ratio与ae_sns_dft->arr_ratio的值相同;
- 若ae_sns_dft->man_ratio_enable为FALSE,exp_ratio为0x40。
【相关数据类型及接口】
ot_isp_cmos_alg_key
【说明】
定义ISP的各算法是否采用cmos中的默认配置的标志位。
【定义】
Hi3519DV500中定义:
typedef union {
td_u64 key;
struct {
td_u64 bit1_drc : 1; /* [0] */
td_u64 bit1_demosaic : 1; /* [1] */
td_u64 bit1_pregamma : 1; /* [2] Hi3519DV500不支持 */
td_u64 bit1_gamma : 1; /* [3] */
td_u64 bit1_sharpen : 1; /* [4] */
td_u64 bit1_ldci : 1; /* [5] */
td_u64 bit1_dpc : 1; /* [6] */
td_u64 bit1_lsc : 1; /* [7] */
td_u64 bit1_ge : 1; /* [8] */
td_u64 bit1_anti_false_color : 1; /* [9] */
td_u64 bit1_bayer_nr : 1; /* [10] */
td_u64 bit1_ca : 1; /* [11] */
td_u64 bit1_expander : 1; /* [12] */
td_u64 bit1_clut : 1; /* [13] */
td_u64 bit1_wdr : 1; /* [14] */
td_u64 bit1_dehaze : 1; /* [15] */
td_u64 bit1_cac : 1; /* [16] */
td_u64 bit1_acs : 1; /* [17] */
td_u64 bit1_bshp : 1; /* [18] */
td_u64 bit1_lblc : 1; /* [19] */
td_u64 bit44_reserved : 44; /* [20:63] */
};
} ot_isp_cmos_alg_key;
Hi3516CV610中定义:
typedef union {
td_u64 key;
struct {
td_u64 bit1_drc : 1; /* [0] */
td_u64 bit1_demosaic : 1; /* [1] */
td_u64 bit1_pregamma : 1; /* [2] Not support for Hi3516CV610 */
td_u64 bit1_gamma : 1; /* [3] */
td_u64 bit1_sharpen : 1; /* [4] */
td_u64 bit1_ldci : 1; /* [5] */
td_u64 bit1_dpc : 1; /* [6] */
td_u64 bit1_lsc : 1; /* [7] */
td_u64 bit1_ge : 1; /* [8] */
td_u64 bit1_anti_false_color : 1; /* [9] */
td_u64 bit1_bayer_nr : 1; /* [10] */
td_u64 bit1_ca : 1; /* [11] */
td_u64 bit1_expander : 1; /* [12] */
td_u64 bit1_clut : 1; /* [13] Not support for Hi3516CV610 */
td_u64 bit1_wdr : 1; /* [14] */
td_u64 bit1_dehaze : 1; /* [15] */
td_u64 bit1_cac : 1; /* [16] */
td_u64 bit1_acs : 1; /* [17] */
td_u64 bit1_bshp : 1; /* [18] Not support for Hi3516CV610 */
td_u64 bit1_lblc : 1; /* [19] Not support for Hi3516CV610 */
td_u64 bit44_reserved : 44; /* [20:63] */
};
} ot_isp_cmos_alg_key;
【成员】
【注意事项】
如果ISP的某个算法模块要使用cmos中的配置,要将对应的标志位置为1,否则采用的是算法内部的默认配置。
【相关数据类型及接口】
ot_isp_cmos_default
【说明】
定义ISP基础算法库的初始化参数结构体。
【定义】
typedef struct {
ot_isp_cmos_alg_key key;
const ot_isp_drc_attr *drc;
const ot_isp_demosaic_attr *demosaic;
const ot_isp_gamma_attr *gamma;
const ot_isp_sharpen_attr *sharpen;
const ot_isp_ldci_attr *ldci;
const ot_isp_dp_dynamic_attr *dpc;
const ot_isp_cmos_lsc *lsc;
const ot_isp_cr_attr *ge;
const ot_isp_anti_false_color_attr *anti_false_color;
const ot_isp_nr_attr *bayer_nr;
const ot_isp_ca_attr *ca;
const ot_isp_expander_attr *expander;
const ot_isp_cmos_clut *clut;
const ot_isp_wdr_fs_attr *wdr;
const ot_isp_dehaze_attr *dehaze;
const ot_isp_cac_attr *cac;
const ot_isp_bayershp_attr *bshp;
const ot_isp_cmos_acs *acs;
const ot_isp_cmos_lblc *lblc;
ot_isp_noise_calibration noise_calibration;
ot_isp_cmos_sns_max_resolution sns_max_resolution;
ot_isp_cmos_sns_mode sns_mode;
ot_isp_cmos_dng_color_param dng_color_param;
ot_isp_cmos_wdr_switch_attr wdr_switch_attr;
} ot_isp_cmos_default;
【成员】
【注意事项】
- sns_max_resolution、sns_mode、dng_color_param的默认值在cmos.c中,其他ISP基础算法的默认值均在cmos_ex.h中,如果用户需要修改默认值,请修改相应参数,如果用户需要对接新的sensor,请参考已经提供的其他sensor的默认值。
- ISP的各算法模块如果要采用cmos的默认配置,要在cmos_get_isp_default函数中将对应的标志位置1,并给该算法模块的cmos结构体指针赋值。如果cmos默认值配置的不合法,会导致算法初始化失败,同时run起来之后算法不能正常调节(调用算法的MPI接口会返回错误码0xa01c8047,同时logmpp中会有算法初始化失败的提示)。
【相关数据类型及接口】
ot_isp_black_level_auto_attr
【说明】
定义黑电平auto模式结构体。
【定义】
typedef struct {
td_bool update;
td_u16 black_level[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_BAYER_CHN_NUM];
} ot_isp_black_level_auto_attr;
【成员】
Sensor的黑电平是否会动态根据增益改变,取值范围:[0,1]。若设置为TD_TRUE,ISP内部始终使用cmos.c内联动的黑电平配置;此时若需要手动改变ISP的黑电平,则设置ss_mpi_isp_set_black_level_attr为手动模式。 |
|
【注意事项】
如果sensor的黑电平不会动态根据增益改变,update配置为TD_FALSE即可。
【相关数据类型及接口】
ot_isp_sns_total_size_attr
【说明】
定义sensor写出数据的实际宽高。
【定义】
【成员】
【注意事项】
若sensor写出的数据中包含ob区,为保证dynamic blc功能的正常,mipi的输出宽高要与ob_sensor_size一致。
【相关数据类型及接口】
ot_isp_cmos_black_level
【说明】
定义sensor的黑电平结构体。
【定义】
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_auto_attr auto_attr;
ot_isp_sns_total_size_attr sns_with_ob_attr;
} ot_isp_cmos_black_level;
【成员】
【注意事项】
- 如果black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_AUTO模式:若cmos.c里面的ot_isp_black_level_auto_attr结构体成员update设置为TD_TRUE,则表示始终使用cmos.c内联动的黑电平配置,而update设置为TD_FALSE,则表示使用cmos.c非联动的黑电平配置;
- 如果black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_MANUAL模式:此时cmos_ex.h文件中配置的手动黑电平配置会生效;
- 如果black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC,则采用dynamic blc算法统计OB区得到的黑电平配置值。
- vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM时,不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。Sensor built-in模式下不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。(数据类型请具体请参考OT_ISP_MAX_PIPE_NUM)
- 如果使能user_black_level_en,ISP的所有模块所使用的黑电平值为user_black_level。
- vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM时,不支持使能user_black_level_en;Sensor built-in模式下不支持使能user_black_level_en。(数据类型请具体请参考OT_ISP_MAX_PIPE_NUM)
【相关数据类型及接口】
ot_isp_sns_regs_info
【说明】
定义sensor的寄存器信息。
【定义】
typedef struct {
ot_isp_sns_type sns_type;
td_u32 reg_num;
td_u8 cfg2_valid_delay_max;
td_u32 exp_distance[OT_ISP_WDR_MAX_FRAME_NUM - 1]
ot_isp_sns_commbus com_bus;
ot_isp_sns_commbus com_bus_multi[OT_ISP_PIPE_SENSOR_MAX_NUM];
union {
ot_isp_i2c_data i2c_data[OT_ISP_MAX_SNS_REGS];
ot_isp_ssp_data ssp_data[OT_ISP_MAX_SNS_REGS];
};
td_u8 dev_addr_multi[OT_ISP_PIPE_SENSOR_MAX_NUM];
td_u32 sns_multi_num; /* RW;default 0 */
struct {
td_bool update;
td_u8 delay_frame_num;
td_u32 slave_vs_time;
td_u32 slave_bind_dev;
td_u32 slave_hs_time;
td_u32 slave_vs_cycle;
td_u32 slave_hs_cycle;
td_u32 slave_hs_dly_cyc;
} slv_sync;
td_bool config;
} ot_isp_sns_regs_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_3a_alg_lib
【说明】
定义AE/AWB算法库结构体。
【定义】
【成员】
【注意事项】
库的名字lib_name,用以区分不同的算法库;库的id,用以支持运行同一个算法库的多个实例。
【相关数据类型及接口】
无
ot_isp_bind_attr
【说明】
定义ISP库与Sensor、3A库之间绑定关系的结构体。
【定义】
typedef struct {
ot_sensor_id sns_id;
ot_isp_3a_alg_lib ae_lib;
ot_isp_3a_alg_lib af_lib;
ot_isp_3a_alg_lib awb_lib;
} ot_isp_bind_attr;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_ctrl_proc_write
【说明】
定义ISP的PROC信息。
【定义】
【成员】
【注意事项】
用户使用自己的3A算法,并需要支持3A算法的proc信息功能时,才需要关注此接口。
【相关数据类型及接口】
无
ot_isp_ctrl_cmd
【说明】
定义ISP对3A的控制命令。
【定义】
typedef enum {
OT_ISP_WDR_MODE_SET = 8000,
OT_ISP_PROC_WRITE,
OT_ISP_AE_FPS_BASE_SET,
OT_ISP_AE_BLC_SET,
OT_ISP_AE_RC_SET,
OT_ISP_AE_BAYER_FORMAT_SET,
OT_ISP_AE_INIT_INFO_GET,
OT_ISP_AWB_ISO_SET,
OT_ISP_CHANGE_IMAGE_MODE_SET,
OT_ISP_UPDATE_INFO_GET,
OT_ISP_FRAMEINFO_GET,
OT_ISP_ATTACHINFO_GET,
OT_ISP_COLORGAMUTINFO_GET,
OT_ISP_AWB_INTTIME_SET,
OT_ISP_BAS_MODE_SET,
OT_ISP_PROTRIGGER_SET,
OT_ISP_AWB_PIRIS_SET,
OT_ISP_AWB_SNAP_MODE_SET,
OT_ISP_AWB_ZONE_ROW_SET,
OT_ISP_AWB_ZONE_COL_SET,
OT_ISP_AWB_ZONE_BIN_SET,
OT_ISP_AWB_ERR_GET,
OT_ISP_DEHAZE_DEBUG_ATTR_SET,
OT_ISP_AE_DEBUG_ATTR_SET,
OT_ISP_CTRL_CMD_BUTT,
} ot_isp_ctrl_cmd;
【成员】
设置WDR 模式,将ISP控制单元的WDR模式配置到算法模块,此命令对应的参数数据类型是ot_wdr_mode。 |
|
设置写PROC信息,将算法模块的PROC信息配置到ISP控制单元,此命令对应的参数数据类型是ot_isp_ctrl_proc_write。 |
|
设置帧率,将ISP控制单元的帧率信息配置到AE算法模块,此命令对应的参数与ot_isp_pub_attr里面的frame_rate一样。 |
|
设置ISO值,将AE当前的ISO值配置到AWB模块,用于自动调整饱和度,此命令对应的参数与ot_isp_ae_result里面的iso一样。 |
|
设置图像分辨率切换标识,将ISP控制单元的图像分辨率标识配置到算法模块,此命令对应的参数数据类型为td_u8,参数值为0表示图像分辨率未切换,其他值表示图像分辨率已切换。 |
|
设置曝光量值,将AE当前的曝光量值配置到AWB模块,用于室内外检测,此命令对应的参数与ot_isp_ae_result里面的int_time一样。 |
|
【注意事项】
无
【相关数据类型及接口】
ot_isp_stitch_attr
【说明】
定义ISP拼接结构体。
【定义】
typedef struct {
td_bool stitch_enable;
td_bool main_pipe;
td_u8 stitch_pipe_num;
td_s8 stitch_bind_id[OT_ISP_MAX_STITCH_NUM];
} ot_isp_stitch_attr;
【成员】
【注意事项】
Hi3516CV610不支持。
【相关数据类型及接口】
无。
ot_isp_ae_register
【说明】
定义AE注册结构体。
【定义】
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
无
ot_isp_ae_exp_func
【说明】
定义AE回调函数结构体。
【定义】
typedef struct {
td_s32 (*pfn_ae_init)(td_s32 handle, const ot_isp_ae_param *ae_param);
td_s32 (*pfn_ae_run)(td_s32 handle,
const ot_isp_ae_info *ae_info,
ot_isp_ae_result *ae_result,
td_s32 reserved);
td_s32 (*pfn_thermo_run)(td_s32 handle,
const ot_isp_ae_info *ae_info,
ot_isp_thermo_result *thermo_result,
td_s32 reserved);
td_s32 (*pfn_ae_ctrl)(td_s32 handle, td_u32 cmd, td_void *value);
td_s32 (*pfn_ae_exit)(td_s32 handle);
} ot_isp_ae_exp_func;
【成员】
【注意事项】
- 调用ss_mpi_isp_init时将调用pfn_ae_init回调函数,以初始化AE算法库。
- 调用ss_mpi_isp_run时将调用pfn_ae_run回调函数,以运行AE算法库,计算得到sensor的曝光时间和增益、ISP的数字增益。
-
设计思路中,算法库实现ctrl接口用以改变内部运行状态,ctrl接口提供一个参数传输命令,提供一个void类型的指针传输数据。ctrl接口一方面以回调函数指针的形式注册给ISP库,ISP控制单元隐式调用一些命令控制算法库内部运行状态,另一方面,以算法库的用户接口的形式,从而用户可以改变算法库内部运行状态。示例:
td_s32 ae_ctrl_cmd(td_s32 handle, td_u32 cmd, td_void *value) { ae_check_pointer_return(value); switch (cmd) { case OT_ISP_WDR_MODE_SET: …… break; …… } return TD_SUCCESS; }运行时ISP控制单元会隐式调用pfn_ae_ctrl回调函数,通知AE算法库切换WDR和线性模式、设置FPS、通知配置sensor。
当前Firmware定义的ctrl命令详参ot_isp_ctrl_cmd。
-
调用ss_mpi_isp_exit时将调用pfn_ae_exit回调函数,以销毁AE算法库。
-
一个算法库支持初始化和运行多个实例,参数handle以区分不同的算法库实例。如果需要支持多个实例,可以用不同的alg_lib. id注册多次算法库。例如:
-
如果需要注册热感库非AE库(二者互斥),则需要调度热感库的注册函数进行注册,调用ss_mpi_isp_run时将调用pfn_thermo_run回调函数,热感库注册时需要使用热感sensor。注册操作可参考《Thermo开发参考》文档,例如:
ot_isp_3a_alg_lib thermo_lib; thermo_lib.id = isp_dev; strncpy_s(thermo_lib.lib_name, sizeof(thermo_lib.lib_name), OT_THERMO_LIB_NAME, sizeof(OT_THERMO_LIB_NAME)); ret = ss_mpi_thermo_register(isp_dev, &thermo_lib); if (ret != HI_SUCCESS) { printf("ss_mpi_thermo_register failed with %#x!\n", ret); return ret; }
【相关数据类型及接口】
ot_isp_ae_param
【说明】
定义ISP提供给AE的初始化参数结构体。
【定义】
typedef struct {
ot_sensor_id sns_id;
td_u8 wdr_mode;
td_u8 hdr_mode;
td_u16 black_level;
td_float fps;
ot_isp_bayer_format bayer;
ot_isp_stitch_attr stitch_attr;
td_s32 reserved;
} ot_isp_ae_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_people_roi
【说明】
定义ISP提供给AE的人形、人脸统计信息结构体。
【定义】
typedef struct {
td_bool enable; /* R; Range:[0, 1]; enable smart roi info */
td_bool available; /* R; Range:[0, 1]; whether roi area is available */
td_u8 luma ; /* R; Range:[0x00, 0xFF]; luma of roi area*/
} ot_isp_people_roi;
【成员】
【注意事项】
- 当仅由人形模型可用时,会根据人形检测结果估算出一个人脸亮度,此亮度可靠性会低于人脸检测结果。
- luma采用的是YUV图像中检测到的人脸或人形框内Y分量的亮度平均值。客户在使用自己的智能信息时,当存在多个人脸或人形检测结果,建议取多个检测结果的整体亮度平均值。
【相关数据类型及接口】
ot_isp_tunnel_roi
【说明】
定义ISP提供给AE的隧道统计信息结构体。
【定义】
typedef struct {
td_bool enable; /* R; Range:[0, 1]; enable tunnel roi info */
td_bool available; /* R; Range:[0, 1]; whether roi area is available */
td_u32 tunnel_area_ratio; /* R; Range:[0, 10000]; the proportion of tunnels in the whole picture */
td_u32 tunnel_exp_perf; /* R; Range:[0, 10000]; the performance of tunnels exposure result */
} ot_isp_tunnel_roi;
【成员】
【注意事项】
- tunnel_exp_perf当前仅隧道出口使用,采用的是YUV图像中检测到的隧道出口框内过曝区域占整个检测框的比例。
- 向AE传递隧道检测结果信息,可实现行车使用场景中出入隧道时的极限收光。此功能仅支持在WDR模式下使用,同时需要设置曝光比为自动模式。在线性模式下不建议使用,否则效果不保证。
【相关数据类型及接口】
ot_isp_face_roi
【说明】
定义ISP提供给AE的人脸快速收敛算法的结构体。
【定义】
typedef struct {
td_bool enable; /* R; Range:[0, 1]; enable fast face roi info */
td_bool available; /* R; Range:[0, 1]; whether roi area is available */
td_u64 frame_pts; /* pts of face info */
ot_rect face_rect[OT_ISP_FACE_NUM]; /* face roi rect */
} ot_isp_face_roi;
【成员】
人脸的坐标信息数组,最多支持5个人脸坐标,具体坐标信息参考ot_rect描述。 |
【注意事项】
- ot_isp_face_roi支持人脸模型检测坐标的传入,face_rect中的宽度和高度不要求4对齐。AE算法通过人脸坐标以及对应帧的pts进行快速收敛。需要enable和ot_isp_fast_face_ae_attr中的enable同时使能算法才能生效。
-
当前最多支持传入5个人脸信息,当人脸数量不足5个时,需要将face_rect数组中其他坐标设置为0。
-
人脸快速收敛算法仅支持在近距离使用,要求人脸在图像中占比较大。如果人脸占比较小,可能画面导致闪烁。建议传入的人脸坐标占画面的面积1/64以上。
【相关数据类型及接口】
ot_isp_people_type
【说明】
定义ISP提供给AE的人形、人脸统计信息枚举类型。
【定义】
typedef enum {
OT_ISP_FACE_INDEX = 0,
OT_ISP_PEOPLE_INDEX = 1,
OT_ISP_PEOPLE_BUTT
} ot_isp_people_type;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_tunnel_type
【说明】
定义ISP提供给AE的隧道统计信息枚举类型。
【定义】
typedef enum {
OT_ISP_TUNNEL_IN_INDEX = 0,
OT_ISP_TUNNEL_OUT_INDEX = 1,
OT_ISP_TUNNEL_BUTT
} ot_isp_tunnel_type;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_smart_info
【说明】
定义ISP提供给AE的智能信息结构体。
【定义】
typedef struct {
ot_isp_people_roi people_roi[OT_ISP_PEOPLE_CLASS_MAX]; /* people ae info */
ot_isp_tunnel_roi tunnel_roi[OT_ISP_TUNNEL_CLASS_MAX]; /* tunnels ae info */
ot_isp_face_roi face_roi; /* fast face ae info */
} ot_isp_smart_info;
【成员】
【注意事项】
- people_roi仅支持人脸模型与人形模型检测结果,people_roi下标为0时为人脸检测结果,下标为1时为人形检测结果。
- tunnel_roi当前支持隧道入口、出口模型检测结果,tunnel_roi下标为0时为隧道入口检测结果,下标为1时为隧道出口检测结果。
【相关数据类型及接口】
ot_isp_fe_ae_stat_1
【说明】
定义ISP FE中AE统计属性。
【定义】
typedef struct {
td_u32 pixel_count[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 pixel_weight[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 histogram_mem_array[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_HIST_NUM];
td_u32 histogram_mem_array_ir[OT_ISP_HIST_NUM]; /* only support fe0 not support for Hi3519DV500 */
}ot_isp_fe_ae_stat_1;
【成员】
无
【注意事项】
详情请见ot_isp_ae_info。
【相关数据类型及接口】
无
ot_isp_be_ae_stat_1
【说明】
定义ISP BE中AE统计属性。
【定义】
typedef struct {
td_u32 pixel_count;
td_u32 pixel_weight;
td_u32 histogram_mem_array[OT_ISP_HIST_NUM];
td_u32 estimate_histogram_mem_array[OT_ISP_HIST_NUM];
} ot_isp_be_ae_stat_1;
【成员】
无
【注意事项】
详情请见ot_isp_ae_info。
【相关数据类型及接口】
无
ot_isp_ae_info
【说明】
定义ISP提供给AE的统计信息结构体。
【定义】
typedef struct {
td_u32 frame_cnt; /* the counting of frame */
td_u64 frame_pts;
td_u16 frame_width;
td_u16 frame_height;
ot_isp_smart_info smart_info;
ot_isp_fe_ae_stat_1 *fe_ae_stat1;
ot_isp_fe_ae_stat_2 *fe_ae_stat2;
ot_isp_fe_ae_stat_3 *fe_ae_stat3;
ot_isp_fe_ae_stitch_stat_3 *fe_ae_sti_stat;
ot_isp_be_ae_stat_1 *be_ae_stat1;
ot_isp_be_ae_stat_2 *be_ae_stat2;
ot_isp_be_ae_stat_3 *be_ae_stat3;
ot_isp_be_ae_stitch_stat_3 *be_ae_sti_stat;
} ot_isp_ae_info;
【成员】
【注意事项】
- AE库可以根据frame_cnt控制运算频率,例如两帧运算一次。
- fe_ae_stat1、be_ae_stat1分别表示位于FE及BE的全局1024段直方图统计信息。该统计信息是取输入数据流中的高10bit数据统计得到的,每个bin中数据表示该灰度值对应的像素个数。全局1024段直方图会受到分区间权重的影响,1024个bin的数据之和即为带权重参与统计的像素点个数。目前,AE算法默认只用了Gr通道的统计信息,在大面积红色时,会采用R和Gb通道的统计信息,在大面积蓝色时,会采用B和Gr通道的统计信息。
- 当MIPI、VI DEV的data_rate配置为DATA_RATE_X2时,fe_ae_stat1中的pixel_count、pixel_weight数目会减半。
- fe_ae_stat2、be_ae_stat2分别表示位于FE及BE的全局R/Gr/Gb/B 4分量取高16bit统计得到的均值,取值范围:[0, 0xFFFF]。全局4分量平均值会受分区间权重影响。
- fe_ae_stat3、be_ae_stat3分别表示位于FE及BE的15*17区间每个区间R/Gr/Gb/B 4分量取高16bit统计得到的均值,取值范围:[0, 0xFFFF]
- AE统计模块可将输入数据开方后再进行统计。所谓数据开方,指的是对输入数据归一化至1后做开方处理。以1024段直方图统计为例,若输入数据为12bit,某个像素值为2048,若数据开方关闭,直接取高10bit数据进行统计,为灰度值512对应的bin像素个数加1;若数据开方使能,像素值2048归一化至1后为0.5,0.5开方为0.707,用10bit表示0.707为724,此时在直方图上表现为灰度值724对应的bin像素个数加1。由此可见,像素值较小的数据开方处理后像素值明显变大,相当于统计信息通过压缩亮区的统计精度来提升了暗区的统计精度。建议在WDR模式下数据开方使能,线性模式下数据开方关闭。在开方模式下,统计精度为11bit,低5bit值为0,因此16bit最大值为0xFFE0。此外,AE统计模块在ISP pipeline的位置可以变化,具体可参考“统计信息”章节部分相关描述。
表 1 统计信息ot_isp_ae_info的成员变量默认配置说明
说明:
- 表1中说明仅在ISP默认配置下生效,实际会受到黑电平配置及AE统计信息位置的影响。
- WDR合成前(FE)统计信息为固定在WB模块之后,不可配置。使用FE统计信息时需要减去黑电平,直方图应减去10bit黑电平,均值应减去16bit黑电平。WDR合成前(FE)统计信息受到位于FE AE之前处理模块(在Hi3519DV500中,FE AE之前的处理模块有DG/WB)增益影响,这些模块的FE增益值由算法内部保证与BE保持一致,无需单独配置。
- 在Hi3519DV500中第0路FE统计信息会经过水平下采样,因此点数减半。
- 线性模式推荐使用WDR合成前(FE)1024段直方图。WDR模式推荐使用WDR合成前(FE)1024段直方图,或者使用WDR合成后(BE)开方模式的1024段直方图。离线模式下业务压力大时,WDR合成前(FE)实时性更好,因此离线模式下推荐使用FE统计信息。SDK提供的AE算法在如果采用的是BE统计信息,默认在线性模式下使用(BE)不开方模式的统计信息,在WDR模式下使用(BE)开方模式的统计信息。如果线性模式下使用(BE)开方模式的统计信息,或者WDR模式下使用(BE)不开方模式的统计信息,会导致SDK提供AE算法的出现异常。
- Hi3519DV500: FE通路中只有FE0,FE2支持分块统计信息,全局均值统计信息和1024段直方图。FE1,FE3只支持256段直方图。
- Hi3516CV610: FE通路只支持256段直方图,不支持分块统计信息和全局均值统计信息。
- 只有使用FE0和FE2拼接才有拼接后的1024段直方图信息和均值信息,其他路拼接只有256段直方图信息。
【相关数据类型及接口】
ot_isp_ae_stat_attr
【说明】
定义AE库返回给ISP的配置寄存器结构体。
【定义】
typedef struct {
td_bool change;
td_bool hist_adjust;
td_u8 ae_be_sel;
td_u8 four_plane_mode;
td_u8 hist_offset_x;
td_u8 hist_offset_y;
td_u8 hist_skip_x;
td_u8 hist_skip_y;
td_bool mode_update;
td_u8 hist_mode;
td_u8 aver_mode;
td_u8 max_gain_mode;
td_bool weight_table_update;
td_u8 weight_table[OT_VI_MAX_PIPE_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN];
td_u8 be_weight_table[OT_VI_MAX_PIPE_NUM][OT_ISP_BE_AE_ZONE_ROW][OT_ISP_BE_AE_ZONE_COLUMN];
} ot_isp_ae_stat_attr;
【成员】
AE算法直方图调整使能,影响ae_be_sel/four_plane_mode/hist_offset_x/ hist_offset_y/hist_skip_x/hist_skip_y六个参数的配置。 hist_adjust使能时,以上六个参数以ot_isp_ae_result中的值为准配置芯片寄存器; |
|
直方图统计时水平方向采样点设置,0=every pixel; 1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel; 6+=every 9th pixel。 |
|
直方图统计时垂直方向采样点设置,0=every pixel; 1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel; 6+=every 9th pixel。 |
|
AE算法开方模式配置使能,影响hist_mode/ aver_mode/ max_gain_mode三个参数的配置。 mode_update不为0时,以上三个参数以ot_isp_ae_result中的值为准配置逻辑寄存器; |
|
|
仅影响MG模块统计信息。为了与AE分块统计信息进行比较,建议与aver_mode配置为同一模式。Hi3516CV610不支持 |
|
AE算法权重表配置使能,影响weight_table的配置。
|
|
【注意事项】
- weight_table支持拼接模式下在主路配置多路权重,在主路对所有支路对应Pipe下标的权重表进行赋值即可。在非拼接模式下,只有对应Pipe下标的权重表生效。
- SDK提供的AE算法只支持1024段直方图,在使用AE算法情况下使能four_plane_mode会导致AE算法异常。
- Hi3519DV500 FE和BE都是15x17的统计信息,使用weight_table同时对FE,BE的统计权重进行更新。
- Hi3516CV610 BE提供32x32的统计信息,需用通过be_weight_table对BE权重表更新,FE仍然使用的weight_table的权重表。
【相关数据类型及接口】
ot_isp_ae_result
【说明】
定义AE库返回给ISP的配置寄存器结构体。
【定义】
typedef struct {
td_u32 int_time[4];
td_u32 isp_dgain;
td_u32 again;
td_u32 dgain;
td_u32 iso;
td_u32 isp_dgain_sf;
td_u32 again_sf;
td_u32 dgain_sf;
td_u32 iso_sf;
td_u8 ae_run_interval;
td_bool piris_valid;
td_s32 piris_pos;
td_u32 piris_gain;
td_u32 sns_lhcg_exp_ratio;
ot_isp_fswdr_mode fswdr_mode;
td_u32 wdr_gain[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 hmax_times;
td_u32 vmax;
ot_isp_ae_stat_attr stat_attr;
ot_isp_dcf_update_info update_info;
} ot_isp_ae_result;
【成员】
【注意事项】
- ISP基本算法模块将会根据AE计算得出的总增益值调节配置参数,例如锐化、去噪等。
- weight_table支持拼接模式下在主路配置多路权重,在主路对所有支路对应Pipe下标的权重表进行赋值即可。在非拼接模式下,只有对应Pipe下标的权重表生效。
-
将曝光时间int_time由行转换成us时,可以通过cmos.c中的lines_per500ms进行,转换关系如下:
int_time[0] =(((td_u64)int_time_rst[0] * 1024 + offset) * 500000 / ae_sns_dft->lines_per500ms) >> 10
上式中int_time_rst[0]是以行数为单位的曝光时间,offset=offset* 1024,offset即为曝光时间的偏移量,详见ot_isp_ae_accuracy的描述。
-
为了保证计算曝光比的精度,int_time中曝光时间精度为1/16us,计算曝光时间时需要保证在us的基础上左移四位,否则曝光比计算可能会有误差,其他模块获取的曝光时间也会偏小。
- 在使用AE算法时,参数int_time、isp_dgain、again、dgain、iso、hmax_times、vmax必须配置,否则会影响其他模块的联动控制,其余参数则可根据需要选择性配置。
【相关数据类型及接口】
ot_isp_ae_fast_ae_attr
【说明】
Fast AE相关算法参数。
【定义】
【成员】
【注意事项】
- sns_delay_frame 一般在低帧率时,当帧配置曝光参数ISP软件能立马下发给Sensor,此时生效延时配制为3。
- 在较高帧率时,ISP软件需要等到下一帧配置给Sensor,此时生效延时为4。可以参考快速收敛AE适配指南的代码来测试sensor生效延时具体为几帧。
- 当前Fast AE只支持普通线性模式,不支持WDR。
- 当前Fast AE在快速收敛的过程中Smart AE不生效。快速收敛完成后Smart AE就可以正常工作。
- 在Fast AE的快速收敛过程中,所有的高低光优先,black delay、bright delay等功能也不能使用。快速收敛完成后就可以正常工作。
ot_isp_awb_register
【说明】
定义AWB注册结构体。
【定义】
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
ot_isp_awb_exp_func
【说明】
定义AWB回调函数结构体。
【定义】
typedef struct {
td_s32 (*pfn_awb_init)(td_s32 handle, const ot_isp_awb_param *awb_param, ot_isp_awb_result *awb_result);
td_s32 (*pfn_awb_run)(td_s32 handle,
const ot_isp_awb_info *awb_info,
ot_isp_awb_result *awb_result,
td_s32 reserved);
td_s32 (*pfn_awb_ctrl)(td_s32 handle, td_u32 cmd, td_void *value);
td_s32 (*pfn_awb_exit)(td_s32 handle);
} ot_isp_awb_exp_func;
【成员】
【注意事项】
- 调用ss_mpi_isp_init时将调用pfn_awb_init回调函数,以初始化AWB算法库。
- pfn_awb_init回调函数的ot_isp_awb_result参数返回ISP启动时的初始AWB增益和初始色彩校正矩阵。
- 调用ss_mpi_isp_run时将调用pfn_awb_run回调函数,以运行AWB算法库,计算得到白平衡增益、色彩校正矩阵。
-
运行时ISP控制单元会隐式调用pfn_awb_ctrl回调函数,通知AWB算法库切换WDR和线性模式、设置ISO和曝光时间(曝光时间单位是us)。设置ISO的目的是为了实现ISO与饱和度的联动,增益大时色度噪声也会比较大,所以需要调节饱和度。设置曝光时间是为了辅助室内外判断。
当前Firmware定义的ctrl命令详细描述参见ot_isp_ctrl_cmd。
-
调用ss_mpi_isp_exit时将调用pfn_awb_exit回调函数,以销毁AWB算法库。
【相关数据类型及接口】
ot_isp_awb_param
【说明】
定义ISP提供给AWB的初始化参数结构体。
【定义】
typedef struct {
ot_sensor_id sns_id;
td_u8 wdr_mode;
td_u8 awb_zone_row;
td_u8 awb_zone_col;
td_u8 awb_zone_bin;
ot_isp_stitch_attr stitch_attr;
td_u16 awb_width;
td_u16 awb_height;
td_u32 init_iso;
td_s8 reserved;
} ot_isp_awb_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_awb_stat_1
【说明】
定义AWB统计信息结构体。
【定义】
typedef struct {
td_u16 metering_awb_avg_r;
td_u16 metering_awb_avg_g;
td_u16 metering_awb_avg_b;
td_u16 metering_awb_count_all;
} ot_isp_awb_stat_1;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_awb_stat_result
【说明】
定义AWB统计信息结构体。
【定义】
typedef struct {
td_u16 *zone_avg_r;
td_u16 *zone_avg_g;
td_u16 *zone_avg_b;
td_u16 *zone_count;
} ot_isp_awb_stat_result;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_awb_overlap_zone
【说明】
定义拼接算法重叠区域。
【定义】
typedef struct {
td_u8 col_start;
td_u8 col_stop;
td_u8 row_start;
td_u8 row_stop;
} ot_isp_awb_overlap_zone;
【成员】
【注意事项】
- 上述起始和结束点都包含于AWB重叠区域中。
- Hi3516CV610不支持拼接,该结构体未使用。
【相关数据类型及接口】
无
ot_isp_awb_overlap_all_zone
【说明】
定义每一pipe图像左侧部分和右侧部分重叠区域位置。
【定义】
typedef struct {
td_u8 stitch_pipe_num;
ot_isp_awb_overlap_zone left_zone_range[OT_ISP_MAX_STITCH_NUM];
ot_isp_awb_overlap_zone right_zone_range[OT_ISP_MAX_STITCH_NUM];
} ot_isp_awb_overlap_all_zone;
【成员】
left_zone_range[OT_ISP_MAX_STITCH_NUM] |
|
right_zone_range[OT_ISP_MAX_STITCH_NUM] |
【注意事项】
- 最左侧图像左侧部分和最右侧图像右侧部分不属于重叠区域,但是内部仍然会基于设置值返回相应结果,对应结果可不参与计算。
- Hi3516CV610不支持拼接,该结构体未使用。
【相关数据类型及接口】
无
ot_isp_awb_info
【说明】
定义ISP提供给AWB的统计信息结构体。
【定义】
typedef struct {
td_u32 frame_cnt;
ot_isp_awb_stat_1 *awb_stat1;
ot_isp_awb_stat_result awb_stat2;
td_u8 awb_gain_switch;
td_u8 awb_stat_switch;
td_bool wb_gain_in_sensor;
td_u32 wdr_wb_gain[OT_ISP_BAYER_CHN_NUM];
ot_isp_awb_overlap_all_zone overlap_all_zone;
} ot_isp_awb_info;
【成员】
【注意事项】
- AWB库可以根据frame_cnt控制运算频率,例如两帧运算一次。
- ot_isp_awb_info提供了全局统计信息和分块统计信息,不同模式下水平、垂直分块个数不固定,可通过ot_isp_awb_param的awb_zone_row、awb_zone_col两个参数获取。AWB分块个数 = awb_zone_row* awb_zone_col。
- 切换白平衡统计模块位置,会导致2帧统计信息错误,建议在启动时配置合理值,避免切换。如果必须进行位置切换,建议切换后,AWB算法冻结2帧以上,待统计信息正确后,再重新计算。
- 非拼接模式下,通过ss_mpi_isp_set_stats_cfg接口配置白平衡统计模块位置在DRC后,通过ss_mpi_isp_set_wb_attr接口关闭亮度对白平衡权重的影响,可以优化WDR模式下暗区偏红问题。
【相关数据类型及接口】
ot_isp_awb_raw_stat_attr
【说明】
定义AWB库返回给ISP的白点信息配置寄存器结构体。
【定义】
typedef struct {
td_bool stat_cfg_update;
td_u16 metering_white_level_awb;
td_u16 metering_black_level_awb;
td_u16 metering_cr_ref_max_awb;
td_u16 metering_cb_ref_max_awb;
td_u16 metering_cr_ref_min_awb;
td_u16 metering_cb_ref_min_awb;
} ot_isp_awb_raw_stat_attr;
【成员】

【注意事项】
- ot_isp_awb_raw_stat_attr结构体中的信息决定什么样的像素点被认为是白点,从而参与统计。用户开发新的AWB算法时可以使用默认值,也可以自定义配置,stat_cfg_update标识表明运行时当前帧是否需要配置stat_attr结构体中的值到寄存器。
- 只支持Bayer域统计信息。
【相关数据类型及接口】
无
ot_isp_awb_overlap_result
【说明】
定义AWB库返回的指定区域的ISP增益信息,用于拼接模块计算重叠区域AWB差异。
【定义】
typedef struct {
td_u32 left_overlap_zone_awb[OT_ISP_MAX_STITCH_NUM][OT_ISP_BAYER_CHN_NUM];
td_u32 right_overlap_zone_awb[OT_ISP_MAX_STITCH_NUM][OT_ISP_BAYER_CHN_NUM];
} ot_isp_awb_overlap_result;
【成员】
【注意事项】
- 对于拼接来说,最左侧通路的左边和最右侧通路的右边不属于重叠区域,这两部分仍然会基于设定区域返回结果,但是这一结果不参与后续AWB一致性计算。
- Hi3516CV610不支持拼接。
【相关数据类型及接口】
无
ot_isp_awb_result
【说明】
定义AWB库返回给ISP的增益配置寄存器结构体。
【定义】
typedef struct {
td_u32 white_balance_gain[OT_ISP_BAYER_CHN_NUM];
td_u16 color_matrix[OT_ISP_CCM_MATRIX_SIZE];
td_u32 color_temp;
td_u8 saturation;
td_u16 sector_matrix[OT_ISP_COLOR_SECTOR_NUM][OT_ISP_CCM_MATRIX_SIZE]; /* Not supported for Hi3519DV500 */
ot_isp_awb_raw_stat_attr raw_stat_attr;
ot_isp_awb_overlap_result overlap_result;
} ot_isp_awb_result;
【成员】
white_balance_gain[OT_ISP_BAYER_CHN_NUM] |
|
color_matrix[OT_ISP_CCM_MATRIX_SIZE] |
色彩还原矩阵,8bit精度表示。Hi3516CV610使用用户AWB算法时,ISP使用的CCM是sector_matrix的参数。 |
sector_matrix[OT_ISP_COLOR_SECTOR_NUM][OT_ISP_CCM_MATRIX_SIZE] |
颜色分区调节参数,包含6个颜色区域的CCM矩阵。Hi3519DV500不支持。Hi3516CV610使用用户AWB算法时,ISP使用的CCM是sector_matrix的参数。 |
【注意事项】
- AWB算法首先将会计算出R、Gr、Gb、B颜色通道的增益,以校正出白色,16bit精度表明最后16位为小数。
- WDR模式,AWB统计结果和增益不需要做特别处理,和Linear模式一致。
- AWB算法其次会计算一个3x3的颜色校正矩阵,以还原出真实的色彩,8bit精度表明最后8位为小数。
- Hi3516CV610使用用户AWB算法,给ISP配置CCM参数时,如果关闭颜色分区调节功能,即be_cc_sector_en为0,需要将color_matrix参数配置到sector_matrix[0]中使用,即ISP使用的CCM是sector_matrix[0]的参数。如果使用颜色分区调节功能,需要用户算法算出6个颜色区域对应的CCM矩阵,填入sector_matrix。
- white_balance_gain和color_matrix参数会影响图像数据流,所以配置为全0时,图像变黑。Hi3516CV610的sector_matrix[0]为实际使用的CCM参数,所以这个参数配置为0时,图像变黑。
【相关数据类型及接口】
ot_isp_awb_calibration_gain
【说明】
定义AWB在线标定输出的增益结构体。
【定义】
【成员】
【注意事项】
Rgain和Bgain值为图像中心位置若干个块的Rgain和Bgain的均值。
【相关数据类型及接口】
无
ot_isp_dcf_const_info
【说明】
定义DCF信息中用户配置参数。
【定义】
typedef struct {
td_u8 image_description[OT_DCF_DESCRIPTION_LENGTH];
td_u8 make[OT_DCF_DESCRIPTION_LENGTH];
td_u8 model[OT_DCF_DESCRIPTION_LENGTH];
td_u8 software[OT_DCF_DESCRIPTION_LENGTH];
td_u8 light_source;
td_u32 focal_length;
td_u8 scene_type;
td_u8 custom_rendered;
td_u8 focal_length_in35mm_film;
td_u8 scene_capture_type;
td_u8 gain_control;
td_u8 contrast;
td_u8 saturation;
td_u8 sharpness;
td_u8 metering_mode;
} ot_isp_dcf_const_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_dcf_update_info
【说明】
定义DCF信息中ISP实时更新配置参数。
【定义】
typedef struct {
td_u32 iso_speed_ratings;
td_u32 exposure_time;
td_u32 exposure_bias_value;
td_u8 exposure_program;
td_u32 f_number;
td_u32 max_aperture_value;
td_u8 exposure_mode;
td_u8 white_balance;
} ot_isp_dcf_update_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_dcf_info
【说明】
定义DCF信息参数结构体。
【定义】
typedef struct {
ot_isp_dcf_const_info isp_dcf_const_info;
ot_isp_dcf_update_info isp_dcf_update_info;
} ot_isp_dcf_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_pipe_diff_attr
【说明】
定义多路ISP差异参数结构体。
【定义】
typedef struct {
ot_op_mode op_type;
td_u8 overlap;
td_s32 offset[OT_ISP_BAYER_CHN_NUM]
td_u32 gain[OT_ISP_BAYER_CHN_NUM];
td_u16 color_matrix[OT_ISP_CCM_MATRIX_SIZE];
} ot_isp_pipe_diff_attr;
【成员】
offset[OT_ISP_BAYER_CHN_NUM] |
|
gain[OT_ISP_BAYER_CHN_NUM] |
|
color_matrix[OT_ISP_CCM_MATRIX_SIZE] |
【注意事项】
-
op_type是拼接颜色一致性手动和自动切换开关,
- 0表示auto模式。
- 1表示manual模式这一开关只有在主通路下才生效,如果拼接后图像拼缝左右存在明显的颜色不一致问题,建议将这一开关切换到auto模式。如果主路拼接区域被遮挡,从路颜色会发生相应的变化,这时建议将开关切到manual模式,同时把从路的四个gain值全部设为256。
-
在manual模式下,允许手动配置每个通路的AWB额外增益(ot_isp_pipe_diff_attr),相关配置只在对应的pipe中生效。如果切换auto模式,则自动计算每个通路的AWB额外增益(ot_isp_pipe_diff_attr),以实现图像拼缝位置过渡自然。
-
如果pipe0是主通路,而此时要手动配置pipe1的增益,需要先在pipe0切换为manual模式,然后再切换到pipe1进行配置。
-
overlap指重叠区域相对AWB统计区域的宽度,根据原始拼接图像重叠区域大小预估,目前只支持两路拼接颜色一致性,只有在主通路下才生效,一般同一批次模组可复用同一overlap,如果模组结构发生变化,需要重新适配overlap。
-
仅ot_isp_black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_AUTO模式时,offset才有效。
- ot_isp_pipe_diff_attr主要用于拼接模式下,配置多路图像的亮度和颜色的差异,用于校正多路的图像的差异,从而使得拼接画面融合区域过渡平滑。
- 四路拼接颜色一致性功能,仅在Hi3519DV500拼接支持的四种模式下能生效,该功能未生效时四路用相同awb增益值。
- 多路拼接色度一致性功能与亮度一致性功能有耦合,在开启亮度一致性功能前提下,该功能才生效。若亮度一致性功能未打开,多路用的是同一个增益值。
- Hi3516CV610不支持。
【相关数据类型及接口】
无
ot_isp_ob_stats_update_pos
【说明】
定义读取ob区统计信息的位置。
【定义】
typedef enum {
OT_ISP_UPDATE_OB_STATS_FE_FRAME_END = 0,
OT_ISP_UPDATE_OB_STATS_FE_FRAME_START = 1,
OT_ISP_UPDATE_OB_STATS_BUTT,
} ot_isp_ob_stats_update_pos;
【成员】
【注意事项】
- OT_ISP_UPDATE_OB_STATS_FE_FRAME_END是在帧结束读取当前帧dynamic blc统计信息并进行ISP中各模块黑电平的配置,对应配置值在下一帧即可生效,即dynamic blc的结果生效较AE调节有一帧的延迟。
- OT_ISP_UPDATE_OB_STATS_FE_FRAME_START是在帧起始读取上一帧dynamic blc统计信息并进行ISP中各模块黑电平的配置,对应配置值在下一帧生效,即dynamic blc的结果生效较AE调节有两帧的延迟
- 帧结束与下一帧帧起始的时间间隔不可控,因此在帧结束中读取dynamic blc并配置ISP黑电平寄存器时,有可能会因为计算配置不及时导致不同步的问题出现。
- Hi3516CV610不支持。
【相关数据类型及接口】
ot_isp_alg_run_select
【说明】
定义是否屏蔽isp be中的算法模块。
【定义】
typedef enum {
OT_ISP_ALG_RUN_NORM = 0,
OT_ISP_ALG_RUN_FE_ONLY = 1,
OT_ISP_ALG_RUN_BUTT,
}ot_isp_alg_run_select;
【成员】
【注意事项】
- 只支持在调用isp_mem_init前修改,不支持isp_mem_init后动态修改。
- 只支持在物理pipe配置为OT_ISP_ALG_RUN_FE_ONLY。
【相关数据类型及接口】
无
ot_isp_run_wakeup_select
【说明】
定义那个中断驱动ISP firmware。
【定义】
typedef enum {
OT_ISP_RUN_WAKEUP_FE_START = 0,
OT_ISP_RUN_WAKEUP_BE_END = 1,
OT_ISP_RUN_WAKEUP_BUTT,
}ot_isp_run_wakeup_select;
【成员】
【注意事项】
- 只支持在调ss_mpi_isp_mem_init前修改,不支持ss_mpi_isp_mem_init后动态修改。
-
ot_isp_run_wakeup_select默认配置为OT_ISP_RUN_WAKEUP_FE_START,可匹配ss_mpi_isp_run接口使用。

-
如需要从VI捞帧再送raw处理,则可将 ot_isp_run_wakeup_select配置为OT_ISP_RUN_WAKEUP_BE_END,可匹配ss_mpi_isp_run接口使用。这种配置的软件通路为run_be通路。客户自行调ss_mpi_vi_send_pipe_raw接口送raw时,应尽量保证送帧间隔均匀,如送raw持续不均匀,会对曝光比切换、模式切换等场景图像效果产生一定影响。
run_be相比于run和runonce的方案差异点和优劣势:
(1)run_be相比于run支持自主送帧操作,但在送帧延迟时间过长时可能出现同步异常。
(2)run_be和runonce都支持自主送帧操作,run_be支持多路拼接模式送帧操作,runonce不支持多路拼接。runonce软件通路与硬件是串行处理,run_be软件通路与硬件是并行处理,可以将逻辑性能最优化。因此,在追求性能效果的视频处理场景,更推荐使用run_be方案;在抓拍场景更推荐使用runonce方案。

【相关数据类型及接口】
无
ot_isp_ctrl_param
【说明】
定义ISP控制参数结构体。
【定义】
typedef struct {
td_u8 be_buf_num;
td_u32 proc_param;
td_u32 stat_interval;
td_u32 update_pos;
td_u32 interrupt_time_out;
td_u32 pwm_num;
td_u32 port_interrupt_delay;
td_bool ldci_tpr_flt_en;
ot_isp_ob_stats_update_pos ob_stats_update_pos;
ot_isp_alg_run_select alg_run_select;
td_bool quick_start_en;
td_bool long_frame_interrupt_en;
ot_isp_run_wakeup_select isp_run_wakeup_select;
} ot_isp_ctrl_param;
【成员】
离线模式下,ISP BE config buffer的数目。仅离线模式有效取值范围:[2, 20],芯片支持AIISP时默认值为8,否则为4。 |
|
ISP统计信息更新频率。注意:在高帧率业务时,如120fps及其以上帧率,可通过参数stat_interval设置其ISP统计信息更新频率,从而可降低ISP的CPU占用率,同时降低性能消耗。 |
|
|
0:根据ot_isp_sns_regs_info结构体中u8IntPos变量的配置值,sensor寄存器在帧起始中断或帧结束中断配置; |
|
|
解决部分sensor Half WDR模式下,在前面几行配置sensor寄存器会出现闪烁,需要延时。 port_init_delay是按照VI的工作时钟频率计算,以时钟为单位。如:VI时钟是300MHz。延时1ms,port_init_delay的计算如下: |
|
|
|
【注意事项】
- proc_param的默认值为30,即每30帧更新一次ISP Proc信息,如果要关闭ISP Proc信息,则在ss_mpi_isp_mem_init之前通过接口ss_mpi_isp_set_ctrl_param设置ISP控制参数proc_param为0,不分配存储ISP Proc信息的内存,而且后续不能将proc_param设置为非0值。
- 通过接口ss_mpi_isp_set_ctrl_param第一次设置proc_param为非0时,必需在ss_mpi_isp_mem_init接口调用之前,因为需要分配Proc信息存储的内存,后续设置只能在非0值之间动态切换。
- ISP Proc信息频繁更新会消耗CPU资源。推荐设为30帧更新一次,或仅Debug时开启。
- 只能在ss_mpi_isp_mem_init之前通过接口ss_mpi_isp_set_ctrl_param设置update_pos、pwm_num、port_interrupt_delay、ldci_tpr_flt_en、be_buf_num、ob_stats_update_pos和alg_run_select,在ss_mpi_isp_mem_init之后不可再更改上述7个参数的配置值;而ss_mpi_isp_get_ctrl_param接口调用顺序没有限制。
- 可通过接口ss_mpi_isp_set_ctrl_param动态更改proc_param、stat_interval、interrupt_time_out的配置值。
- 不支持加载ko时设置ISP控制参数。
- 离线模式下,若业务量较大时,采用默认的be_buf_num,有可能会出现不丢帧但是ISP中有“get FreeBeBuf is fail”错误打印的问题,此时可以增大be_buf_num的配置值,缓解此问题;另外对于业务量不繁重、并且对于内存占用要求较高的应用场景,可以适当的减小be_buf_num的配置值。
- 只能在物理pipe配置alg_run_select为OT_ISP_ALG_RUN_FE_ONLY。
- OT_ISP_ALG_RUN_FE_ONLY一般应用在只需要获取FE AE/AF的统计信息而不需要运行BE这种场景下。配置为OT_ISP_ALG_RUN_FE_ONLY后ISP只注册和运行FE中的算法模块(blc、FE AE、FE AF、HRS、FE isp_dgain),不再运行BE的算法、不配置BE的寄存器、不读取BE的统计信息,节省CPU运行时间,与bypass be逻辑效果不一致,建议搭配ss_mpi_vi_set_pipe_frame_source(vi_pipe, OT_VI_PIPE_FRAME_SOURCE_USER)一起使用来bypass viproc的处理,ss_mpi_vi_set_pipe_frame_source接口具体信息请参见《MPP 媒体处理软件Vx.y 开发参考》的VI章节。
- BE 输入为YUV数据时,OT_ISP_ALG_RUN_FE_ONLY配置无效
- 通过接口ss_mpi_isp_set_ctrl_param设置quick_start_en快速启动时,接口调用需要在ISP起主业务之前(如:起多路PIPE场景业务时,需要在将接口调用顺序放在起多路主业务之前),且ISP KO已经加载;而ss_mpi_isp_get_ctrl_param接口调用顺序没有限制,可查询当前状态。
- long_frame_interrupt_en设置为1时,WDR模式时,ISP响应中断次数会增加,会影响ISP中断响应时间。增加cpu负载。
- 只有在从VI捞帧再灌raw处理的场景下,ISP 需要把中断源选择ot_isp_run_wakeup_select 配置为BE帧结束中断,其他场景下只支持配置为帧起始中断唤醒。
-
当中断源选择isp_run_wakeup_select 配置为BE帧结束中断时,有如下限制:
1)不支持帧模式wdr。
2)执行静态坏点标定时,如果灌raw延时较大且时间不均匀,有可能会导致静态坏点标定失败。
3)不支持叠加配置中断底半部使用。
4)不支持sync拼接模式。
5)不支持从某个物理pipe获取raw,交叉送到另一个物理pipe的使用场景。
6)不支持从某个物理pipe获取raw,把该帧重复送多次做BE处理的使用场景。
7)不支持对用户灌raw(raw对应帧信息并非从物理pipe中获取到的帧信息),同时又使用物理pipe过BE处理的场景。
8)RUN BE模式不支持VI在线(无BE帧结束中断)。
【相关数据类型及接口】
ot_isp_mod_param
【说明】
定义ISP模块参数结构体。
【定义】
【成员】
|
【注意事项】
- 通过接口ss_mpi_isp_set_mod_param设置interrupt_bottom_half中断底半部时,接口调用需要在ISP起主业务之前(如:起多路PIPE场景业务时,需要在将接口调用顺序放在起多路主业务之前),且ISP KO已经加载;而ss_mpi_isp_get_mod_param接口调用顺序没有限制,可查询当前状态。
- 不支持加载KO时设置ISP模块参数
- 中断底半部开启,四路拼接模式、线性模式(1080p,120fps)、寄存器固定在消隐区配置的sensor会出现同步异常的问题。
- 多pipe通路打开底半部,配置外设(sensor)寄存器时容易出现不同步的现象,因此多pipe的通路不支持底半部。如:拼接、mcf、wdr等。
【相关数据类型及接口】
ot_isp_quick_start_param
【说明】
设定不带光敏AE快速启动参数结构体。
【定义】
typedef struct {
td_bool quick_start_enable;
td_u8 black_frame_num;
td_bool ir_mode_en;
td_u32 init_exposure_ir;
td_u32 iso_thr_ir;
td_u16 ir_cut_delay_time;
} ot_isp_quick_start_param;
【成员】
【注意事项】
- black_frame_num填入Sensor初始输出的坏帧数。因部分Sensor在启动时,会输出若干坏帧。启动时没有坏帧的Sensor则填入值为0。
- 打开AE快速收敛模式状态下,如果外部硬件上没有IR CUT和IR LED,建议将ir_mode_en设定为TD_FALSE。此时AE启动快速收敛模式,不会进行相应的IR快速收敛模式。
- 在打开IR CUT过程中,对Sensor的产生较大的亮度变化,此时AE算法内部会等待IR CUT切换完成。为了保证AE收敛的速度,加快快速收敛的速度,ir_cut_delay_time的值要设定合适,不能远大于实际IR CUT切换的时间。
【相关数据类型及接口】
无。
ot_isp_init_attr
【说明】
定义ISP第一次启动时AE/AWB的初始化参数结构体。
【定义】
typedef struct {
td_bool is_ir_mode;
td_u32 ae_comp;
td_u32 exp_time;
td_float int_time_accu;
td_u32 a_gain;
td_float again_accu;
td_u32 d_gain;
td_float dgain_accu;
td_u32 ispd_gain;
td_u32 exposure;
td_u32 init_iso;
td_u32 lines_per500ms;
td_u32 piris_fno;
td_u16 wb_r_gain;
td_u16 wb_g_gain;
td_u16 wb_b_gain;
td_u16 sample_r_gain;
td_u16 sample_b_gain;
td_u16 init_ccm[OT_ISP_CCM_MATRIX_SIZE];
td_bool ae_route_ex_valid;
td_bool quick_start_en;
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;
td_u32 ae_stat_pos;
} ot_isp_init_attr;
【成员】
设置ISP第一次启动时AE使用的统计信息位置,ae_stat_pos为1时使用BE统计信息进行AE曝光,其他值则使用FE统计信息进行曝光。 |
【注意事项】
- 在ISP启动前,设置初始AWB增益和CCM系数,可改善前后帧颜色的一致性。
- 在ISP启动前,设置初始的AE曝光路线,可以实现帧率改变后,AE算法能够将初始设置的AE route保留并自动生效。
【相关数据类型及接口】
ot_isp_sns_mirrorflip_type
【说明】
定义sensor mirror-flip枚举。
【定义】
typedef enum {
ISP_SNS_NORMAL = 0,
ISP_SNS_MIRROR = 1,
ISP_SNS_FLIP = 2,
ISP_SNS_MIRROR_FLIP = 3,
ISP_SNS_BUTT
} ot_isp_sns_mirrorflip_type;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_isp_sns_blc_clamp
【说明】
定义sensor 黑电平矫正开关。
【定义】
【成员】
Sensor黑电平矫正开关,该值为TD_TRUE时,sensor内部黑电平矫正使能,该值为TD_FALSE时,sensor内部黑电平矫正关闭。 |
【注意事项】
有些sensor内部黑电平校正打开和关闭时输出的ob区行数不一样,使用此接口需要检查ob区的行数变化。ob区行数变化若影响到其他算法功能要修改相应算法的配置。
【相关数据类型及接口】
ot_isp_sns_bus_ex
【说明】
定义sensor通讯协议的扩展结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_isp_sns_obj
【说明】
定义指向sensor的对象。
【定义】
typedef struct {
td_s32 (*pfn_register_callback)(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib, ot_isp_3a_alg_lib *awb_lib);
td_s32 (*pfn_un_register_callback)(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib, ot_isp_3a_alg_lib *awb_lib);
td_s32 (*pfn_set_bus_info)(ot_vi_pipe vi_pipe, ot_isp_sns_commbus sns_bus_info);
td_s32 (*pfn_set_bus_info_multi)(ot_vi_pipe vi_pipe, ot_isp_sns_commbus sns_bus_info_multi[], td_u8 num);
td_s32 (*pfn_set_bus_ex_info)(ot_vi_pipe vi_pipe, ot_isp_sns_bus_ex *serdes_info);
td_void (*pfn_standby)(ot_vi_pipe vi_pipe);
td_void (*pfn_restart)(ot_vi_pipe vi_pipe);
td_void (*pfn_mirror_flip)(ot_vi_pipe vi_pipe, ot_isp_sns_mirrorflip_type sns_mirror_flip);
td_void (*pfn_set_blc_clamp)(ot_vi_pipe vi_pipe, ot_isp_sns_blc_clamp sns_blc_clamp);
td_s32 (*pfn_write_reg)(ot_vi_pipe vi_pipe, td_u32 addr, td_u32 data);
td_s32 (*pfn_read_reg)(ot_vi_pipe vi_pipe, td_u32 addr);
td_s32 (*pfn_set_init)(ot_vi_pipe vi_pipe, ot_isp_init_attr *init_attr);
td_s32 (*pfn_set_fast_ae)(ot_vi_pipe vi_pipe, ot_isp_sns_fast_ae_attr *fast_ae_attr);
} ot_isp_sns_obj;
【成员】
【注意事项】
单pipe下绑定一个sensor场景可以使用pfn_set_bus_info来绑定sensor与i2c的绑定关系,也可以使用pfn_set_bus_info_multi来绑定sensor与i2c的绑定关系;
单pipe下绑定一个sensor使用pfn_set_bus_info_multi是,num值为1,i2c_dev的值填在sns_bus_info_multi[0]中。
单pipe下绑定多个sensor的场景使用pfn_set_bus_info_multi来绑定sensor与i2c的绑定关系;
单pipe下绑定多个sensor的场景只支持i2c的方式跟sensor通信,不支持ssp的方式
ot_isp_sns_obj是为了区分不同sensor库新增的结构体,用法如下:
ot_isp_sns_obj g_sns_xxx_obj = {
.pfn_register_callback = sensor_register_callback,
.pfn_un_register_callback = sensor_unregister_callback,
.pfn_standby = xxx_standby,
.pfn_restart = xxx_restart,
.pfn_mirror_flip = xxx_mirror_flip,
.pfn_set_blc_clamp = xxx_blc_clamp,
.pfn_read_reg = xxx_read_register,
.pfn_set_bus_info = xxx_set_bus_info,
.pfn_set_bus_info_multi = xxx_set_bus_info_multi,
.pfn_set_init = sensor_set_init,
.pfn_set_fast_ae = fast_ae_able
};
【相关数据类型及接口】
无
ot_isp_sns_state
【说明】
定义sensor相关全局变量参数结构体。
【定义】
typedef struct {
td_bool init;
td_bool sync_init;
td_u8 img_mode;
td_u8 hdr;
ot_wdr_mode wdr_mode;
ot_isp_sns_regs_info regs_info[ISP_SNS_SAVE_INFO_MAX];
td_u32 fl[ISP_SNS_SAVE_INFO_MAX];
td_u32 fl_std;
td_u32 wdr_int_time[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 sns_wb_gain[OT_ISP_BAYER_CHN_NUM];
} ot_isp_sns_state;
【成员】
regs_info[ISP_SNS_SAVE_INFO_MAX] |
Sensor寄存器状态,regs_info[0]表示当前帧sensor寄存器状态,regs_info[1]表示上一帧sensor寄存器状态。 |
wdr_int_time[OT_ISP_WDR_MAX_FRAME_NUM] |
WDR模式下曝光时间,wdr_int_time[0]表示VS帧曝光时间,wdr_int_time[1]表示S帧曝光时间,wdr_int_time[2]表示M帧曝光时间,wdr_int_time[3]表示L帧曝光时间。 |
【注意事项】
- ot_isp_sns_state是保存cmos.c中全局变量而新增的结构体,多路ISP同时加载sensor库,sensor状态相关的全局变量以vi_pipe进行区别。
- 默认AWB增益在ISP配置,用户不需要关注sns_wb_gain参数。
- 实现AWB增益在Sensor配置,需要对回调函数pfn_cmos_get_awb_gains赋值,且将sns_wb_gain参数的AWB增益值配置到对应的Sensor寄存器。
【相关数据类型及接口】
无
ot_isp_awb_alg
【说明】
定义AWB算法类型。
【定义】
【成员】
【注意事项】
Hi3519DV500/Hi3516CV610不支持机器学习AWB。
【相关数据类型及接口】
ot_isp_ir_status
【说明】
定义设备当前的红外状态。
【定义】
typedef enum {
OT_ISP_IR_STATUS_NORMAL = 0,
OT_ISP_IR_STATUS_IR = 1,
OT_ISP_IR_BUTT
} ot_isp_ir_status;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_ir_switch_status
【说明】
定义设备的红外切换状态。
【定义】
typedef enum {
OT_ISP_IR_SWITCH_NONE = 0,
OT_ISP_IR_SWITCH_TO_NORMAL = 1,
OT_ISP_IR_SWITCH_TO_IR = 2,
OT_ISP_IR_SWITCH_BUTT
} ot_isp_ir_switch_status;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_ir_auto_attr
【说明】
定义红外自动切换属性。
【定义】
typedef struct {
td_bool enable;
td_u32 normal_to_ir_iso_threshold;
td_u32 ir_to_normal_iso_threshold;
td_u32 rg_max;
td_u32 rg_min;
td_u32 bg_max;
td_u32 bg_min;
ot_isp_ir_status ir_status;
ot_isp_ir_switch_status ir_switch;
} ot_isp_ir_auto_attr;
【成员】
红外状态下的B/G最大值。实际图像的B/G大于此参数时,系统需要切换到普通状态。4.8格式。取值范围:[0, 0xFFF] |
|
【注意事项】
- normal_to_ir_iso_threshold/ir_to_normal_iso_threshold/rg_max/rg_min/bg_max/bg_min的配置值和sensor/镜头/滤光片/红外灯相关。
- rg_max/rg_min/bg_max/bg_min的配置值可参考mpp/sample/ir_auto/sample_ir_auto.c中标定流程生成。
【相关数据类型及接口】
无
ot_isp_cmos_lblc
【说明】
定义Local BLC结构体。
【定义】
【成员】
【注意事项】
Hi3516CV610不支持
【相关数据类型及接口】
ot_isp_fe_roi_cfg
【说明】
定义fe roi区域的配置
【定义】
【成员】
roi区域的起始坐标和宽高。roi区域不能超过图像有效范围,长宽不能小于最小分辨率120x88和不能大于图像有效宽度,坐标以及长宽必须2对齐。 |
【注意事项】
Hi3516CV610不支持。
【相关数据类型及接口】
无
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库。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_ae.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a
【注意】
- 该接口调用了ISP库提供的AE注册回调接口ss_mpi_isp_ae_lib_reg_callback,以实现SDK提供的AE库向ISP库注册的功能。
- AE库可以注册多个实例。
- 不支持向同一ISP pipe重复注册同一个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库。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_ae.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_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, const ot_isp_sns_attr_info *sns_attr_info, ot_isp_ae_sensor_register *pregister);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_ae.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_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;
(td_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.sns_id = HY_S0603_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, const ot_isp_3a_alg_lib *ae_lib, ot_sensor_id sns_id);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_ae.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_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, HY_S0603_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曝光属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_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_set_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_set_exposure_attr(vi_pipe, &exp_attr);
【相关主题】
ss_mpi_isp_get_exposure_attr
【描述】
获取AE曝光属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_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
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a
【注意】
Hi3516CV608不支持
【举例】
无
【相关主题】
ss_mpi_isp_get_wdr_exposure_attr
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
- 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a
【注意】
Hi3516CV608不支持
【举例】
无
【相关主题】
ss_mpi_isp_set_wdr_exposure_attr
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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
Hi3519DV500和Hi3516CV610不支持HDR模式。
【举例】
无
【相关主题】
ss_mpi_isp_get_hdr_exposure_attr
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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
Hi3519DV500和Hi3516CV610不支持HDR模式。
【举例】
无
【相关主题】
ss_mpi_isp_set_hdr_exposure_attr
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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
- 客户使用此功能时可通过自己的智能模块得到相应智能信息并传递给ISP,传递方式可参考ss_mpi_isp_set_smart_info接口,ISP得到人脸或人形的亮度信息后,会针对性地调节曝光,以使人脸或人形亮度达到设定的目标值。
- 接口使用详见ot_isp_smart_exposure_attr说明。
【举例】
无
【相关主题】
ss_mpi_isp_get_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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_smart_exposure_attr
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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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 ot_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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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曝光分配策略属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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曝光分配策略属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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 route。
- 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曝光分配策略扩展属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
无。
【举例】
无。
【相关主题】
ss_mpi_isp_set_ae_route_attr_ex
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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
- 此接口用于WDR模式下设定AE短帧的曝光分配路线,AE计算得到的短帧的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光优先、增益优先、光圈优先。
- Hi3516CV608不支持。
- 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短帧曝光分配策略属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
Hi3516CV608不支持。
【举例】
无
【相关主题】
ss_mpi_isp_set_ae_route_sf_attr
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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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 route。
- Hi3516CV608不支持。
- 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_set_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
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
Hi3516CV608不支持。
【举例】
无。
【相关主题】
ss_mpi_isp_set_ae_route_sf_attr_ex
ss_mpi_isp_query_exposure_info
【描述】
获取AE内部状态信息,包括全局1024段直方图和平均亮度等统计信息,同时还可获取AE运行状态中的曝光时间、增益、曝光量和实际生效的AE route等信息。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
- 获取的曝光时间以微秒(us)为单位,获取的sensor模拟增益、sensor数字增益和ISP数字增益以倍数为单位,精度是10bit。
- 获取的曝光量=(曝光时间 * 曝光增益),未考虑光圈状态,其中曝光时间以行数为单位,曝光增益包括sensor模拟增益、sensor数字增益和ISP数字增益,以倍数为单位,6bit小数精度。若该值的精度不足以满足需求,可以根据上面高精度的曝光时间(us)和增益(10bit小数精度)重新计算一个曝光量。
- 可通过查询hist_error来获取AE是否稳定的信息,若hist_error的绝对值小于曝光容忍偏差值,意味着当前AE不会动作。
- 通过该接口获取的AE route与Proc信息中的AE route都是实际生效的值。只不过该接口的节点曝光时间以us为单位,而Proc信息中的曝光时间以行数为单位;该接口的光圈分量为F值大小,取值范围为[0,10],而Proc信息中的光圈分量为F值等效增益,大小为(1<<F值)。扩展AE route以及短帧AE route和短帧扩展AE route也是同样的对应关系。
- 若用户使用非SDK提供的AE算法,则该接口需要自己实现并且需要同步修改PQTOOLS的xml文件,具体修改方式请参考《图像质量调试工具使用指南》“物理/虚拟寄存器的添加与调试”小节。
- 调用该接口需要确保系统已经运行起来并且统计信息已经生成;当系统刚运行起来第一帧,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
【描述】
设定等曝光量转换的曝光参数相关属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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
【描述】
获取等曝光量转换的曝光参数相关属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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
【描述】
设定光圈的控制属性,该函数可实现手动光圈属性和光圈类型等参数的设置。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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
【描述】
获取光圈的控制属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_set_dciris_attr
【描述】
设定DC-Iris AI算法的控制属性,该函数可实现DC-Iris自动光圈的参数设置。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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自动光圈的控制属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_set_piris_attr
【描述】
设定P-Iris自动光圈的控制属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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自动光圈的控制属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_isp.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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的数目。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AI_MAX_STEP_FNO_NUM
【说明】
定义光圈的最大步数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
ot_isp_ae_sensor_register
【说明】
定义sensor注册结构体。
【定义】
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
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, td_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);
td_s32 (*pfn_cmos_get_thermo_default)(ot_vi_pipe vi_pipe, ot_isp_thermo_sensor_default *thermo_sns_dft);
td_void (*pfn_cmos_ae_fast_ae_attr_get)(ot_vi_pipe vi_pipe, ot_isp_ae_fast_ae_attr *fast_ae_attr);
td_void (*pfn_cmos_ae_fast_ae_attr_set)(ot_vi_pipe vi_pipe, const ot_isp_ae_fast_ae_attr *fast_ae_attr);
} 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时,无光敏快启收敛完成。
- 只有在注册Thermo库时,才需要使用pfn_cmos_get_thermo_default成员,注册AE库时,无需操作pfn_cmos_get_thermo_default成员。
- 在注册Thermo库时,只需要使用pfn_cmos_get_thermo_default成员,其他成员无需操作。
- ot_isp_ae_fast_ae_attr是Fast AE的开关。该值为TD_TRUE时,AE进行一次快速收敛,完成后AE会通过pfn_cmos_ae_fast_ae_attr_set把FastAE使能关闭。
【相关数据类型及接口】
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;
【成员】
默认初始曝光量,等于曝光时间与曝光增益的乘积,其中曝光时间的单位为微秒(us)。AE算法采用该值作为初始5帧的曝光量,可用于运动DV加速启动。 建议关注快速启动的产品形态根据常用场景配置一个合适的初始曝光量,以达到AE快速收敛。线性/WDR模式切换时,也会采用该值作为切换后第一帧的曝光量。合理修改sensor初始化序列的曝光时间和增益,将曝光时间(行数)*增益(6bit小数精度)计算得到曝光量,并赋值给该变量,可使得切换更加平滑。若不设置,该值默认为0。 |
|
默认初始AE曝光容忍偏差,AE算法采用该值作为初始100帧的曝光容忍偏差值,可用于设置得到首次AE收敛稳定标志的亮度范围。AE统计亮度第一次落在[目标亮度- init_ae_tolerance,目标亮度+ init_ae_tolerance]范围内时,得到首次AE收敛稳定标志。若不设置,该值默认为0。若在cmos.c不对该值赋值或赋值为0,则AE算法内部将其置为ae_compensation /10。AE算法内部会将该值钳位至(0, 255]。 |
|
sensor每帧实际生效的总行数。使用AE算法时,回调cmos_fps_set和cmos_slow_framerate_set时必须给该值赋值,用于返回每帧实际生效的总行数。 |
|
自动长帧模式下普通模式和长帧模式之前切换过程中,对短帧曝光时间减小的最大调整步长,以行数为单位。仅在自动长帧模式下有效。 |
|
短帧曝光时间最大步长限定开关,该值为TD_TRUE时,短帧曝光时间最大步长限制功能生效。仅在2帧行合成WDR模式下生效。 |
|
max_inc_time_step [OT_ISP_WDR_MAX_FRAME_NUM] |
目前只开放max_inc_time_step [0],max_inc_time_step [0]为短帧曝光时间增加的最大步长,以行为单位。即下一帧的曝光行数相比当前帧增加的最大曝光行数不超过max_inc_time_step [0]。仅在2帧行合成WDR模式下max_time_step_enable开关使能后生效。 |
max_dec_time_step [OT_ISP_WDR_MAX_FRAME_NUM] |
目前只开放max_dec_time_step [0],max_dec_time_step [0]为短帧曝光时间减少的最大步长,以行为单位。即下一帧的曝光行数相比当前帧减少的最大曝光行数不超过max_dec_time_step [0]。仅在2帧行合成WDR模式下max_time_step_enable开关使能后生效。 |
arr_ratio [OT_ISP_EXP_RATIO_NUM] |
多帧合成WDR相邻2帧默认曝光比。当man_ratio_enable为TD_TRUE时,采用arr_ratio [0]作为S/VS默认曝光比,arr_ratio [1]作为M/S默认曝光比,arr_ratio [2]作为L/M默认曝光比。上述VS,S,M,L分别表示极短帧,短帧,中帧和长帧的曝光时间,2帧合成时只有VS和S;3帧合成时采用VS,S和M;4帧合成时采用VS,S,M和L。6bit小数精度。 |
P-Iris可用的最大F值,与具体使用镜头相关,使用P-Iris时必须设置,用于限制实际生效的max_iris_fno_target和min_iris_fno_target,避免光圈目标值落到不合理的范围导致AE分配异常。 |
|
P-Iris可用的最小F值,与具体使用镜头相关,使用P-Iris时必须设置,用于限制实际生效的max_iris_fno_target和min_iris_fno_target,避免光圈目标值落到不合理的范围导致AE分配异常。 |
|
默认曝光策略,高光优先或低光优先。建议FSWDR模式设置为低光优先,线性模式及BuiltIn WDR设置为高光优先。若不设置该值,默认为高光优先。 |
|
|
|
|
|
在打开ae_gain_sep_cfg的情况下,该值为TD_TRUE,AE能够对sensor长短帧配置不同增益,该值为TD_FALSE时,AE对sensor长短帧配置的增益相同。 |
|
Sensor是否使用LCG+HCG模式,该值为TD_TRUE时,Sensor使用LCG+HCG模式,该值为TD_FALSE时,Sensor使用普通模式。 |
|
【注意事项】
- 线性/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,如 DCG模式,内部仅支持固定曝光比,需要配置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,如果使用该模式,需正确配置基础曝光比sns_lhcg_exp_ratio,并且必须配置prior_frame= OT_ISP_LONG_FRAME,ae_gain_sep_cfg= TD_TRUE,否则会使图像效果不正常。
- ae_stat_pos 不支持在AE使用过程中切换,只有在AE初始化、系统模式切换的时候才能切换使用的统计信息。
- WDR模式不支持使用BE统计信息进行AE曝光。
- ae_stat_pos 不建议在使用BE统计信息时改BE统计信息的位置。
- BE统计信息受前端模块影响,使用BE统计信息相比使用FE统计信息相同的目标亮度整体亮度可能会有差异。
【相关数据类型及接口】
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
【说明】
定义曝光时间、增益的精度的结构体。
【定义】
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的初始化序列配置时,曝光时间必须偏移X行之后才与sensor增益有线性关系,因此增加了offset这个变量,它为float型变量,以行为单位,将offset设置成X,AE算法内部即可完成偏移处理。一般sensor的曝光时间和增益不存在这种偏移关系,需在cmos.c中将该值配为0。
- 规定这3种精度类型,可以以统一的接口形式对接绝大部分sensor。
【相关数据类型及接口】
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,修改方法可以参考hy_s0603的cmos.c文件。另外,在cmos.c中Built-In WDR模式降帧设置应和线性一样。
- 开启VI PIPE离线卷绕功能,并且开启sensor从模式省内存功能时,不支持自动降帧模式。
【相关数据类型及接口】
无
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延时属性。
【定义】
【成员】
【注意事项】
- black_delay_frame/white_delay_frame设置越大,在AE调节步长相同的情况下,调节至目标亮度需要越长时间。
- 人眼对于过曝比较敏感,建议white_delay_frame要设置得比black_delay_frame小一些。
- 固定降帧时,若帧率较低,black_delay_frame/white_delay_frame要做出相应调整,建议不要设置过大,否则AE收敛时间会较长。
【相关数据类型及接口】
无
ot_isp_ae_range
【说明】
定义曝光时间或增益的最大值和最小值。
【定义】
【成员】
【注意事项】
- 最小值不能大于最大值。
- 最大最小值是计算后做的限制,实际生效值需要根据抗闪,sensor等原因,向下取整生效,有可能导致实际生效值小于min。
【相关数据类型及接口】
无
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参数至少有一个需小于对应参数范围的上限,避免特定场景下无法进行补偿导致图像闪烁。使用route_ex时,Again、ISPDGain参数至少有一个需小于对应参数范围的上限,避免特定场景下无法进行补偿导致图像闪烁。
- 开启自动降帧模式时,抗闪不生效。
- 开启抗闪后,为了保证ae能够收敛,again, dgain, isp_dgain不再受到sys_gain的限制。
【相关数据类型及接口】
ot_isp_subflicker
【说明】
定义ISP图像亚抗闪属性。
【定义】
【成员】
【注意事项】
-
强制抗闪模式时,最小曝光时间固定为1/120 sec(60Hz)或1/100 sec(50Hz),在某些场景(如室内对准室外窗户的背光场景)画面可能会过曝严重,但不抗闪画面工频闪又比较厉害。在这种情况下引入亚抗闪模式是为了取得过曝与闪烁之间的平衡。在强制抗闪模式下,当亚抗闪功能生效时,若画面亮度小于(ae_compensation + luma_diff),那么曝光时间仍会固定为最小抗闪时间1/120 sec(60Hz)或1/100 sec (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模式的切换。
- 自动长帧模式切换阈值的曝光量是使用曝光行数计算的,exposure_info的曝光量是使用曝光时间计算的,计算方式不同,两者差了0x40*line_per500ms/500000倍。
- Hi3516CV608不支持。
【相关数据类型及接口】
无
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模式。
开启vi distribute group功能时,不支持设置自动降帧模式
-
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模式下配置生效,ae_gain_sep_cfg需要适配sensor驱动,适配方法参考已配置的sensor的cmos_gains_update中把长短帧gain值分2次配置的方法。
- 手动模式不支持长短帧增益分开分配。
- 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。
- Hi3516CV608不支持。
【相关数据类型及接口】
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设置范围为[80,130],如果设置的值过于不合理,会导致曝光调整结果与智能检测结果相互影响,出现图像亮度振荡。
- 建议exp_coef_max值不超过0x1000,否则在人脸很暗的场景亮区会出现大面积过曝,而损失过多亮区细节。建议exp_coef_min值不小于0x40,否则在人脸很亮的场景亮区会出现暗区过黑,而损失过多暗区细节。
- 智能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均可以调整收敛速度,当运行间隔较小,调整速度过大时,图像可能会出现亮度震荡,此时可适当降低运行速度或者增加间隔smart_interval。
- 智能AE延迟恢复帧数smart_delay_num可以调整人离开场景后的曝光恢复时间,该值设置过小时在人形人脸信息出现漏检的情况可能会导致图像亮度震荡,另外,适当设置较大值可以避免人连续进出的场景下图像亮度反复调节。
- 当人脸模型不可用,只有人形模型可用时,普通模式下计算的曝光系数不会低于1倍,红外模式下计算的曝光系数不会高于1倍。
- AE是全局亮度调节算法,不能很好的处理亮度不均匀问题。例如人脸接收的光照不均匀一半亮一半暗的时候,AE只能保证整体人脸的亮度合适,但是可能存在暗区太暗亮区过曝的问题。
【相关数据类型及接口】
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的延时都是3帧。该值与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 / max_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;
【成员】
route_node [OT_ISP_AE_ROUTE_MAX_NODES] |
【注意事项】
- 最大支持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。
【相关数据类型及接口】
ss_mpi_isp_set_ae_route_attr_ex
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。
【相关数据类型及接口】
ss_mpi_isp_set_ae_route_attr_ex
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;
【成员】
FSWDR模式下,表示4To1 WDR模式下短帧(S)曝光时间,2To1 WDR模式时表示长帧曝光时间,单位为微秒(us)。线性模式不用关注该值。 |
|
FSWDR模式下,表示4To1 WDR模式下中帧(M)曝光时间,3To1 WDR模式时表示长帧曝光时间,单位为微秒(us)。线性模式不用关注该值。 |
|
统计信息,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]
- 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显示为两帧中的最小值。
- 参考曝光比更关注场景的亮暗对比,如果场景内有大片黑色或者白色区域算出来的曝光比会很大。
- KOL场景会用first_stable_time来表示每次fast ae收敛的时间,由于ae是延时反馈系统,因此收敛后要多配置几帧让sensor生效该亮度(几帧取决于sensor的生效时间)。
【相关数据类型及接口】
ss_mpi_isp_query_exposure_info
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电路和驱动是否正确。AI算法运行时,为保证其能够正常工作,需将该值设置为OT_ISP_IRIS_KEEP。
【相关数据类型及接口】
无
ot_isp_iris_type
【说明】
定义ISP光圈类型。
【定义】
typedef enum {
OT_ISP_IRIS_TYPE_DC = 0,
OT_ISP_IRIS_TYPE_P,
OT_ISP_IRIS_TYPE_BUTT,
} ot_isp_iris_type;
【成员】
【注意事项】
- 必须设置正确的光圈类型,AI算法才能正常工作。
- 若对接的是手动光圈镜头,可将该值设置为OT_ISP_IRIS_TYPE_DC,建议此时关闭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
【说明】
定义手动光圈属性。
【定义】
【成员】
【注意事项】
- 对接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_fnomax_iris_fno_target/ min_iris_fnomin_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可能需要修改。
- 以某款P-Iris镜头为例说明与镜头相关的参数该如何设置。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。 |
|
【相关数据类型及接口】
- ss_mpi_isp_set_piris_attr
- ss_mpi_isp_get_piris_attr
- ss_mpi_isp_set_ae_route_attr
- ss_mpi_isp_set_ae_route_attr_ex
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_TYPE_DC。
- 由DC-Iris切换至P-Iris,需提前设置好P-Iris镜头相关参数,并且将光圈状态设置为OT_ISP_IRIS_KEEP,再进行切换。
- 由于P-Iris在使能后需要一段时间才能完成初始化,需要等P-Iris硬件完成初始化后才能由P-Iris切回DC-Iris光圈,否则可能出现亮度异常。
Hi3516CV610配置:
- 利用Demo板或Ref板进行DC-Iris测试时,load ko时要配置以下多个寄存器,用于配置管脚复用和时钟:bspmm 0x11130054 0x1627,bspmm 0x11014598 0x0010。
- 利用Demo板或Ref板进行P-Iris测试时,load ko时要配置以下多个寄存器,用于配置管脚复用和时钟:bspmm 0x17940070 0x1420;bspmm 0x17940074 0x1030;bspmm 0x17940078 0x1030;bspmm 0x1794007c 0x1030;并配置GPIO-10对应管脚为输出模式:bspmm 0x1109a400 0xf。
Hi3519DV500配置:
- 利用Demo板或Ref板进行DC-Iris测试时,load ko时要配置以下多个寄存器,用于配置管脚复用和时钟:bspmm 0x10260058 0x1615,bspmm 0x11014598 0x0010。
- 利用Demo板或Ref板进行P-Iris测试时,load ko时要配置以下多个寄存器,用于配置管脚复用和时钟:bspmm 0x1026005c 0x1001;bspmm 0x10260064 0x1411;bspmm 0x10260060 0x1001;bspmm 0x10260068 0x1001;并配置GPIO-5和GPIO-4对应管脚为输出模式:bspmm 0x11095400 0x1;bspmm 0x11094400 0xf0。
注意:
采用SDK提供的AE库时,AE_init会打开一次默认的PWM0信号,若客户需要采用PWM0做其他处理,需要指定AI对应的PWM Number为其他值,Hi3519DV500 demo板中使用的pwm2的通道0作为输入,Hi3516CV610 demo板使用pwm1的通道7作为输入。
【相关数据类型及接口】
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
【说明】
定义寄存器状态。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
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工作原理如图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库。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
- 该接口调用了ISP库提供的AWB注册回调接口ss_mpi_isp_awb_lib_reg_callback,以实现向ISP库注册的功能。
- 用户调用此接口完成AWB库向ISP库注册。
- AWB库可以注册多个实例。
- 此接口不支持多进程操作。
- 不允许向同一pipe重复注册AWB库。
【举例】
无
【相关主题】
ss_mpi_isp_awb_lib_reg_callback
ss_mpi_awb_unregister
【描述】
向ISP注销AWB库。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
- 该接口调用了ISP库提供的AWB反注册回调接口ss_mpi_isp_awb_lib_unreg_callback,以实现AWB向ISP库反注册的功能。
- 用户调用此接口完成AWB库向ISP库反注册。
- 此接口不支持多进程操作。
【举例】
无
【相关主题】
ss_mpi_isp_awb_lib_unreg_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_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
- sns_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. sns_id = HY_S0603_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, const ot_isp_3a_alg_lib *awb_lib, ot_sensor_id sns_id);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_isp.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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
【描述】
设置白平衡属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
- 白平衡控制类型为自动时,AWB算法自动调节白平衡系数。
- 白平衡控制类型为手动时,AWB算法失效,需自行设定Rgain、Ggain、Bgain。
- 环境色温、照度会影响白点的分布范围,SDK提供的AWB算法在运行过程中,会根据环境参数自动刷新AWB Byaer域统计信息的白点参数。用户希望在AWB算法运行时修改AWB统计参数,需要调用ss_mpi_isp_set_wb_attr接口,关闭统计参数自动刷新功能。用户关闭统计参数自动刷新功能,到ISP收到配置并响应,有2帧的延时。因此,用户设置后需要等待2帧时间再修改AWB统计参数。
【举例】
无
【相关主题】
ss_mpi_isp_get_wb_attr
【描述】
获取白平衡属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_awb_attr_ex
【描述】
设置自动白平衡扩展属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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
【描述】
获取自动白平衡扩展属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_query_wb_info
【描述】
获取当前白平衡增益系数,检测色温,饱和度值,颜色校正矩阵系数等信息。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
若用户使用非 SDK 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_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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_wb_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标定的Planck曲线参数个数。
- 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_color_sector_tab:定义不同色温下自动颜色分区调节参数。
- ot_isp_color_sector:定义CCM颜色分区调节属性。
OT_ISP_CCM_MATRIX_NUM
【说明】
定义AWB可配置的CCM矩阵组数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AWB_CURVE_PARA_NUM
【说明】
定义AWB标定的Planck曲线参数个数。
【定义】
【注意事项】
无。
【相关数据类型及接口】
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回调函数结构体。
【定义】
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_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;
ot_isp_color_sector sector; /* Not support for Hi3519DV500 */
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_awb_agc_table
【说明】
定义饱和度初始化参数结构体。
【定义】
【成员】
saturation[OT_ISP_AUTO_ISO_NUM] |
【注意事项】
saturation 为非单调递减序列。
【相关数据类型及接口】
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光源标定。
【相关数据类型及接口】
ot_isp_color_sector_tab
【说明】
定义不同色温下自动颜色分区调节参数。
【定义】
typedef struct {
td_u16 hue_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
td_u16 sat_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
} ot_isp_color_sector_tab; /* Not support for Hi3519DV500 */
【成员】
hue_shift[OT_ISP_COLOR_SECTOR_NUM] |
|
sat_shift[OT_ISP_COLOR_SECTOR_NUM] |
【注意事项】
无
【相关数据类型及接口】
ot_isp_color_sector
【说明】
定义CCM颜色分区调节属性。
【定义】
typedef struct {
td_bool valid;
ot_isp_color_sector_tab color_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_color_sector; /* Not support for Hi3519DV500 */
【成员】
color_tab[OT_ISP_CCM_MATRIX_NUM] |
【注意事项】
无
【相关数据类型及接口】
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_scene_mode_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;
【成员】
static_wb[OT_ISP_BAYER_CHN_NUM] |
|
curve_para[OT_ISP_AWB_CURVE_PARA_NUM] |
|
|
取值范围:OT_ISP_AWB_ALG_LOWCOST、OT_ISP_AWB_ALG_ADVANCE、OT_ISP_ALG_NATURA。 |
|
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。在低色温场景,AWB结果Rgain小于静态白平衡系数Rgain,AWB结果Bgain大于静态白平衡系数Bgain时,校准强度小于0x80时减弱这个趋势,让图像偏红,大于0x80时增强这个趋势,让图像偏蓝;在高色温场景,AWB结果Rgain大于静态白平衡系数Rgain,AWB结果Bgain小于静态白平衡系数Bgain时,校准强度小于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算法设置的色温上下限范围内。
- shift_limit_en使能时,iso大于6400,场景灰点距离色温曲线比较远,shift大于64时,会更多的将AWB增益向Planckian曲线做映射,即采用色温曲线上对应色温的Rgain和Bgain作为最终AWB增益。主要用于人造光源场景达到保留光源色的效果。
- shift_limit_en关闭时,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;
【成员】
cr_max[OT_ISP_AUTO_ISO_NUM] |
|
cr_min[OT_ISP_AUTO_ISO_NUM] |
|
cb_max[OT_ISP_AUTO_ISO_NUM] |
|
cb_min[OT_ISP_AUTO_ISO_NUM] |
【注意事项】
- 统计参数联动使能后,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。
- 大面积单色或cr_max与cr_min(cb_max与cb_min同理)范围较小时,统计信息可能出现0值。
表 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_thresh[i]大于或等于hist_thresh[i-1]。
- 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手动白平衡属性。
【定义】
【成员】
【注意事项】
无
【相关数据类型及接口】
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的运行频率。
- Hi3519DV500仅支持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_scene_mode_status
【说明】
定义AWB室内外状态。
【定义】
typedef enum {
OT_ISP_AWB_SCENE_MODE_INDOOR = 0,
OT_ISP_AWB_SCENE_MODE_OUTDOOR = 1,
OT_ISP_AWB_SCENE_MODE_BUTT
} ot_isp_awb_scene_mode_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两个参数用来排除颜色块。如Bild 1所示,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组参数在非混合光源场景也有效,客户可通过色温权重参数调整图像风格偏冷或偏暖。Bild 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光源时发生误判,导致图像轻微偏黄。在有黄色土地的场景,或者低色温光源的场景,算法检测到肤色和没有检测到肤色的AWB结果不同,会导致视频中出现AWB结果的震荡,不稳定,如果发生这种情况,需要将fine_tun_en关闭。
- 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时,在用户校正的Planckian曲线外,增加特殊光源点,以优化该光源下颜色表现,不影响设备在其它光源下的表现;light_status设置为2时,支持用户删除特定光源的某个干扰色(肤色、绿色、蓝天等)。
- 建议删除干扰色仅用来优化特定环境的颜色表现,否则会影响其它光源的表现。在CbCr坐标,5500K光源下的肤色与3500K光源的白色重合度很高,在5500K环境删除肤色的干扰,会导致3500K光源下偏色。
- white_r_gain、white_b_gain的取值。在该光源下捕获ColorChecker Raw数据,通过Calibration Tool Static 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为半径的圆形区域与Planckian曲线重合。增加光源点或删除干扰色,设置radius半径太大时(覆盖场景内大多数统计块),会导致功能失效,甚至起反作用。
- 当前支持定义最多4个光源色,4个相互独立。4个光源点需要避免交集,特别需要避免以下情况:CbCr坐标的单个点,既指定为增加的独立光源点,又指定为删除的干扰色。
【相关数据类型及接口】
ot_isp_awb_in_out_attr
【说明】
定义对场景做室内外判断的参数。
【定义】
typedef struct {
td_bool enable;
ot_op_mode op_type;
ot_isp_awb_scene_mode_status scene_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数字增益。当等效曝光时间大于out_thresh的1.2倍时,认为当前环境为室内,AWB运行时会使用与室内相关的参数。
- 用户调用自己的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_scene_mode_status scene_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之和有可能大于白平衡分区个数,原因是部分区域可能受到两种光源的影响,算法不将重叠区域严格识别,会叠加到主光源、次要光源。
- Hi3519DV500/Hi3516CV610不支持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_color_sector_attr:设置颜色分区调节属性。
- ss_mpi_isp_get_color_sector_attr:获取颜色分区调节属性。
ss_mpi_isp_set_saturation_attr
【描述】
设置颜色饱和度属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_get_saturation_attr
ss_mpi_isp_get_saturation_attr
【描述】
获取颜色饱和度属性。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_saturation_attr
ss_mpi_isp_set_ccm_attr
【描述】
设置颜色矩阵。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_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
【描述】
获取颜色矩阵。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_color_sector_attr
【描述】
设置颜色分区调节属性。
【语法】
td_s32 ss_mpi_isp_set_color_sector_attr (ot_vi_pipe vi_pipe, ot_isp_color_sector_attr *sector_attr);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_get_color_sector_attr
ss_mpi_isp_get_color_sector_attr
【描述】
获取颜色分区调节属性。
【语法】
td_s32 ss_mpi_isp_get_color_sector_attr (ot_vi_pipe vi_pipe, ot_isp_color_sector_attr *sector_attr);
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_awb.h、ss_mpi_awb.h
- 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_color_sector_attr
数据类型
- OT_ISP_COLOR_SECTOR_NUM:定义颜色分区调节的区域组数。
- 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_param:定义多组颜色矫正矩阵系数。
- ot_isp_color_matrix_manual:定义手动颜色校正矩阵属性。
- ot_isp_color_sector_attr:定义颜色分区调节属性。
- ot_isp_color_sector_auto:定义自动颜色校正矩阵属性。
- ot_isp_color_sector_param:定义不同色温下自动颜色分区调节参数。
- ot_isp_color_sector_manual:定义手动颜色分区调节参数。
OT_ISP_COLOR_SECTOR_NUM
【说明】
定义颜色分区调节的区域组数。
【定义】
【注意事项】
无
【相关数据类型及接口】
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的描述。
在自动饱和度模式下,系统最终的饱和度由系统增益对应的sat [16]变量,AWB控制的混合光源下自动调节饱和度multi_ls_scaler,极低照度下CCM Bypass功能iso_act_en ,高、低色温下CCM Bypass功能temp_act_en,几个因素共同决定。
-
op_type为OT_OP_MODE_MANUAL,使用手动饱和度调节功能。
此时变量sat无效。
在手动饱和度模式下,系统最终的饱和度由用户完全控制。
-
-
调节饱和度参数不能保证图像亮度不改变,在目标饱和度相对标准值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;
【成员】
【注意事项】
当调节CCM的saturation等参数观察颜色变化,觉得变化较慢时,需要注意3DNR的tfs参数是否调节到12以下。tfs设置12以上的时候会有比较强的帧间延时,导致有CCM参数响应不及时的感觉。
【相关数据类型及接口】
ot_isp_saturation_auto
【说明】
定义自动饱和度属性。
【定义】
typedef struct {
td_u8 sat[OT_ISP_AUTO_ISO_NUM]; /* RW; Range: [0x0, 0xFF]; should be decreased with increasing ISO */
} ot_isp_saturation_auto;
【成员】
sat[OT_ISP_AUTO_ISO_NUM] |
表 1 sat在不同的增益情况下的推荐设置值
【注意事项】
无
【相关数据类型及接口】
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控制得到的CCM矩阵逐渐调向接近单位阵,这时CCM的实际饱和度会和饱和度数组中设定的不一致。用户关闭该功能后,极低照度下,饱和度数组仍生效。
- temp_act_en功能指的是在高色温(大于8000K)和低色温场景(小于2500K),AWB可能未完全恢复,此时采用高饱和度CCM矩阵,会加剧AWB的偏色程度。比如钠灯场景,AWB校正后白色区域蓝色稍有不足,采用高饱和度CCM矩阵,白色区域的蓝色分量可能为0,图像整体偏黄。使能temp_act_en,在高低色温下逐渐BypassCCM,将由饱和度数组sat控制得到的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 bSatEn=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; Manul 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为手动设定参数值。
【相关数据类型及接口】
ot_isp_color_sector_attr
【说明】
定义颜色分区调节属性。
【定义】
typedef struct {
td_bool enable; /* RW; Range: [0, 1]; Format:1.0; If enabled, sector on */
ot_isp_color_sector_manual manual_attr;
ot_isp_color_sector_auto auto_attr;
} ot_isp_color_sector_attr;
【成员】
【注意事项】
Hi3519DV500不支持。
【相关数据类型及接口】
ot_isp_color_sector_auto
【说明】
定义自动颜色校正矩阵属性。
【定义】
typedef struct {
ot_isp_color_sector_param color_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_color_sector_auto;
【成员】
color_tab[OT_ISP_CCM_MATRIX_NUM] |
【注意事项】
Hi3519DV500 不支持。
【相关数据类型及接口】
ot_isp_color_sector_param
【说明】
定义不同色温下自动颜色分区调节参数。
【定义】
typedef struct {
td_u8 hue_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
td_u8 sat_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
} ot_isp_color_sector_param; /* Not support for Hi3519DV500 */
【成员】
hue_shift[OT_ISP_COLOR_SECTOR_NUM] |
|
sat_shift[OT_ISP_COLOR_SECTOR_NUM] |
【注意事项】
- 色调调节和饱和度调节20为不调节。对应当前的各组色温下的自动CCM参数设置。
- 色调调节大于20为顺时针色调偏移,小于20为逆时针色调偏移。
- 饱和度调节大于20为增加饱和度,小于20为减少饱和度。
- 色调调节和饱和度调节分区对应为:红色,肤色,黄色,绿色,蓝色,紫色。
- Hi3519DV500 不支持。
【相关数据类型及接口】
ot_isp_color_sector_manual
【说明】
定义手动颜色分区调节参数。
【定义】
typedef struct {
td_u8 hue_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
td_u8 sat_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
} ot_isp_color_sector_manual; /* Not support for Hi3519DV500 */
【成员】
hue_shift[OT_ISP_COLOR_SECTOR_NUM] |
|
sat_shift[OT_ISP_COLOR_SECTOR_NUM] |
【注意事项】
- 色调调节和饱和度调节20为不调节。对应当前的手动CCM参数设置。
- Hi3519DV500 不支持。
【相关数据类型及接口】




