前言¶
概述
本文为使用ISP开发的程序员而写,目的是为您在开发过程中遇到的问题提供解决办法和帮助。
说明: 本文以SS928V100描述为例,未有特殊说明,SS927V100与SS928V100内容一致。
产品版本
与本文档相对应的产品版本如下。
产品名称 |
产品版本 |
|---|---|
SS928 |
V100 |
SS927 |
V100 |
读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修订记录
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B01 |
2025-09-15 |
第1次临时版本发布。 |
概述¶
概述¶
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逻辑,以达到自动调节图像质量的目的。
图 1 ISP控制结构示意图

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

不同的sensor都以回调函数的形式,向ISP算法库注册控制函数。ISP控制单元调度基础算法库和3A算法库时,将通过这些回调函数获取初始化参数,并控制sensor,如调节曝光时间、模拟增益、数字增益,控制lens步进聚焦或旋转光圈等。
开发模式¶
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使用libot_ae.a,AWB使用自己的3A算法库。SDK提供了灵活多变的支持方式。
内部流程¶
Firmware内部流程分两部分,如图1所示。一部分是初始化任务,主要完成ISP控制单元的初始化、ISP基础算法库的初始化、3A算法库的初始化,包括调用sensor的回调获取sensor差异化的初始化参数;另一部分是动态调节过程,在这个过程中,firmware中的ISP控制单元调度ISP基础算法库和3A算法库,实时计算并进行相应控制。Firmware的软件结构如图2所示。
图 1 ISP firmware 内部流程

图 2 ISP firmware 软件结构

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

如果用户调试好图像效果后,可以使用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的文件组织结构如图1所示,ISP库和3A库、sensor库、dehaze库、ldci库、drc库分别独立。Firmware中的drv生成的驱动程序向用户态上报ISP中断,并以该中断驱动Firmware的ISP控制单元运转。ISP控制单元从驱动程序中获取统计信息,并调度基础算法单元和3A算法库,最后通过驱动程序配置寄存器。
Src文件夹中包含ISP控制单元和基础算法单元,编译后生成libss_isp.a、libot_isp.a,即ISP库。3a文件夹中包含AE/AWB算法库,用户也可以基于统一的接口界面开发自己的3a算法。Sensor文件夹中包含了各个sensor的驱动程序,该部分代码开源。dehaze文件夹对应去雾算法程序,ldci文件夹对应局域自动对比度增强算法程序,drc文件夹对应动态范围压缩算法程序,该部分代码不开源。
图 1 ISP firmware 文件组织

系统控制¶
功能概述¶
系统控制部分包含了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_run_once:运行红外自动切换功能。
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_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_mem_init¶
【描述】
初始化ISP外部寄存器。
【语法】
td_s32 ss_mpi_isp_mem_init(ot_vi_pipe vi_pipe);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
外部寄存器初始化前需要确保ko已加载,sensor向ISP注册了回调函数。
调用本接口后,才能调用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_exit后,再调用本接口重新初始化。
LiteOS没有内核模块加载概念,Linux load ko过程对应LiteOS release/ko下sdk_init.c中执行的相关过程。
不支持相同vi_pipe时,多线程执行ISP创建和销毁(多线程同时调用sensor_register_callback、ss_mpi_ae_register、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接口停止pipe。
ss_mpi_vi_stop_pipe请参考《MPP媒体处理软件V5.0开发参考》的“视频输入”章节)
【举例】
无
【相关主题】
ss_mpi_isp_init¶
【描述】
初始化ISP firmware。
【语法】
td_s32 ss_mpi_isp_init(ot_vi_pipe vi_pipe);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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_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接口停止pipe。
ss_mpi_vi_stop_pipe请参考《MPP媒体处理软件V5.0开发参考》的“视频输入”章节。
【举例】
无
【相关主题】
ss_mpi_isp_run¶
【描述】
运行ISP firmware。
【语法】
td_s32 ss_mpi_isp_run(ot_vi_pipe vi_pipe);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
运行前需要确保sensor已经初始化,并且向ISP注册了回调函数。
运行前需要确保已调用ss_mpi_isp_init初始化ISP。
不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit接口在同一个进程调用。
该接口是阻塞接口,建议用户采用实时线程处理。
【举例】
无
【相关主题】
ss_mpi_isp_run_once¶
【描述】
运行ISP firmware 一次。
【语法】
td_s32 ss_mpi_isp_run_once(ot_vi_pipe vi_pipe);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
运行前需要确保sensor已经初始化,并且向ISP注册了回调函数。
运行前需要确保已调用ss_mpi_isp_init初始化ISP。
不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、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 媒体处理软件V5.0 开发参考》的VI章节),具体参考【举例】中的伪代码。
使用ss_mpi_isp_run_once模式时处理视频流时,支持模式切换及分辨率切换,切换流程与使用ss_mpi_isp_run处理视频流类似:即切换过程中ISP模块无需退出,VI模块需要销毁重建。区别在于:使用ss_mpi_isp_run_once处理视频流时需要用户创建一个线程,参考示例中伪代码。
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类型。
该接口不支持拼接模式。
【举例】
上一次发送的raw数据处理完,才能继续调用ss_mpi_isp_run_once:
……
ret = ss_mpi_isp_run_once(vi_pipe);
if (TD_SUCCESS != ret) {
SAMPLE_PRT("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 (TD_SUCCESS != ret) {
SAMPLE_PRT("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 (TD_SUCCESS != ret) {
SAMPLE_PRT("ss_mpi_vi_get_chn_frame failed with %#x\n", ret);
return ret;
}
ret = ss_mpi_vi_release_chn_frame(vi_pipe, vi_chn, &yuv_frame_info);
if (TD_SUCCESS != ret) {
SAMPLE_PRT("ss_mpi_vi_release_chn_frame failed with %#x\n", ret);
return ret;
}
使用ss_mpi_isp_run_once处理视频流时需要用户创建一个线程:
…
stViConfig.astViInfo[s32SnsId].stSnsInfo.enSnsType = SENSOR_NAME_MIPI_8M_30FPS_12BIT,
stViConfig.astViInfo[s32SnsId].stDevInfo.enWDRMode = WDR_MODE_3To1_LINE;
…
pthread_t thread;
ret = pthread_create(&thread, NULL, Ot_Vi_SendWDRFrameProc, (ot_void*)&stSendRawThreadInfo);
if (0 == ret)
{
pthread_detach(thread);
}
SAMPLE_COMM_VI_SwitchMode_StopVI(&stViConfig);
g_u32RunOnceSwitch =1;
g_enWDRMode = WDR_MODE_NONE;
stViConfig.astViInfo[s32SnsId].stSnsInfo.enSnsType = SENSOR_NAME_MIPI_8M_30FPS_12BIT;
stViConfig.astViInfo[s32SnsId].stDevInfo.enWDRMode = WDR_MODE_NONE;
stViConfig.astViInfo[0].stPipeInfo.aPipe[0] = ViRawOutPipe;
stViConfig.astViInfo[0].stPipeInfo.aPipe[1] = -1;
stViConfig.astViInfo[0].stPipeInfo.aPipe[2] = -1;
stViConfig.astViInfo[0].stPipeInfo.aPipe[3] = -1;
SAMPLE_RunonceSwitch_StartVi(&stViConfig);
SAMPLE_COMM_VI_SwitcotSPMode(&stViConfig);
g_u32RunOnceSwitch =0;
static void *Ot_Vi_SendWDRFrameProc(void *pArgs)
{
……
while(1)
{
td_s32 s32MilliSec = 100;
i++;
if(g_u32RunOnceSwitch ==1)
{
ss_mpi_isp_run_once(ViRawOutPipe);
}
if ( g_enWDRMode == WDR_MODE_3To1_LINE ) {
ret = SS_MPI_VI_GetPipeFrame(ViRawOutPipe, &stRawInfo[0], s32MilliSec);
if (TD_SUCCESS != ret) {
SAMPLE_PRT("SS_MPI_VI_GetPipeFrame failed with %#x\n", ret);
continue;
}
ret = SAMPLE_Capture_VideoWDRFrameProc(ViRawOutPipe, &stRawInfo[0], &stRawInfo[1], &stRawInfo[2]);
if (TD_SUCCESS != ret) {
break;
}
ret = SS_MPI_VI_ReleasePipeFrame(ViRawOutPipe, &stRawInfo[0]);
if (TD_SUCCESS != ret) {
SAMPLE_PRT("SS_MPI_VI_ReleasePipeFrame failed with %#x\n", ret);
goto EXIT5;
}
}
if ( g_enWDRMode == WDR_MODE_NONE )
{
ret = SS_MPI_VI_GetPipeFrame(ViRawOutPipe, &stRawInfo[0], s32MilliSec);
if (TD_SUCCESS != ret) {
SAMPLE_PRT("SS_MPI_VI_GetPipeFrame failed with %#x\n", ret);
continue;
}
ret = SAMPLE_Capture_VideoFrameProc(ViRawOutPipe, &stRawInfo[0]);
if (TD_SUCCESS != ret) {
break;
}
ret = SS_MPI_VI_ReleasePipeFrame(ViRawOutPipe, &stRawInfo[0]);
if (TD_SUCCESS != ret) {
SAMPLE_PRT("SS_MPI_VI_ReleasePipeFrame failed with %#x\n", ret);
goto EXIT5;
}
}
EXIT5:
stDumpAttr.bEnable = TD_FALSE;
stDumpAttr.u32Depth = 0;
SS_MPI_VI_SetPipeDumpAttr(ViRawOutPipe, &stDumpAttr);
return NULL;
}
【相关主题】
ss_mpi_isp_exit¶
【描述】
退出ISP firmware。
【语法】
td_s32 ss_mpi_isp_exit(ot_vi_pipe vi_pipe);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
调用ss_mpi_isp_init和ss_mpi_isp_run之后,再调用本接口退出ISP firmware。
不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、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_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit)
推荐调用ss_mpi_isp_init之后,在调用本接口。
【举例】
无
【相关主题】
ss_mpi_isp_set_pub_attr¶
【描述】
设置ISP公共属性。
【语法】
td_s32 ss_mpi_isp_set_pub_attr(ot_vi_pipe vi_pipe, const ot_isp_pub_attr *pub_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
pub_attr |
ISP公共属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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可能不会重新初始化而导致异常,模式切换时也不能切换到自己本身。对于ISP输入同样分辨率和帧率但需要采用不同初始化序列的情况,可以利用不同的sns_mode来实现模式切换。
使用ISP提供的裁剪功能时,需要注意:
动态裁剪图像的宽高时会重新初始化sensor,切换流程参照sample提供的切换流程(先停掉Vi设备,再创建Vi设备,然后设置ss_mpi_isp_set_pub_attr进行切换)。在线WDR模式下不支持ISP的裁剪功能。
当输入为YUV时,裁剪不生效。
用户可以更改sensor cmos.c里面的cmos_set_image_mode函数调整sensor模式切换的顺序。如只提供了5M30fps和1080P60fps初始化序列的sensor,若要运行1080P30fps,可以从5M30fps裁剪得到,也可以从1080P60fps降帧得到,修改cmos_set_image_mode函数实现即可。
通过ss_mpi_isp_set_pub_attr接口配置超过sensor帧率范围的帧率时,该帧率值能配置到ISP中,但是sensor_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,才能保证切换成功。
在线模式切换线性模式和WDR模式时,会关闭bnr的时域滤波(不需要用户手动关闭),模式切换后需要延迟4帧,时域滤波才能重新生效,否则会导致图像异常。用户可在模式切换后的延迟4帧内预配置时域滤波状态,若无预配置,延迟结束后会重新生效模式切换前的时域滤波状态。
【举例】
无
【相关主题】
ss_mpi_isp_get_pub_attr¶
【描述】
获取ISP公共属性。
【语法】
td_s32 ss_mpi_isp_get_pub_attr(ot_vi_pipe vi_pipe, ot_isp_pub_attr *pub_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
pub_attr |
ISP公共属性。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_fmw_state¶
【描述】
设置ISP firmware状态。
【语法】
td_s32 ss_mpi_isp_set_fmw_state(ot_vi_pipe vi_pipe, const ot_isp_fmw_state state);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
state |
ISP firmware状态。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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状态。
【语法】
td_s32 ss_mpi_isp_get_fmw_state(ot_vi_pipe vi_pipe, ot_isp_fmw_state *state);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
state |
ISP firmware状态。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
slave_dev |
Slave设备号。 |
输入 |
sns_sync |
同步信号配置。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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行场同步信号。
【语法】
td_s32 ss_mpi_isp_get_sns_slave_attr(ot_slave_dev slave_dev, ot_isp_slave_sns_sync *sns_sync);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
slave_dev |
Slave设备号。 |
输入 |
sns_sync |
同步信号配置。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_module_ctrl¶
【描述】
设定ISP功能模块的控制。
【语法】
td_s32 ss_mpi_isp_set_module_ctrl(ot_vi_pipe vi_pipe, const ot_isp_module_ctrl *mod_ctrl);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
mod_ctrl |
模块控制值。每个比特位控制着ISP中的一个功能模块的使能。 0:开启该模块; 1:关闭该模块。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
该接口可控制ISP各功能模块的使能。
该接口对应的寄存器与各模块的使能寄存器复用。
【举例】
无
【相关主题】
ss_mpi_isp_get_module_ctrl¶
【描述】
获取ISP功能模块的控制。
【语法】
td_s32 ss_mpi_isp_get_module_ctrl(ot_vi_pipe vi_pipe, ot_isp_module_ctrl *mod_ctrl);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
mod_ctrl |
模块控制值。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
isp_vd_type |
场同步信号。 |
输入 |
milli_sec |
超时时间,单位ms |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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业务的帧率减半。
【举例】
无
【相关主题】
无
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 , ot_isp_sensor_register *sns_register);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
sns_attr_info |
向ISP注册的Sensor的属性。 |
输入 |
sns_register |
Sensor注册结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
sensor_id是sensor库中自定义的值,主要用于校对向ISP注册的sensor和向3A注册的sensor是否为同一个sensor。
ISP通过sensor注册的一系列回调接口,获取差异化的初始化参数,并控制sensor。
此接口不支持多进程操作。
图 1 ISP库与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_sensor_exp_func * sensor_exp_func = &isp_register.sns_exp;
(ot_void)memset_s(sensor_exp_func, sizeof(ot_isp_sensor_exp_func), 0, sizeof(ot_isp_sensor_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.sensor_id= SENSOR_NAME_ID;
ret = ss_mpi_isp_sensor_reg_callback(vi_pipe, &sensor_id, &isp_register);
if (ret) {
printf("sensor register callback function failed!\n");
return ret;
}
【相关主题】
ss_mpi_isp_sensor_unreg_callback¶
【描述】
ISP提供的sensor反注册的回调接口。
【语法】
td_s32 ss_mpi_isp_sensor_unreg_callback(ot_vi_pipe vi_pipe, ot_sensor_id sensor_id);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
sensor_id |
向ISP注册的Sensor的Id。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
sensor_id是sensor库中自定义的值,主要用于校对向ISP反注册的sensor和向3A反注册的sensor是否为同一个sensor。
此接口不支持多进程操作。
【举例】
ot_vi_pipe vi_pipe = 0;
ret = ss_mpi_isp_sensor_unreg_callback(vi_pipe, SENSOR_NAME_ID);
if (ret)
{
printf("sensor unregister callback function failed!\n");
return ret;
}
【相关主题】
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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
ae_lib |
AE库结构体指针。 |
输入 |
ae_register |
AE库注册结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
ISP提供统一的AE算法库接口,初始化、运行、控制、销毁AE算法库。使用SDK提供的AE算法库时,不需要关注此接口;使用用户自己的AE算法库时,需要调用此接口向ISP注册回调函数。
此接口不支持多进程操作。
最大支持2个AE库注册。
图 1 ISP库与AE库间的接口

【举例】
ot_isp_ae_register ae_register;
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¶
【描述】
ISP提供的AE库反注册的回调接口。
【语法】
td_s32 ss_mpi_isp_ae_lib_unreg_callback(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
ae_lib |
AE库结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
使用SDK提供的AE算法库时,不需要关注此接口;使用用户自己的AE算法库时,需要调用此接口向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_awb_lib_reg_callback¶
【描述】
ISP提供的AWB库注册的回调接口。
【语法】
td_s32 ss_mpi_isp_awb_lib_reg_callback(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *awb_lib, ot_isp_awb_register *awb_register);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
awb_lib |
AWB库结构体指针。 |
输入 |
awb_register |
AWB库注册结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
ISP提供统一的AWB算法库接口,初始化、运行、控制、销毁AWB算法库。使用AWB算法库时,不需要关注此接口;使用用户自己的AWB算法库时,需要调用此接口向ISP注册回调函数。
此接口不支持多进程操作。
最大支持2个AWB库注册。
图 1 ISP库与AWB库间的接口

【举例】
无
【相关主题】
ss_mpi_isp_awb_lib_unreg_callback¶
【描述】
ISP提供的AWB库反注册的回调接口。
【语法】
td_s32 ss_mpi_isp_awb_lib_unreg_callback(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *awb_lib);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
awb_lib |
AWB库结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
无
【举例】
使用SDK提供的AWB算法库时,不需要关注此接口;使用用户自己的AWB算法库时,需要调用此接口向ISP反注册回调函数。
此接口不支持多进程操作。
【相关主题】
ss_mpi_isp_set_bind_attr¶
【描述】
设置ISP库与3A库、sensor的绑定关系。
【语法】
td_s32 ss_mpi_isp_set_bind_attr(ot_vi_pipe vi_pipe, const ot_isp_bind_attr *bind_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
bind_attr |
绑定结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
不是必须调用的接口,仅当注册多个AE/AWB库,并希望切换算法库时才需要调用。当注册多个AE/AWB库时,默认绑定的为最后一个注册的AE库和AWB库。
此接口不支持多进程操作。
【举例】
无
【相关主题】
ss_mpi_isp_get_bind_attr¶
【描述】
获取ISP库与3A库、sensor的绑定关系。
【语法】
td_s32 ss_mpi_isp_get_bind_attr(ot_vi_pipe vi_pipe, ot_isp_bind_attr *bind_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
bind_attr |
绑定结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
此接口不支持多进程操作。
【举例】
无
【相关主题】
ss_mpi_isp_set_dcf_info¶
【描述】
设置DCF参数。
【语法】
td_s32 ss_mpi_isp_set_dcf_info(ot_vi_pipe vi_pipe, const ot_isp_dcf_info *isp_dcf);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
isp_dcf |
DCF参数结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
调用该接口前须调用ss_mpi_vb_set_supplement_cfg(请参考《MPP媒体处理软件V5.0开发参考》的“系统控制”小节), 将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参数。
【语法】
td_s32 ss_mpi_isp_get_dcf_info(ot_vi_pipe vi_pipe, ot_isp_dcf_info *isp_dcf)
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
isp_dcf |
DCF参数结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
pipe_differ |
多路ISP差异属性结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
该接口不是必调接口,用于多路ISP拼接模式,对拼接效果要求更高时,可以通过标定工具(PQ_Stitching_Tool)标定出多路ISP的亮度、颜色等差异,通过此接口配置减少多路ISP输出图像的差异。该接口必须在ss_mpi_isp_init之后调用。
【举例】
无
【相关主题】
ss_mpi_isp_get_pipe_differ_attr¶
【描述】
获取多路ISP Pipe差异属性。
【语法】
td_s32 ss_mpi_isp_get_pipe_differ_attr(ot_vi_pipe vi_pipe, ot_isp_pipe_diff_attr *pipe_differ);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
pipe_differ |
多路ISP差异属性结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
该接口不是必调接口,与ss_mpi_isp_set_pipe_differ_attr配套使用,可以获取对应配置的多路ISP差异参数。
【举例】
无
【相关主题】
ss_mpi_isp_set_ctrl_param¶
【描述】
设置ISP控制参数。
【语法】
td_s32 ss_mpi_isp_set_ctrl_param(ot_vi_pipe vi_pipe, const ot_isp_ctrl_param *isp_ctrl_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号 |
输入 |
isp_ctrl_param |
ISP控制参数结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
接口使用限制详见ot_isp_ctrl_param中的注意事项。
【举例】
无
【相关主题】
ss_mpi_isp_get_ctrl_param¶
【描述】
获取ISP控制参数。
【语法】
td_s32 ss_mpi_isp_get_ctrl_param(ot_vi_pipe vi_pipe, ot_isp_ctrl_param *isp_ctrl_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号 |
输入 |
isp_ctrl_param |
ISP控制参数结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_mod_param¶
【描述】
设置ISP模块参数。
【语法】
td_s32 ss_mpi_isp_set_mod_param(const ot_isp_mod_param *mod_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
mod_param |
ISP模块参数结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
接口使用限制详见ot_isp_mod_param中的注意事项。
【举例】
无
【相关主题】
ss_mpi_isp_get_mod_param¶
【描述】
获取ISP模块参数。
【语法】
td_s32 ss_mpi_isp_get_mod_param(ot_isp_mod_param *mod_param);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
mod_param |
ISP模块参数结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
无
【举例】
无
【相关主题】
ss_mpi_isp_set_smart_info¶
【描述】
设置ISP模块智能信息。
【语法】
td_s32 ss_mpi_isp_set_smart_info(ot_vi_pipe vi_pipe, const ot_isp_smart_info *smart_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
smart_info |
智能信息,包括人脸、人形信息。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
接口使用详见ot_isp_smart_info说明。
【举例】
无
【相关主题】
ss_mpi_isp_get_smart_info¶
【描述】
获取ISP模块智能信息。
【语法】
td_s32 ss_mpi_isp_get_smart_info(ot_vi_pipe vi_pipe, ot_isp_smart_info *smart_info);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
smart_info |
智能信息,包括人脸、人形信息。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
awb_calibration_gain |
AWB在线标定输出的增益结构体。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
AWB参数在线标定的接口主要为了支撑消费类客户对运动DV量产时产线上的AWB参数的校正。该接口的调用环境限于均匀光源下的均匀背景,且色温范围限于4500K到6500K。
【举例】
无
【相关主题】
无
ss_mpi_isp_ir_auto_run_once¶
【描述】
运行红外自动切换功能。
【语法】
td_s32 ss_mpi_isp_ir_auto_run_once(ot_vi_pipe vi_pipe, ot_isp_ir_auto_attr *ir_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
ir_attr |
红外自动切换属性。 |
输入/输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a、libot_ir_auto.a
【注意】
使用此接口时需要包含libot_ir_auto.a,该功能SS928V100不支持。
【举例】
无
【相关主题】
无
ss_mpi_isp_set_be_frame_attr¶
【描述】
设置be frame属性。
【语法】
td_s32 ss_mpi_isp_set_be_frame_attr(ot_vi_pipe vi_pipe, const ot_isp_be_frame_attr *be_frame_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
be_frame_attr |
Be frame属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
配置该接口获取WDR合成后的raw数据时,WDR模块之后的ISP BE所有模块都被bypass;需要联合配置vi chn的相关属性才能从vi的通道中写出raw(会导致视频流的中断),具体参考举例中的伪代码。ss_mpi_vi_set_chn_attr/ss_mpi_vi_get_chn_frame/ss_mpi_vi_release_chn_frame具体请参考《MPP 媒体处理软件 V5.0 开发参考》“视频输入2”章节。
【举例】
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;
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 属性。
【语法】
td_s32 ss_mpi_isp_get_be_frame_attr(ot_vi_pipe vi_pipe, ot_isp_be_frame_attr *be_frame_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
be_frame_attr |
Be frame属性。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_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);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
noise_calibration |
噪声模型标定参数。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_set_frame_info¶
【描述】
设置ISP实时信息。
【语法】
td_s32 ss_mpi_isp_set_frame_info(ot_vi_pipe vi_pipe, const ot_isp_frame_info *isp_frame);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
isp_frame |
ISP实时信息。ot_isp_frame_info详情请参见《MPP 媒体处理软件 Vx.x 开发参考》"系统控制”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_isp_get_frame_info¶
【描述】
获取ISP实时信息。
【语法】
td_s32 ss_mpi_isp_get_frame_info(ot_vi_pipe vi_pipe, ot_isp_frame_info *isp_frame);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
vi_pipe号。 |
输入 |
isp_frame |
ISP实时信息。ot_isp_frame_info详情请参见《MPP 媒体处理软件 Vx.x 开发参考》"系统控制”章节。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
无
【举例】
无
【相关主题】
无
数据类型¶
本文档中变量,如未明确指定取值范围,则默认是数据类型对应的取值范围。例如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_AE_ZONE_COLUMN:AE垂直方向的分区间数目。
OT_ISP_MG_ZONE_ROW:MG水平方向的分区间数目。
OT_ISP_MG_ZONE_COLUMN:MG垂直方向的分区间数目。
OT_ISP_AE_ROUTE_MAX_NODES:AE ROUTE节点的最大数目。
OT_ISP_AE_ROUTE_EX_MAX_NODES:扩展AE ROUTE节点的最大数目。
OT_ISP_BAYER_CALIBTAION_MAX_NUM:定义标定噪声模型参数的iso档位个数的最大值。
OT_BAYER_CALIBRATION_PARA_NUM_NEW:定义标定噪声模型参数的最大个数。
OT_ISP_CCM_MATRIX_SIZE:CCM矩阵参数个数。
OT_DCF_DRSCRIPTION_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_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_sensor_register:定义sensor注册结构体。
ot_isp_sensor_exp_func:定义sensor回调函数结构体。
ot_isp_cmos_sensor_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_sensor_max_resolution:定义sensor最大分辨率结构体。
ot_isp_cmos_clut:定义CLUT结构体。
ot_isp_cmos_sensor_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_sensor_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_info:定义ISP提供给AWB的统计信息结构体。
ot_isp_awb_raw_stat_attr:定义AWB Bayer域统计信息结构体。
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_mode:定义pipe diff的模式。
ot_isp_pipe_diff_param:定义两路ISP差异参数结构体。
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的中断类型。
ot_isp_ctrl_param:定义ISP控制参数结构体。
ot_isp_mod_param:定义ISP模块参数结构体。
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_BAYER_CHN_NUM¶
【说明】
定义bayer数据的通道数目。
【定义】
#define OT_ISP_BAYER_CHN_NUM 4
【注意事项】
无。
【相关数据类型及接口】
ot_isp_awb_sensor_default
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_MAX_PIPE_NUM¶
【说明】
定义ISP 支持的PIPE数目的最大值。
【定义】
#define OT_ISP_MAX_PHY_PIPE_NUM 4
#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_ae_stitch_stats
OT_ISP_WDR_MAX_FRAME_NUM¶
【说明】
定义WDR合成的最大帧数。
【定义】
#define OT_ISP_WDR_MAX_FRAME_NUM 4
【注意事项】
无。
【相关数据类型及接口】
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_EXP_RATIO_NUM¶
【说明】
定义WDR曝光比的数目。
【定义】
#define OT_ISP_EXP_RATIO_NUM 3
【注意事项】
无。
【相关数据类型及接口】
ot_isp_ae_sensor_default
ot_isp_wdr_exposure_attr
OT_ISP_AUTO_ISO_NUM¶
【说明】
定义ISO档位数。
【定义】
#define OT_ISP_AUTO_ISO_NUM 16
【注意事项】
无。
【相关数据类型及接口】
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_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离线分块数目的最大值。
【定义】
#define OT_ISP_STRIPING_MAX_NUM 3
【注意事项】
无。
【相关数据类型及接口】
ot_isp_fpn_frame_info
ot_isp_dp_static_calibrate
ot_isp_dp_static_attr
OT_ISP_MAX_STITCH_NUM¶
【说明】
定义ISP拼接组的最大个数。
【定义】
#define OT_ISP_MAX_STITCH_NUM 4
【注意事项】
无。
【相关数据类型及接口】
ot_isp_wb_stitch_stats
ALG_LIB_NAME_SIZE_MAX¶
【说明】
定义3A算法库名称的最大字符数。
【定义】
#define ALG_LIB_NAME_SIZE_MAX 20
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_MAX_SNS_REGS¶
【说明】
曝光结果写到sensor时需要配置的寄存器个数的最大值。
【定义】
#define OT_ISP_MAX_SNS_REGS 32
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_PEOPLE_CLASS_MAX¶
【说明】
定义人形、人脸检测类型的最大数目。
【定义】
#define OT_ISP_PEOPLE_CLASS_MAX 2
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_TUNNEL_CLASS_MAX¶
【说明】
定义隧道检测类型的最大数目。
【定义】
#define OT_ISP_TUNNEL_CLASS_MAX 2
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_AE_ZONE_ROW¶
【说明】
AE水平方向的分区间数目。
【定义】
#define OT_ISP_AE_ZONE_ROW 15
【注意事项】
无。
【相关数据类型及接口】
ot_isp_ae_stats_cfg
ot_isp_ae_grid_info
ot_isp_ae_stats
ot_isp_ae_stitch_stats
OT_ISP_AE_ZONE_COLUMN¶
【说明】
AE垂直方向的分区间数目。
【定义】
#define OT_ISP_AE_ZONE_COLUMN 17
【注意事项】
无。
【相关数据类型及接口】
ot_isp_ae_stats_cfg
ot_isp_ae_grid_info
ot_isp_ae_stats
ot_isp_ae_stitch_stats
OT_ISP_MG_ZONE_ROW¶
【说明】
MG水平方向的分区间数目。
【定义】
#define OT_ISP_MG_ZONE_ROW 15
【注意事项】
无。
【相关数据类型及接口】
ot_isp_mg_grid_info
ot_isp_mg_stats
OT_ISP_MG_ZONE_COLUMN¶
【说明】
MG垂直方向的分区间数目。
【定义】
#define OT_ISP_MG_ZONE_COLUMN 17
【注意事项】
无。
【相关数据类型及接口】
ot_isp_mg_grid_info
ot_isp_mg_stats
OT_ISP_AE_ROUTE_MAX_NODES¶
【说明】
AE ROUTE节点的最大数目。
【定义】
#define OT_ISP_AE_ROUTE_MAX_NODES 16
【注意事项】
无。
【相关数据类型及接口】
ot_isp_ae_route
OT_ISP_AE_ROUTE_EX_MAX_NODES¶
【说明】
扩展AE ROUTE节点的最大数目。
【定义】
#define OT_ISP_AE_ROUTE_EX_MAX_NODES 16
【注意事项】
无。
【相关数据类型及接口】
ot_isp_ae_route_ex
OT_ISP_BAYER_CALIBTAION_MAX_NUM¶
【说明】
定义标定噪声模型参数的iso档位个数的最大值。
【定义】
#define OT_ISP_BAYER_CALIBTAION_MAX_NUM 50
【注意事项】
无。
【相关数据类型及接口】
OT_BAYER_CALIBRATION_PARA_NUM_NEW¶
【说明】
定义标定噪声模型参数的最大个数。
【定义】
#define OT_BAYER_CALIBRATION_PARA_NUM_NEW 16
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_CCM_MATRIX_SIZE¶
【说明】
CCM矩阵参数个数。
【定义】
#define OT_ISP_CCM_MATRIX_SIZE 9
【注意事项】
无。
【相关数据类型及接口】
ot_isp_awb_ccm_tab
ot_isp_awb_sensor_default
ot_isp_color_matrix_manual
ot_isp_color_matrix_param
ot_isp_wb_info
ot_isp_dng_image_static_info
OT_DCF_DRSCRIPTION_LENGTH¶
【说明】
定义DCF描述信息的深度。
【定义】
#define OT_DCF_DRSCRIPTION_LENGTH 32
【注意事项】
无。
【相关数据类型及接口】
ISP_SNS_SAVE_INFO_MAX¶
【说明】
定义记录sensor info的最大帧数。
【定义】
#define ISP_SNS_SAVE_INFO_MAX 2
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_LSC_GRID_COL¶
【说明】
Mesh Shading在x方向上划分的分块所需点的数量。
【定义】
#define OT_ISP_LSC_GRID_COL 33
【注意事项】
无。
【相关数据类型及接口】
ot_isp_shading_gain_lut
OT_ISP_LSC_GRID_ROW¶
【说明】
Mesh Shading在y方向上划分的分块所需点的数量。
【定义】
#define OT_ISP_LSC_GRID_ROW 33
【注意事项】
无。
【相关数据类型及接口】
ot_isp_shading_gain_lut
OT_ISP_LSC_GRID_POINTS¶
【说明】
Mesh Shading LUT表增益点的数量。
【定义】
#define OT_ISP_LSC_GRID_POINTS (OT_ISP_LSC_GRID_COL * OT_ISP_LSC_GRID_ROW)
【注意事项】
无。
【相关数据类型及接口】
ot_isp_shading_gain_lut
OT_ISP_ACS_LIGHT_NUM¶
【说明】
ACS划分的光源数量。
【定义】
#define OT_ISP_ACS_LIGHT_NUM 32
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_ACS_CHN_NUM¶
【说明】
表示ACS标定的R和B通道分量。
【定义】
#define OT_ISP_ACS_CHN_NUM 2
【注意事项】
无。
【相关数据类型及接口】
OT_ISP_PRO_MAX_FRAME_NUM¶
【说明】
表示拍照pro模式下最大支持的帧数。
【定义】
#define OT_ISP_PRO_MAX_FRAME_NUM 8
【注意事项】
无。
【相关数据类型及接口】
ss_mpi_snap_set_pipe_attr
ot_rect¶
【说明】
定义裁剪窗口起始位置和图像宽高。
【定义】
typedef struct {
td_s32 x;
td_s32 y;
td_u32 width;
td_u32 height;
} ot_rect;
【成员】
成员名称 |
描述 |
|---|---|
x |
水平方向起始位置, 取值范围:[0, 8072] |
y |
垂直方向起始位置,取值范围:[0, 8072] |
width |
图像宽度,4对齐。使用shading功能时4对齐,否则shading功能会不正常。取值范围:[120, 8192] |
height |
图像高度,4对齐。使用shading功能时4对齐,否则shading功能会不正常。取值范围:[120, 8192] |
【注意事项】
水平方向起始位置与图像宽度之和应小于sensor输出的图像宽度。
垂直方向起始位置与图像高度之和应小于sensor输出的图像高度,由于无法检测sensor实际输出的宽高,当不满足该条件时MPI不报错。
使能AF模块时,要求图像的最小宽度为256。
SS928V100不同vi_pipe AE支持的分辨率不同,vi_pipe0支持的最大分辨率为8192*8192,vi_pipe1/vi_pipe2/vi_pipe3支持的最大分辨率为4096*4096。当vi_pipe1/vi_pipe2/vi_pipe3这三路的分辨率超过4096时,对应路ae统计信息使能关闭。
【相关数据类型及接口】
无
ot_point¶
【说明】
定义坐标信息。
【定义】
typedef struct {
td_s32 x;
td_s32 y;
} ot_point;
【成员】
成员名称 |
描述 |
|---|---|
x |
横坐标信息。 |
y |
纵坐标信息。 |
【注意事项】
无。
【相关数据类型及接口】
无
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;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_BAYER_RGGB |
RGGB排列方式。 |
OT_ISP_BAYER_GRBG |
GRGB排列方式。 |
OT_ISP_BAYER_GBRG |
GBRG排列方式。 |
OT_ISP_BAYER_BGGR |
BGGR排列方式。 |
【注意事项】
该格式可以从所使用sensor的DataSheet上获取,并和裁剪起始位置相关。
【相关数据类型及接口】
无
ot_mipi_crop_attr¶
【说明】
mipi裁剪参数。
【定义】
typedef struct {
td_bool mipi_crop_en;
ot_rect mipi_crop_offset;
} ot_mipi_crop_attr;
【成员】
成员名称 |
描述 |
|---|---|
mipi_crop_en |
mipi裁剪使能。 |
mipi_crop_offset |
mipi裁剪的范围,宽,高需要4对齐。 |
【注意事项】
PUB_ATTR中的mipi参数配置用于指导DynamicBlc模块修改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;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_BAYER_RAW_BIT_8BIT |
Bayer数据位宽:8bit。 |
OT_ISP_BAYER_RAW_BIT_10BIT |
Bayer数据位宽:10bit。 |
OT_ISP_BAYER_RAW_BIT_12BIT |
Bayer数据位宽:12bit。 |
OT_ISP_BAYER_RAW_BIT_14BIT |
Bayer数据位宽:14bit。 |
OT_ISP_BAYER_RAW_BIT_16BIT |
Bayer数据位宽:16bit。 |
【注意事项】
该格式可以从所使用sensor的DataSheet上获取,并和裁剪起始位置相关。
【相关数据类型及接口】
无
ot_size¶
【说明】
定义sensor输出的宽高。
【定义】
typedef struct {
td_u32 width;
td_u32 height;
} ot_size;
【成员】
成员名称 |
描述 |
|---|---|
width |
Sensor输出宽度。 SS928V100取值范围:[120, 8192] |
height |
Sensor输出高度。 SS928V100取值范围:[120, 8192] |
【注意事项】
图像宽度应小于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;
【成员】
成员名称 |
描述 |
|---|---|
OT_COLOR_GAMUT_BT601 |
色域范围为BT.601。 |
OT_COLOR_GAMUT_BT709 |
色域范围为BT.709。 |
OT_COLOR_GAMUT_BT2020 |
色域范围为BT.2020。 |
OT_COLOR_GAMUT_USER |
用户自定义色域范围。 |
【注意事项】
无。
【相关数据类型及接口】
ot_isp_pub_attr¶
【说明】
定义ISP公共属性。
【定义】
typedef struct {
ot_rect wnd_rect;
ot_size sns_size;
ot_float frame_rate;
ot_isp_bayer_format bayer_format;
ot_wdr_mode wdr_mode;
td_u8 sns_mode;
td_bool sensor_flip_en;
td_bool sensor_mirror_en;
ot_mipi_crop_attr mipi_crop_attr;
} ot_isp_pub_attr;
【成员】
成员名称 |
描述 |
|---|---|
wnd_rect |
裁剪窗口起始位置和图像宽高。wnd_rect里的水平方向起始位置值x和垂直方向起始位置值y需要2对齐。 |
sns_size |
Sensor输出的图像宽高。 |
frame_rate |
输入图像帧率,取值范围:(0.00, 65535.00] |
bayer_format |
Bayer数据格式。 |
wdr_mode |
WDR模式选择。 |
sns_mode |
用于进行Sensor初始化序列的选择,在分辨率和帧率相同时,配置不同的sns_mode对应不同的初始化序列;其他情况,sns_mode默认配置为0,可通过sns_size和frame_rate进行初始化序列的选择。 |
sensor_flip_en |
用于指导DynamicBlc模块修改ob区统计范围。Sensor内部翻转开启且OB区被转移到下方,将该参数设置为1。Sensor内部翻转关闭,将该参数设置为0。 |
sensor_mirror_en |
用于指导DynamicBlc模块修改ob区统计范围。Sensor内部镜像映射开启且OB区从左方被映射到右方,将该参数设置为1。Sensor内部镜像映射关闭,将该参数设置为0。 |
mipi_crop_attr |
用于指导DynamicBlc模块修改ob区统计范围。该参数配置需要与mipi裁剪的参数一致。 |
【注意事项】
若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¶
【说明】
定义模块运行状态。
【定义】
typedef enum {
OT_OP_MODE_AUTO = 0,
OT_OP_MODE_MANUAL = 1,
OT_OP_MODE_BUTT
} ot_op_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_OP_MODE_AUTO |
运行在自动模式下。 |
OT_OP_MODE_MANUAL |
运行在手动模式下。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_fswdr_mdt_attr
ot_isp_drc_attr
ot_isp_ldci_attr
ot_isp_crb_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_local_cac_attr
ot_isp_acac_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_FMW_STATE_RUN |
Firmware正常运行状态。 |
OT_ISP_FMW_STATE_FREEZE |
Firmware冻结状态。 |
【注意事项】
无
【相关数据类型及接口】
无
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;
【成员】
成员名称 |
描述 |
|---|---|
bit16_reserved |
保留字段。 |
bit_h_inv |
XHS极性配置。
|
bit_v_inv |
XVS极性配置。 |
bit12_reserved |
保留字段。 |
bit_h_enable |
XHS输出使能。 |
bit_v_enable |
XVS输出使能。 |
vs_time |
XVS信号周期,单位:sensor输入时钟周期。 |
hs_time |
XHS信号周期,单位:sensor输入时钟周期。 |
vs_cyc |
XVS有效电平宽度,单位:sensor输入时钟周期。 |
hs_cyc |
XHS有效电平宽度,单位:sensor输入时钟周期。 |
hs_dly_cyc |
XHS脉冲输出相对XVS脉冲的延迟周期配置,单位:sensor输入时钟周期。 |
slave_mode_time |
Sensor从模式时序配置选择寄存器: 0:选择SENSOR0 timing 配置; 1:选择SENSOR1 timing 配置; 2:选择SENSOR2 timing 配置; 3:选择SENSOR3 timing 配置。 |
【注意事项】
图 1 同步信号配置时序图

图 2 同步信号极性翻转

图 3 同步信号使能

【相关数据类型及接口】
无
ot_isp_wdr_mode¶
【说明】
定义ISP宽动态模式。
【定义】
typedef struct {
ot_wdr_mode wdr_mode;
} ot_isp_wdr_mode;
【成员】
成员名称 |
描述 |
|---|---|
wdr_mode |
宽动态模式。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_wdr_mode¶
【说明】
定义宽动态模式。
【定义】
typedef enum {
OT_WDR_MODE_NONE = 0,
OT_WDR_MODE_BUILT_IN,
OT_WDR_MODE_QUDRA,
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_NONE |
线性模式。 |
OT_WDR_MODE_BUILT_IN |
Sensor合成WDR模式。 |
OT_WDR_MODE_QUDRA |
Qudra模式 |
OT_WDR_MODE_2To1_LINE |
2帧合成行WDR模式。 |
OT_WDR_MODE_2To1_FRAME |
2帧合成帧WDR模式。 |
OT_WDR_MODE_3To1_LINE |
3帧合成行WDR模式。 |
OT_WDR_MODE_3To1_FRAME |
3帧合成帧WDR模式。 |
OT_WDR_MODE_4To1_LINE |
4帧合成行WDR模式。 |
OT_WDR_MODE_4To1_FRAME |
4帧合成帧WDR模式。 |
【注意事项】
OT_WDR_MODE_BUILT_IN需要sensor支持。
【相关数据类型及接口】
无
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] */
td_u64 bit_bypass_sharpen : 1; /* RW;[16] */
td_u64 bit_bypass_local_cac : 1; /* RW;[17] */
td_u64 bit_bypass_acac : 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] */
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] */
td_u64 bit_bypass_af_stat_fe : 1; /* RW;[26] */
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] */
td_u64 bit_bypass_rgbir : 1; /* RW;[30] */
td_u64 bit_bypass_agamma : 1; /* RW;[31] */
td_u64 bit_bypass_adgamma : 1; /* RW;[32] */
td_u64 bit_bypass_crb : 1; /* RW [33] */
td_u64 bit_reserved30 : 30; /* H; [34:63] */ };
} ot_isp_module_ctrl;
【成员】
成员名称 |
描述 |
|---|---|
key |
结构体枚举的整型值。 |
bit_bypass_isp_d_gain |
旁路数字增益。 |
bit_bypass_anti_false_color |
旁路去伪彩功能。 |
bit_bypass_crosstalk_removal |
旁路Crosstalk Removal。 |
bit_bypass_dpc |
旁路坏点校正。 |
bit_bypass_nr |
旁路去噪。 |
bit_bypass_dehaze |
旁路去雾。 |
bit_bypass_wb_gain |
旁路白平衡增益和偏移量。 |
bit_bypass_mesh_shading |
旁路镜头阴影校正。 |
bit_bypass_drc |
旁路DRC。 |
bit_bypass_demosaic |
旁路去马赛克模块。 |
bit_bypass_color_matrix |
旁路颜色矩阵。 |
bit_bypass_gamma |
旁路Gamma表。 |
bit_bypass_fswdr |
旁路多帧合成WDR。 |
bit_bypass_ca |
旁路CA。 |
bit_bypass_csc |
旁路CSC转换。 |
bit_bypass_radial_crop |
旁路RadialCrop |
bit_bypass_sharpen |
旁路Sharpen。 |
bit_bypass_local_cac |
旁路Local CAC。 |
bit_bypass_acac |
旁路ACAC |
bit2_chn_select |
WDR模式主路数据来源,一般在旁路多帧合成WDR模块后用于debug。 0:主路数据来源于超短帧; 1:主路数据来源于短帧; 2:主路数据来源于中帧; 3:主路数据来源于长帧。 |
bit_bypass_ldci |
旁路Local DCI。 |
bit_bypass_pregamma |
旁路PreGamma。 |
bit_bypass_ae_stat_fe |
旁路位于FE的AE统计信息。 |
bit_bypass_ae_stat_be |
旁路位于BE的AE统计信息。 |
bit_bypass_mg_stat |
旁路MG统计信息。 |
bit_bypass_af_stat_fe |
旁路位于FE的AF统计信息。 |
bit_bypass_af_stat_be |
旁路位于BE的AF统计信息。 |
bit_bypass_awb_stat |
旁路AWB统计信息。 |
bit_bypass_clut |
旁路CLUT。 |
bit_bypass_rgbir |
旁路RGBIR。 |
bit_bypass_agamma |
旁路aGamma,不支持 |
bit_bypass_adgamma |
旁路aDgamma,不支持 |
bit_bypass_crb |
旁路CRB |
bit_reserved30 |
保留位。 |
【注意事项】
WDR模式下,开关WDR模块的使能,图像会有几帧颜色表现异常。
【相关数据类型及接口】
无
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_DUMP_FRAME_POS_NORMAL |
获取经过ISP BE所有模块处理后的数据 |
OT_ISP_DUMP_FRAME_POS_AFTER_WDR |
获取WDR合成后的raw数据 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_be_frame_attr¶
【说明】
定义be frame的相关配置信息。
【定义】
typedef struct {
ot_isp_dump_frame_pos frame_pos;
} ot_isp_be_frame_attr;
【成员】
成员名称 |
描述 |
|---|---|
frame_pos |
获取的帧数据在ISP BE中的位置。 |
【注意事项】
无
【相关数据类型及接口】
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_BUTT
} ot_isp_vd_type;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_VD_FE_START |
FE帧起始。 |
OT_ISP_VD_FE_END |
FE帧结束。 |
OT_ISP_VD_BE_END |
BE帧结束。 |
【注意事项】
在线和并行模式下不支持OT_ISP_VD_BE_END方式。
【相关数据类型及接口】
无
ot_isp_sns_attr_info¶
【说明】
定义ISP sensor属性。
【定义】
typedef struct {
ot_sensor_id sensor_id;
} ot_isp_sns_attr_info;
【成员】
成员名称 |
描述 |
|---|---|
sensor_id |
Sensor ID 号。 |
【注意事项】
无。
【相关数据类型及接口】
无
ot_isp_sensor_register¶
【说明】
定义sensor注册结构体。
【定义】
typedef struct {
ot_isp_sensor_exp_func sns_exp;
} ot_isp_sensor_register;
【成员】
成员名称 |
描述 |
|---|---|
sns_exp |
Sensor注册的回调函数结构体。 |
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
ot_isp_sensor_exp_func¶
【说明】
定义sensor回调函数结构体。
【定义】
typedef struct {
ot_void (*pfn_cmos_sensor_init)(ot_vi_pipe vi_pipe);
ot_void (*pfn_cmos_sensor_exit)(ot_vi_pipe vi_pipe);
ot_void (*pfn_cmos_sensor_global_init)(ot_vi_pipe vi_pipe);
td_s32 (*pfn_cmos_set_image_mode)(ot_vi_pipe vi_pipe, ot_isp_cmos_sensor_image_mode *sensor_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);
ot_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 *sensor_awb_gain);
} ot_isp_sensor_exp_func;
【成员】
成员名称 |
描述 |
|---|---|
pfn_cmos_sensor_init |
初始化sensor的回调函数指针。 |
pfn_cmos_sensor_exit |
sensor的回调退出函数指针。 |
pfn_cmos_sensor_global_init |
初始化全局变量的回调函数指针。 |
pfn_cmos_set_image_mode |
设置分辨率和帧率切换的回调函数指针。返回值0表示sensor模式发生改变,ISP会调用pfn_cmos_sensor_init重新配置sensor;返回值为-2 sensor模式没有变化,ISP不会重新配置sensor。 |
pfn_cmos_set_wdr_mode |
设置wdr模式的回调函数指针。 |
pfn_cmos_get_isp_default |
获取ISP基础算法的初始值的回调函数指针。 |
pfn_cmos_get_isp_black_level |
获取sensor的黑电平值的回调函数指针,支持根据sensor增益动态调整黑电平值。若此处动态调整黑电平值,则外部只能通过接口ss_mpi_isp_set_black_level_attr的手动模式设置黑电平。 |
pfn_cmos_get_blc_clamp_info |
获取sensor内部黑电平开关信息的回调函数指针。 |
pfn_cmos_get_sns_reg_info |
获取sensor寄存器信息的回调函数指针,用于实现内核态配置AE信息。 |
pfn_cmos_set_pixel_detect |
设置坏点校正开关的回调函数指针。 |
pfn_cmos_get_awb_gains |
获取AWB增益的回调函数指针。 |
【注意事项】
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。
SS928V100不支持AWB增益在sensor配置,仅支持sensor侧获取当前AWB增益。
不支持切换AWB增益配置位置。
【相关数据类型及接口】
ot_isp_cmos_sensor_image_mode¶
【说明】
定义sensor输出的宽高和帧率属性。
【定义】
typedef struct {
td_u16 width;
td_u16 height;
ot_float fps;
td_u8 sns_mode;
} ot_isp_cmos_sensor_image_mode;
【成员】
成员名称 |
描述 |
|---|---|
width |
Sensor输出的宽度。 |
height |
Sensor输出的高度。 |
fps |
Sensor输出的帧率。 |
sns_mode |
用于进行Sensor初始化序列的选择,在分辨率和帧率相同时,配置不同的sns_mode对应不同的初始化序列;其他情况,sns_mode默认为0。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_lsc¶
【说明】
定义LSC 参数。
【定义】
typedef struct {
ot_isp_shading_attr lsc_attr;
ot_isp_shading_lut_attr lsc_lut;
} ot_isp_cmos_lsc;
【成员】
成员名称 |
描述 |
|---|---|
lsc_attr |
Mesh Shading算法参数。 |
lsc_lut |
Mesh Shading增益表属性。 |
【注意事项】
无
【相关数据类型及接口】
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 |
Gr/Gb分量上的校正强度表,校正强度较大。 |
g_param_low_ct |
Gr/Gb分量上的校正强度表,校正强度较小。 |
【注意事项】
算法根据场景从g_param_high_ct和g_param_low_ct两张表中进行插值。
【相关数据类型及接口】
ot_isp_acs_color_shading_lut¶
【说明】
定义Auto Color Shading颜色分量上的Lut表,用标定工具生成,算法会根据R/B分量上的Lut表,动态生成适合当前场景的Lut表。
【定义】
typedef struct {
ot_float avg_rg_map[OT_ISP_LSC_GRID_POINTS];
ot_float avg_bg_map[OT_ISP_LSC_GRID_POINTS];
ot_float prof_rg_map[OT_ISP_LSC_GRID_POINTS];
ot_float prof_bg_map[OT_ISP_LSC_GRID_POINTS];
} ot_isp_acs_color_shading_lut;
【成员】
成员名称 |
描述 |
|---|---|
avg_rg_map |
R分量上的Color Shading表。 |
avg_bg_map |
B分量上的Color Shading表。 |
prof_rg_map |
R分量上的Color Shading表。 |
prof_bg_map |
B分量上的Color Shading表。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_acs_calib_param¶
【说明】
定义Auto Color Shading的标定参数,用标定工具生成。
【定义】
typedef struct {
td_s16 light_index[OT_ISP_ACS_LIGHT_NUM * OT_ISP_ACS_CHN_NUM];
ot_float model_ar_min;
ot_float model_ar_step;
ot_float model_ab_min;
ot_float model_ab_step;
td_s16 light_type_g_high;
td_s16 light_type_g_low;
} ot_isp_acs_calib_param;
【成员】
成员名称 |
描述 |
|---|---|
light_index |
标定的光源在算法模型当中的光源坐标。 |
model_ar_min |
标定得到的算法模型参数。 |
model_ar_step |
标定得到的算法模型参数。 |
model_ab_min |
标定得到的算法模型参数。 |
model_ab_step |
标定得到的算法模型参数。 |
light_type_g_high |
对于g_param_high_ct表对应的光源坐标。 |
light_type_g_low |
对于g_param_low_ct表对应的光源坐标。 |
【注意事项】
无
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
acs_attr |
参考ot_isp_acs_attr |
acs_calib_param |
参考ot_isp_acs_calib_param |
acs_y_shading_lut |
参考ot_isp_acs_y_shading_lut |
acs_color_shading_lut |
参考ot_isp_acs_color_shading_lut |
【注意事项】
增益表的默认配置与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] |
噪声标定表。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_sensor_max_resolution¶
【说明】
定义sensor最大分辨率结构体。
【定义】
typedef struct {
td_u32 max_width;
td_u32 max_height;
} ot_isp_cmos_sensor_max_resolution;
【成员】
成员名称 |
描述 |
|---|---|
max_width |
最大宽度。 |
max_height |
最大高度。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_clut¶
【说明】
定义CLUT结构体。
【定义】
typedef struct {
ot_isp_clut_attr clut_attr;
ot_isp_clut_lut clut_lut;
} ot_isp_cmos_clut;
【成员】
成员名称 |
描述 |
|---|---|
clut_attr |
定义clut的增益。 |
clut_lut |
定义clut的查找表。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_sensor_mode¶
【说明】
定义sensor模式寄存器。
【定义】
typedef struct {
td_u32 sensor_id;
td_u8 sensor_mode;
td_bool valid_dng_raw_format;
ot_isp_dng_raw_format dng_raw_format;
} ot_isp_cmos_sensor_mode;
【成员】
成员名称 |
描述 |
|---|---|
sensor_id |
Sensor id号。 |
sensor_mode |
Sensor自定义工作模式,不同分辨率与帧率对应不同的工作模式。 |
valid_dng_raw_format |
有效的DNG raw格式。 |
dng_raw_format |
DNG Raw格式。 |
【注意事项】
无
【相关数据类型及接口】
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_cmos_dng_color_param;
【成员】
成员名称 |
描述 |
|---|---|
wb_gain1 |
DNG白平衡校正系数1。 |
wb_gain2 |
DNG白平衡校正系数2。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_wdr_switch_attr¶
【说明】
定义WDR切换属性。
【定义】
typedef struct {
td_u32 exp_ratio[OT_ISP_EXP_RATIO_NUM];
} ot_isp_cmos_wdr_switch_attr;
【成员】
成员名称 |
描述 |
|---|---|
exp_ratio |
曝光比期望值 |
【注意事项】
在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中的默认配置的标志位。
【定义】
SS928V100中定义:
typedef union {
td_u64 key;
struct {
td_u64 bit1_drc : 1 ; /* [0] */
td_u64 bit1_demosaic : 1 ; /* [1] */
td_u64 bit1_pregamma : 1 ; /* [2] */
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_lcac : 1 ; /* [16] */
td_u64 bit1_acs : 1 ; /* [17] */
td_u64 bit1_rgbir : 1 ; /* [18] */
td_u64 bit1_bshp : 1 ; /* [19] */
td_u64 bit1_acac : 1 ; /* [20] */
td_u64 bit1_crb : 1 ; /* [21] */
td_u64 bit42_reserved : 42; /* [22:63] */
};
} ot_isp_cmos_alg_key;
【成员】
成员名称 |
描述 |
|---|---|
bit1_drc |
drc模块是否采用cmos默认配置的标志位。 |
bit1_demosaic |
demosaic模块是否采用cmos默认配置的标志位。 |
bit1_pregamma |
pregamma模块是否采用cmos默认配置的标志位。 |
bit1_gamma |
gamma模块是否采用cmos默认配置的标志位。 |
bit1_sharpen |
sharpen模块是否采用cmos默认配置的标志位。 |
bit1_ldci |
ldci模块是否采用cmos默认配置的标志位。 |
bit1_dpc |
dpc模块是否采用cmos默认配置的标志位。 |
bit1_lsc |
lsc模块是否采用cmos默认配置的标志位。 |
bit1_ge |
ge模块是否采用cmos默认配置的标志位。 |
bit1_anti_false_color |
anti false color模块是否采用cmos默认配置的标志位。 |
bit1_bayer_nr |
bayer nr模块是否采用cmos默认配置的标志位。 |
bit1_ca |
ca模块是否采用cmos默认配置的标志位。 |
bit1_expander |
expander模块是否采用cmos默认配置的标志位。 仅sensor built-in模式有效。 |
bit1_clut |
clut模块是否采用cmos默认配置的标志位。 |
bit1_wdr |
wdr模块是否采用cmos默认配置的标志位。 |
bit1_dehaze |
dehaze模块是否采用cmos默认配置的标志位。 |
bit1_lcac |
Local cac模块是否采用cmos默认配置的标志位。 |
bit1_acs |
acs模块是否采用cmos默认配置的标志位。 |
bit1_rgbir |
RGBIR 模块是否采用cmos默认配置标志位。 仅线性模式有效。 |
bit1_bshp |
Bayer sharpen模块是否采用cmos默认配置标志位。 |
bit1_acac |
acac模块是否采用cmos默认配置的标志位。 |
bit1_crb |
crb模块是否采用cmos默认配置的标志位。 仅WDR模式有效。 |
【注意事项】
如果ISP的某个算法模块要使用cmos中的配置,要将对应的标志位置为1,否则采用的是算法内部的默认配置。
【相关数据类型及接口】
ot_isp_cmos_default¶
【说明】
定义ISP基础算法库的初始化参数结构体。
【定义】
SS928V100定义:
typedef struct {
ot_isp_cmos_alg_key key;
const ot_isp_drc_attr *drc;
const ot_isp_demosaic_attr *demosaic;
const ot_isp_pregamma_attr *pregamma;
const ot_isp_gamma_attr *gamma;
const ot_isp_sharpen_attr *sharpen;
const ot_isp_ldci_attr *ldci;
const ot_isp_dp_dynamic_auto_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_local_cac_attr *lcac;
const ot_isp_acac_attr *acac;
const ot_isp_bayershp_attr *bshp;
const ot_isp_cmos_acs *acs;
const ot_isp_rgbir_attr *rgbir;
const ot_isp_crb_attr *crb;
ot_isp_noise_calibration noise_calibration;
ot_isp_cmos_sensor_max_resolution sensor_max_resolution;
ot_isp_cmos_sensor_mode sensor_mode;
ot_isp_cmos_dng_color_param dng_color_param;
ot_isp_cmos_wdr_switch_attr wdr_switch_attr;
} ot_isp_cmos_default;
【成员】
成员名称 |
描述 |
|---|---|
key |
标识各算法是否采用cmos中默认配置的key。 |
*drc |
DRC结构体指针。 |
*demosaic |
Demosaic结构体指针。 |
*pregamma |
PreGamma结构体指针。 |
*gamma |
Gamma结构体指针。 |
*sharpen |
Sharpen结构体指针。 |
*ldci |
LDCI结构体指针。 |
*dpc |
DPC结构体指针。 |
*lsc |
LSC结构体指针。 |
*ge |
GE模块结构体指针。 |
*anti_false_color |
AntiFalse结构体指针。 |
*bayer_nr |
BayerNR结构体指针。 |
*ca |
CA模块结构体指针。 |
*expander |
Expander结构体指针。 仅sensor built-in模式有效。 |
*clut |
Clut结构体指针。 |
*wdr |
WDR模式结构体指针。 |
*dehaze |
Dehaze结构体指针。 |
*lcac |
Local cac结构体指针。 |
*acac |
acac结构体指针。 |
*bshp |
Bayer sharpen结构体指针。 |
*acs |
ACS结构体指针。 |
*rgbir |
RGBIR模式结构体指针。 仅线性模式有效。 |
*crb |
CRB结构体指针。 仅WDR模式有效。 |
noise_calibration |
Noise校正结构体。 |
sensor_max_resolution |
Sensor最大宽高结构体。 |
sensor_mode |
Sensor模式结构体。 |
dng_color_param |
DNG结构体。 |
wdr_switch_attr |
WDR切换属性。 |
【注意事项】
sensor_max_resolution、sensor_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;
【成员】
成员名称 |
描述 |
|---|---|
update |
Sensor的黑电平是否会动态根据增益改变,取值范围:[0,1]。若设置为TD_TRUE,ISP内部始终使用cmos.c内联动的黑电平配置;此时若需要手动改变ISP的黑电平,则设置ss_mpi_isp_set_black_level_attr为手动模式。 |
black_level |
Sensor的黑电平数组,取值范围:[0, 0x3FFF] black_level为14bit raw数据的黑电平。 |
【注意事项】
如果sensor的黑电平不会动态根据增益改变,update配置为TD_FALSE即可。
【相关数据类型及接口】
ot_isp_sensor_total_size_attr¶
【说明】
定义sensor写出数据的实际宽高。
【定义】
typedef struct {
ot_size ob_sensor_size;
} ot_isp_sensor_total_size_attr;
【成员】
成员名称 |
描述 |
|---|---|
ob_sensor_size |
sensor写出数据的实际宽高。 若sensor写出的数据中包含ob区,ob_sensor_size应为包含ob区的宽高。 |
【注意事项】
若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_sensor_total_size_attr sensor_with_ob_attr;
} ot_isp_cmos_black_level;
【成员】
成员名称 |
描述 |
|---|---|
user_black_level_en |
自定义黑电平的使能。 |
user_black_level |
自定义的黑电平值。 |
black_level_mode |
黑电平的模式选择。 |
manual_attr |
手动模式下黑电平配置属性。 |
dynamic_attr |
Dynamic模式下黑电平配置属性。 |
auto_attr |
Auto模式下黑电平配置属性。 |
sensor_with_ob_attr |
带ob区的sensor输出宽高,用于指导DynamicBlc修改ob区统计范围。 |
【注意事项】
如果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区得到的黑电平配置值。
如果使用虚拟pipe,即vi_pipe>=4时,不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。Sensor built-in模式下不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。
如果使能user_black_level_en,ISP的所有模块所使用的黑电平均为user_black_level。
如果使用虚拟pipe,即vi_pipe>=4时,不支持使能user_black_level_en;Sensor built-in模式下不支持使能user_black_level_en。
【相关数据类型及接口】
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;
union {
ot_isp_i2c_data i2c_data[OT_ISP_MAX_SNS_REGS];
ot_isp_ssp_data ssp_data[OT_ISP_MAX_SNS_REGS];
};
struct {
td_bool update;
td_u8 delay_frame_num;
td_u32 slave_vs_time;
td_u32 slave_bind_dev;
} slv_sync;
td_bool config;
} ot_isp_sns_regs_info;
【成员】
成员名称 |
子成员名称 |
描述 |
|
|---|---|---|---|
sns_type |
OT_ISP_SNS_I2C_TYPE |
Sensor与ISP使用I2C接口通信。 |
|
OT_ISP_SNS_SSP_TYPE |
Sensor与ISP使用SSP接口通信。 |
||
reg_num |
- |
曝光结果写到sensor时需要配置的寄存器个数,不支持动态修改。 |
|
cfg2_valid_delay_max |
- |
所有Sensor寄存器从配置到生效延迟的帧数的最大值,单位为帧,用于保证sensor寄存器和ISP寄存器的同步。一般情况下,cmos sensor的曝光时间寄存器的延迟最大,为1~2帧,因此配置一般为1或2。 |
|
exp_distance |
- |
Sensor在wdr模式下曝光长帧与中帧的行差,中帧与短帧的行差,短帧与短短帧的行差。 |
|
com_bus |
i2c_dev |
Sensor绑定的I2C设备号 |
|
ssp_dev |
Sensor绑定SPI设备号结构体 |
||
bit4_ssp_dev |
Sensor绑定的SPI设备号 |
||
bit4_ssp_cs |
Sensor绑定的SPI片选信号 |
||
i2c_data |
update |
TD_TRUE:数据会配置sensor寄存器; TD_FALSE:数据不会配置sensor寄存器。 |
|
delay_frame_num |
Sensor寄存器延迟配置的帧数。此变量的目的是保证曝光时间和增益同时生效。 |
||
interrupt_pos |
Sensor寄存器的配置生效的位置。
|
||
dev_addr |
Sensor设备地址。 |
||
reg_addr |
Sensor寄存器地址。 |
||
addr_byte_num |
Sensor寄存器地址位宽。 |
||
data |
Sensor寄存器数据。 |
||
data_byte_num |
Sensor寄存器数据位宽。 |
||
ssp_data |
update |
TD_TRUE:数据会配置sensor寄存器;TD_FALSE:数据不会配置sensor寄存器。 |
|
delay_frame_num |
sensor寄存器延迟配置的帧数。此变量的目的是保证曝光时间和增益同时生效。 |
||
interrupt_pos |
Sensor寄存器的配置生效的位置。
|
||
dev_addr |
Sensor设备地址。 |
||
dev_addr_byte_num |
Sensor设备地址位宽。 |
||
reg_addr |
Sensor寄存器地址。 |
||
reg_addr_byte_num |
Sensor寄存器地址位宽。 |
||
data |
Sensor寄存器数据。 |
||
data_byte_num |
Sensor寄存器数据位宽。 |
||
slv_sync |
update |
TD_TRUE:数据会配置sensor寄存器; TD_FALSE:数据不会配置sensor寄存器。 |
|
delay_frame_num |
sensor寄存器延迟配置的帧数。此变量的目的是保证曝光时间和增益同时生效。 |
||
slave_vs_time |
XVS信号周期,单位:sensor输入时钟周期。 |
||
slave_bind_dev |
Slave设备号与vi_pipe绑定关系。 |
||
config |
-- |
Sensor寄存器数据配置完成标志。
|
|
【注意事项】
无
【相关数据类型及接口】
ot_isp_3a_alg_lib¶
【说明】
定义AE/AWB算法库结构体。
【定义】
typedef struct {
td_s32 id;
ot_char lib_name[ALG_LIB_NAME_SIZE_MAX];
} ot_isp_3a_alg_lib;
【成员】
成员名称 |
描述 |
|---|---|
id |
算法库实例的Id。 |
lib_name |
标识算法库名称的字符数组。 |
【注意事项】
库的名字lib_name,用以区分不同的算法库;库的id,用以支持运行同一个算法库的多个实例。
【相关数据类型及接口】
无
ot_isp_bind_attr¶
【说明】
定义ISP库与Sensor、3A库之间绑定关系的结构体。
【定义】
typedef struct {
ot_sensor_id sensor_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;
【成员】
成员名称 |
描述 |
|---|---|
sensor_id |
Sensor的Id。 |
ae_lib |
AE库结构体。 |
af_lib |
AF库结构体。 |
awb_lib |
AWB库结构体。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_ctrl_proc_write¶
【说明】
定义ISP的PROC信息。
【定义】
typedef struct {
ot_char *proc_buff;
td_u32 buff_len;
td_u32 write_len;
} ot_isp_ctrl_proc_write;
【成员】
成员名称 |
描述 |
|---|---|
proc_buff |
ISP传给当前算法的Proc信息Buffer指针。 |
buff_len |
ISP传给当前算法的Proc信息Buffer当前剩余字节数。Buffer总大小为8K字节。 |
write_len |
当前算法传给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_CTRL_CMD_BUTT,
} ot_isp_ctrl_cmd;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_WDR_MODE_SET |
设置WDR 模式,将ISP控制单元的WDR模式配置到算法模块,此命令对应的参数数据类型是ot_wdr_mode。 |
OT_ISP_PROC_WRITE |
设置写PROC信息,将算法模块的PROC信息配置到ISP控制单元,此命令对应的参数数据类型是ot_isp_ctrl_proc_write。 |
OT_ISP_AE_FPS_BASE_SET |
设置帧率,将ISP控制单元的帧率信息配置到AE算法模块,此命令对应的参数与ot_isp_pub_attr里面的frame_rate一样。 |
OT_ISP_AE_BLC_SET |
设置黑电平,将黑电平信息配置到AE算法模块。 |
OT_ISP_AE_RC_SET |
设置RC模块使能,将Radial Crop模块是否使能信息传入AE算法模块。 |
OT_ISP_AE_BAYER_FORMAT_SET |
设置Bayer图像数据格式,将Bayer图像数据格式信息传入AE算法模块。 |
OT_ISP_AWB_ISO_SET |
设置ISO值,将AE当前的ISO值配置到AWB模块,用于自动调整饱和度,此命令对应的参数与ot_isp_ae_result里面的iso一样。 |
OT_ISP_CHANGE_IMAGE_MODE_SET |
设置图像分辨率切换标识,将ISP控制单元的图像分辨率标识配置到算法模块,此命令对应的参数数据类型为td_u8,参数值为0表示图像分辨率未切换,其他值表示图像分辨率已切换。 |
OT_ISP_UPDATE_INFO_GET |
AE,AWB状态信息更新,将算法获取运行过程中的状态信息,包括AE,AWB的状态信息。 |
OT_ISP_FRAMEINFO_GET |
获取ISP帧信息,包括ISO、去噪强度,与编码模块配合使用。 |
OT_ISP_ATTACOTNFO_GET |
获取ISP帧额外信息,包括ISO、各个模块的算法参数等。 |
OT_ISP_COLORGAMUTINFO_GET |
获取通道色域属性。 |
OT_ISP_AWB_INTTIME_SET |
设置曝光量值,将AE当前的曝光量值配置到AWB模块,用于室内外检测,此命令对应的参数与ot_isp_ae_result里面的int_time一样。 |
OT_ISP_BAS_MODE_SET |
设置BAS模式。 |
OT_ISP_PROTRIGGER_SET |
专业拍照触发信号设置,当用户触发一次专业拍照时,ISP将此信号设置给AE,AE启动专业曝光控制。注:该版本不支持。 |
OT_ISP_AWB_PIRIS_SET |
设置piris运行的增益信息,用于获取当前piris实际的状态信息。 |
OT_ISP_AWB_SNAP_MODE_SET |
设置是否为抓拍模式,将ISP当前是否为抓拍模式的信息配置到AWB模块。 |
OT_ISP_AWB_ZONE_ROW_SET |
设置AWB分块统计信息的行数。拼接、Crop等处理导致AWB统计信息的行数不固定,需要将行数配置到AWB模块。 |
OT_ISP_AWB_ZONE_COL_SET |
设置AWB分块统计信息的列数。拼接、Crop等处理导致AWB统计信息的列数不固定,需要将列数配置到AWB模块。 |
OT_ISP_AWB_ZONE_BIN_SET |
设置AWB分块统计信息的亮度分组数。 |
【注意事项】
无
【相关数据类型及接口】
无
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_VI_MAX_PIPE_NUM];
} ot_isp_stitch_attr;
【成员】
成员名称 |
描述 |
|---|---|
stitch_enable |
拼接使能 |
main_pipe |
是否为主Pipe |
stitch_pipe_num |
拼接总路数 |
stitch_bind_id |
拼接绑定的pipe的号 OT_VI_MAX_PIPE_NUM详情请见《MPP 媒体处理软件 V5.0 开发参考》“视频输入”章节。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_isp_ae_register¶
【说明】
定义AE注册结构体。
【定义】
typedef struct {
ot_isp_ae_exp_func ae_exp_func;
} ot_isp_ae_register;
【成员】
成员名称 |
描述 |
|---|---|
ae_exp_func |
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_ae_ctrl)(td_s32 handle, td_u32 cmd, ot_void *value);
td_s32 (*pfn_ae_exit)(td_s32 handle);
} ot_isp_ae_exp_func;
【成员】
成员名称 |
描述 |
|---|---|
pfn_ae_init |
初始化AE的回调函数指针。 |
pfn_ae_run |
运行AE的回调函数指针。 |
pfn_ae_ctrl |
控制AE内部状态的回调函数指针。 |
pfn_ae_exit |
销毁AE的回调函数指针。 |
【注意事项】
调用ss_mpi_isp_init时将调用pfn_ae_init回调函数,以初始化AE算法库。
调用ss_mpi_isp_run时将调用pfn_ae_run回调函数,以运行AE算法库,计算得到sensor的曝光时间和增益、ISP的数字增益。
设计思路中,算法库实现ctrl接口用以改变内部运行状态,ctrl接口提供一个参数传输命令,提供一个VOID类型的指针传输数据。ctrl接口一方面以回调函数指针的形式注册给ISP库,ISP控制单元隐式调用一些命令控制算法库内部运行状态,另一方面,以算法库的用户接口的形式,从而用户可以改变算法库内部运行状态。示例:
td_s32 ae_ctrl_cmd(td_s32 handle, td_u32 cmd, ot_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注册多次算法库。例如:
ot_isp_3a_alg_lib ae_lib; ae_lib.id = 0; ot_vi_pipe vi_pipe = 0; strncpy(ae_lib.lib_name, OT_AE_LIB_NAME, sizeof(OT_AE_LIB_NAME)); ss_mpi_ae_register(vi_pipe,&ae_lib); ae_lib.id = 1; ss_mpi_ae_register(vi_pipe,&ae_lib);
【相关数据类型及接口】
ot_isp_ae_param¶
【说明】
定义ISP提供给AE的初始化参数结构体。
【定义】
typedef struct {
ot_sensor_id sensor_id;
td_u8 wdr_mode;
td_u8 hdr_mode;
td_u16 black_level;
ot_float fps;
ot_isp_bayer_format bayer;
ot_isp_stitch_attr stitch_attr;
td_s32 reserved;
} ot_isp_ae_param;
【成员】
成员名称 |
描述 |
|---|---|
sensor_id |
向ISP注册的sensor的id,用以检查向ISP注册的sensor和向AE注册的sensor是否一致。 |
wdr_mode |
宽动态模式,ISP向AE提供宽动态模式信息。 |
hdr_mode |
HDR模式,ISP向AE提供HDR模式信息。 不支持。 |
black_level |
黑电平值,12bit精度,ISP向AE提供黑电平信息。 |
fps |
帧率,ISP向AE提供帧率信息。 |
bayer |
Sensor Bayer Pattern,包括RGGB、GRBG、GBRG、BGGR四种格式。 |
stitch_attr |
拼接模式,ISP向AE提供拼接模式信息。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_people_roi¶
【说明】
定义ISP提供给AE的人形、人脸统计信息结构体。
【定义】
typedef struct {
td_bool enable;
td_bool available;
td_u8 luma ;
} ot_isp_people_roi;
【成员】
成员名称 |
描述 |
|---|---|
enable |
模型是否使能。 |
available |
模型是否有可用的检测结果。 |
luma |
模型检测结果的整体亮度。取值范围:[0x0, 0xFF] |
【注意事项】
当仅由人形模型可用时,会根据人形检测结果估算出一个人脸亮度,此亮度可靠性会低于人脸检测结果。
luma采用的是YUV图像中检测到的人脸或人形框内Y分量的亮度平均值。客户在使用自己的智能信息时,当存在多个人脸或人形检测结果,建议取多个检测结果的整体亮度平均值。
【相关数据类型及接口】
ot_isp_tunnel_roi¶
【说明】
定义ISP提供给AE的隧道统计信息结构体。
【定义】
typedef struct {
td_bool enable;
td_bool available;
td_u32 tunnel_area_ratio;
td_u32 tunnel_exp_perf;
} ot_isp_tunnel_roi;
【成员】
成员名称 |
描述 |
|---|---|
enable |
模型是否使能。 |
available |
模型是否有可用的检测结果。 |
tunnel_area_ratio |
模型检测结果占画面的面积比例。取值范围:[0, 10000] |
tunnel_exp_perf |
模型检测结果的曝光表现。取值范围:[0, 10000] |
【注意事项】
tunnel_exp_perf当前仅隧道出口使用,采用的是YUV图像中检测到的隧道出口框内过曝区域占整个检测框的比例。
向AE传递隧道检测结果信息,可实现行车使用场景中出入隧道时的极限收光。此功能仅支持在WDR模式下使用,同时需要设置曝光比为自动模式。在线性模式下不建议使用,否则效果不保证。
【相关数据类型及接口】
ot_isp_face_roi¶
【说明】
定义ISP提供给AE的人脸快速收敛算法的结构体。
【定义】
typedef struct {
td_bool enable;
td_bool available;
td_u64 frame_pts;
ot_rect face_rect[OT_ISP_FACE_NUM];
} ot_isp_face_roi;
【成员】
成员名称 |
描述 |
|---|---|
enable |
是否使能人脸快速收敛算法。 |
available |
是否检测到人脸。 |
frame_pts |
检测到人脸时对应帧的时间戳。 |
face_rect |
人脸的坐标信息数组,最多支持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。
人脸快速收敛算法仅支持在近距离使用,要求人脸在图像中占比较大。如果人脸占比较小,可能画面导致闪烁。建议传入的人脸坐标占画面的面积以上。
【相关数据类型及接口】
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_FACE_INDEX |
人脸类型。 |
OT_ISP_PEOPLE_INDEX |
人形类型。 |
【注意事项】
无
【相关数据类型及接口】
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_TUNNEL_IN_INDEX |
隧道入口类型。 |
OT_ISP_TUNNEL_OUT_INDEX |
隧道出口类型。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_smart_info¶
【说明】
定义ISP提供给AE的智能信息结构体。
【定义】
typedef struct {
ot_isp_people_roi people_roi[OT_ISP_PEOPLE_CLASS_MAX];
ot_isp_tunnel_roi tunnel_roi[OT_ISP_TUNNEL_CLASS_MAX];
ot_isp_face_roi face_roi;
} ot_isp_smart_info;
【成员】
成员名称 |
描述 |
|---|---|
people_roi |
人形人脸的模型检测结果。 |
tunnel_roi |
隧道出入口的模型检测结果。 |
face_roi |
人脸的坐标信息,以及对应pts信息。 |
【注意事项】
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 */
}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; /* not support */
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;
【成员】
成员名称 |
子成员名称 |
描述 |
|---|---|---|
frame_cnt |
- |
帧的累加计数,取值范围:[0, 0xFFFFFFFF] |
frame_pts |
- |
当前raw的时间戳 |
frame_width |
- |
画面宽度 |
frame_height |
- |
画面高度 |
smart_info |
- |
请参考ot_isp_smart_info接口说明。 |
fe_ae_stat1 |
pixel_count |
统计的像素点总个数。 |
pixel_weight |
带权重统计的像素点总个数。 |
|
histogram_mem_array |
1024段直方图的统计信息数组,取值范围:[0, 0xFFFFFFFF] |
|
histogram_mem_array_ir |
仅FE0支持 |
|
fe_ae_stat2 |
global_avg_r |
全局R分量平均值,取值范围:[0, 0xFFFF] |
global_avg_gr |
全局Gr分量平均值,取值范围:[0, 0xFFFF] |
|
global_avg_gb |
全局Gb分量平均值,取值范围:[0, 0xFFFF] |
|
global_avg_b |
全局B分量平均值,取值范围:[0, 0xFFFF] |
|
global_avg_ir |
仅FE0支持 |
|
fe_ae_stat3 |
zone_avg |
分区间R、Gr、Gb、B分量平均值,取值范围:[0, 0xFFFF] |
zone_avg_ir |
仅FE0支持 |
|
fe_ae_sti_stat |
zone_avg |
拼接模式下拼接后分区间R、Gr、Gb、B分量平均值,取值范围:[0, 0xFFFF] 只有参与拼接的Pipe分区间均值有效,其余Pipe的均值无效。 |
be_ae_stat1 |
pixel_count |
统计的像素点总个数。 |
pixel_weight |
带权重统计的像素点总个数。 |
|
histogram_mem_array |
1024段直方图的统计信息数组,取值范围:[0, 0xFFFFFFFF] |
|
estimate_histogram_mem_array |
使用fe统计信息估算be统计信息,在be统计信息延迟较大且需要使用be统计信息的场景使用。 |
|
be_ae_stat2 |
global_avg_r |
全局R分量平均值,取值范围:[0, 0xFFFF] |
global_avg_gr |
全局Gr分量平均值,取值范围:[0, 0xFFFF] |
|
global_avg_gb |
全局Gb分量平均值,取值范围:[0, 0xFFFF] |
|
global_avg_b |
全局B分量平均值,取值范围:[0, 0xFFFF] |
|
be_ae_stat3 |
zone_avg |
分区间R、Gr、Gb、B分量平均值,取值范围:[0, 0xFFFF] |
be_ae_sti_stat |
zone_avg |
拼接模式下拼接后分区间R、Gr、Gb、B分量平均值,取值范围:[0, 0xFFFF] 只有进行拼接对应Pipe的分区间均值有效,其余Pipe的均值无效。 |
【注意事项】
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的成员变量默认配置说明
成员名称 |
主要统计信息 |
默认位置 |
黑电平 |
权重表影响 |
|---|---|---|---|---|
fe_ae_stat1 |
WDR合成前1024段直方图 |
FE-WB之后 |
未减 |
是 |
fe_ae_stat2 |
WDR合成前全局均值 |
FE-WB之后 |
未减 |
是 |
fe_ae_stat3 |
WDR合成前分块均值 |
FE-WB之后 |
未减 |
否 |
be_ae_stat1 |
WDR合成后1024段直方图 |
BE-WB之后 |
已减 |
是 |
be_ae_stat2 |
WDR合成后全局均值 |
BE-WB之后 |
已减 |
是 |
be_ae_stat3 |
WDR合成后分块均值 |
BE-WB之后 |
已减 |
否 |
说明:
表中说明仅在ISP默认配置下生效,实际会受到黑电平配置及AE统计信息位置的影响。
WDR合成前(FE)统计信息为固定在WB模块之后,不可配置。使用FE统计信息时需要减去黑电平,直方图应减去10bit黑电平,均值应减去16bit黑电平。WDR合成前(FE)统计信息受到位于FE AE之前处理模块(在SS928V100中,FE AE之前的处理模块有DG/WB)增益影响,这些模块的FE增益值由算法内部保证与BE保持一致,无需单独配置。
在SS928V100中第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算法的出现异常。
【相关数据类型及接口】
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 wight_table_update;
td_u8 weight_table[OT_ISP_MAX_PIPE_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN];
} ot_isp_ae_stat_attr;
【成员】
子成员名称 |
描述 |
|---|---|
change |
该结构体中的值是否需要配置寄存器。 |
hist_adjust |
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中的值为准配置芯片寄存器; hist_adjust不使能时,以上六个参数以外部寄存器的值(MPI配置)为准配置芯片寄存器。 |
ae_be_sel |
BE中AE统计模块在ISP pipeline的位置,默认值为1。FE中AE统计模块固定在WB之后,位置不可移动。 0:After ISP digital gain; 1:After static WB; 2:After DRC。 |
four_plane_mode |
FourPlaneMode使能,默认值为0,使能时1024段直方图为BGGR四通道256段直方图。 0:不使能; 1:使能。 |
hist_skip_x |
直方图统计时水平方向采样点设置,0=every pixel; 1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel; 6+=every 9th pixel。 即取值为0时表示每1个像素采样一个进行统计; 取值为1时表示每2个像素采样一个进行统计,以此类推。 0仅支持FourPlaneMode使能时配置。 |
hist_skip_y |
直方图统计时垂直方向采样点设置,0=every pixel; 1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel; 6+=every 9th pixel。 |
hist_offset_x |
直方图统计时水平方向起始点设置。 0表示从第一列开始统计; 1表示从第二列开始统计。 |
hist_offset_y |
直方图统计时垂直方向起始点设置。 0表示从第一行开始统计; 1表示从第二行开始统计。 |
mode_update |
AE算法开方模式配置使能,影响hist_mode/ aver_mode/ max_gain_mode三个参数的配置。 mode_update不为0时,以上三个参数以ot_isp_ae_result中的值为准配置逻辑寄存器; mode_update为0时,以上三个参数以外部寄存器的值(MPI配置)为准配置逻辑寄存器。 |
hist_mode |
全局1024段直方图开方模式。 0为不开方; 1为开方。 仅影响BE直方图统计信息。 |
aver_mode |
均值开方模式。 0为不开方; 1为开方。 仅影响BE均值统计信息。 |
max_gain_mode |
MG模块开方模式。 0为不开方; 1为开方。 仅影响MG模块统计信息。为了与AE分块统计信息进行比较,建议与aver_mode配置为同一模式。 |
wight_table_update |
AE算法权重表配置使能,影响weight_table的配置。
|
weight_table |
15x17个区间的AE权重表。取值范围:[0, 15] |
【注意事项】
weight_table支持拼接模式下在主路配置多路权重,在主路对所有支路对应Pipe下标的权重表进行赋值即可。在非拼接模式下,只有对应Pipe下标的权重表生效。
SDK提供的AE算法只支持1024段直方图,在使用AE算法情况下使能four_plane_mode会导致AE算法异常。
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
int_time |
AE计算得出的曝光时间,以1/16 us为单位,将曝光时间由行数转换成us时需要考虑cmos.c中offset的影响。 线性模式和sensor built-in WDR模式下,只有int_time[0]有效,int_time[1:3]建议配置等于int_time[0];N帧合成WDR模式下,int_time[0:(N-1)]有效,配置值由小到大,依次表示最短到最长的曝光时间,用于计算长短帧曝光比,int_time[(N-1):3]建议配置等于int_time[(N-1)]。int_time[0]还需传递至其他模块用于与曝光时间相关的联动控制,会影响SDK提供的AWB效果。使用AWB算法和多帧WDR模式时必须配置该结构体。 |
isp_dgain |
ISP的数字增益,8bit精度。使用ISP数字增益时必须配置;不使用时配置为0x100。 |
again |
Sensor的模拟增益,10bit精度。使用多帧WDR算法时必须配置;不使用时配置为0x400。 |
dgain |
Sensor的数字增益,10bit精度。使用多帧WDR算法时必须配置;不使用时配置为0x400。 |
iso |
AE计算得出的总增益值,ISO表示系统增益,以常数100乘以倍数为单位,例如系统中sensor的增益为2倍,ISP的增益为1倍,那么整个系统的ISO值计算方式为:2*1*100=200,即系统ISO为200,本文档中涉及到的ISO都是采用这种计算方法。此变量影响ISP的去噪,sharpen等自适应效果,必须配置。在2合1WDR模式下,ISO计算包含WDRGain。 |
isp_dgain_sf |
短帧的ISP的数字增益,8bit精度。使用WDR算法时必须配置;不使用时配置为0x400。 |
again_sf |
短帧的Sensor的模拟增益,10bit精度。使用WDR算法时必须配置;不使用时配置为0x400。 |
dgain_sf |
短帧的Sensor的数字增益,10bit精度。使用WDR算法时必须配置;不使用时配置为0x400。 |
iso_sf |
AE计算得出的短帧的总增益值。在2合1WDR模式下,ISO计算包含WDRGain。 |
ae_run_interval |
AE算法运行的间隔。取值范围:[1, 255] 取值为1时表示每帧都运行AE算法; 取值为2时表示每2帧运行1次AE算法,依此类推。 建议该值设置不要大于2,否则AE调节速度会受到影响。WDR模式时,该值建议设置为1,这样AE收敛会更加平滑。此变量决定AE计算结果配置到sensor和ISP寄存器的间隔帧数,必须配置。 |
piris_valid |
Piris是否有效的标志。
|
piris_pos |
Piris步进电机的位置,取值范围与具体Piris镜头相关。使用Piris驱动对接Piris镜头时,该值必须配置。 |
piris_gain |
Piris光圈等效增益,取值范围与具体Piris镜头相关。可用于计算Piris工作时的等效曝光量,供其他模块参考。对接非Piris镜头时建议将该值配置为512。 取值范围:[0, 1024] |
sns_lhcg_exp_ratio |
LCG+HCG模式的基础曝光比,仅Sensor支持LCG+HCG模式时生效,不使用时需将该值配置为64。 |
fswdr_mode |
WDR合成模式。 0表示普通多帧合成WDR模式; 1表示长帧模式; 2表示自动长帧模式。 |
wdr_gain |
WDR合成前多路的数字增益,8bit精度。使用WDR合成前多路数字ISP数字增益时必须配置;不使用时配置为0x100。 |
hmax_times |
Sensor对应读出一行的时间,单位:ns。 |
vmax |
Sensor每帧实际生效的总行数,单位:行。 |
stat_attr |
AE库返回给ISP的配置寄存器结构体 |
update_info |
用于传递AE相关DCF信息,仅曝光相关参数生效。 |
【注意事项】
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_awb_register¶
【说明】
定义AWB注册结构体。
【定义】
typedef struct {
ot_isp_awb_exp_func awb_exp_func;
} ot_isp_awb_register;
【成员】
成员名称 |
描述 |
|---|---|
awb_exp_func |
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, ot_void *value);
td_s32 (*pfn_awb_exit)(td_s32 handle);
} ot_isp_awb_exp_func;
【成员】
成员名称 |
描述 |
|---|---|
pfn_awb_init |
初始化AWB的回调函数指针。 |
pfn_awb_run |
运行AWB的回调函数指针。 |
pfn_awb_ctrl |
控制AWB内部状态的回调函数指针。 |
pfn_awb_exit |
销毁AWB的回调函数指针。 |
【注意事项】
调用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 sensor_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;
【成员】
成员名称 |
描述 |
|---|---|
sensor_id |
向ISP注册的sensor的id,用以检查向ISP注册的sensor和向AWB注册的sensor是否一致。 |
wdr_mode |
宽动态模式,ISP向AWB提供宽动态模式信息。 |
awb_zone_row |
AWB统计结果行数。 |
awb_zone_col |
AWB统计结果列数。 |
awb_zone_bin |
AWB统计结果亮度分组个数。 |
stitch_attr |
拼接信息结构体 |
awb_width |
Firmware传递给AWB算法库的图像宽度。 |
awb_height |
Firmware传递给AWB算法库的图像高度。 |
init_iso |
Firmware传递给AWB算法库的AE曝光ISO值。 |
reserved |
保留参数。 |
【注意事项】
无
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
metering_awb_avg_r |
Bayer域全局统计信息中白点的R分量平均值。 R分量均值取值范围为[0, 0xFFFF]。 |
metering_awb_avg_g |
Bayer域全局统计信息中白点的G分量平均值。 G分量均值取值范围为[0, 0xFFFF]。 |
metering_awb_avg_b |
Bayer域全局统计信息中白点的B分量平均值。 B分量均值取值范围为[0, 0xFFFF]。 |
metering_awb_count_all |
Bayer域全局统计信息中白点的个数。已做归一化。 白点个数取值范围为[0, 0xFFFF]。 |
【注意事项】
无
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
*zone_avg_r |
Bayer域分区间统计信息中白点的R分量平均值数组起始地址。 R分量均值取值范围为[0, 0xFFFF]。 |
*zone_avg_g |
Bayer域分区间统计信息中白点的G分量平均值数组起始地址。 G分量均值取值范围为[0, 0xFFFF]。 |
*zone_avg_b |
Bayer域分区间统计信息中白点的B分量平均值数组起始地址。 B分量均值取值范围为[0, 0xFFFF]。 |
*zone_count |
Bayer域分区间统计信息中白点的个数数组起始地址。已做归一化。 白点个数取值范围为[0, 0xFFFF]。 |
【注意事项】
无
【相关数据类型及接口】
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_info;
【成员】
成员名称 |
描述 |
|---|---|
frame_cnt |
帧的累加计数。 取值范围:[0, 0xFFFFFFFF] |
*awb_stat1 |
Awb统计信息1 |
awb_stat2 |
Awb统计信息2 |
awb_gain_switch |
白平衡增益在ISP的位置。取值范围:[0,1] 0:白平衡增益配置在WDR合成前的DG1处。 1:白平衡增益配置在WB处。 SS928V100暂不支持白平衡增益配置在DG1处。 |
awb_stat_switch |
白平衡统计模块在ISP的位置。取值范围:[0, 1, 2] 0:白平衡统计模块在DG后。 1:白平衡统计模块在EXPANDER后。 2:白平衡统计模块在DRC后。 SS928V100暂不支持配置白平衡统计模块在EXPANDER后。 |
wb_gain_in_sensor |
白平衡增益是否在sensor配置。取值范围:[0, 1] 0:白平衡增益在ISP配置。 1:白平衡增益在sensor配置。 SS928V100暂不支持白平衡增益在sensor配置。 |
wdr_wb_gain[-] |
在WDR合成前的DG1处配置的白平衡增益值。 |
【注意事项】
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模式下暗区偏红问题。拼接模式下不支持统计模块位置调整,建议固定统计模块位置在DG后。
【相关数据类型及接口】
ot_isp_awb_raw_stat_attr¶
【说明】
定义AWB Bayer域统计信息结构体。
【定义】
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;
【成员】
成员名称 |
描述 |
|---|---|
stat_cfg_update |
该结构体中的值是否需要配置寄存器。 |
metering_white_level_awb |
Bayer域统计白点信息时,找白点的亮度上限。 取值范围:[0x0, 0xFFFF],默认值0xFFFF。 |
metering_black_level_awb |
Bayer域统计白点信息时,找白点的亮度下限。 取值范围:[0x0, metering_white_level_awb],默认值0x0。 |
metering_cr_ref_max_awb |
Bayer域统计白点信息时,色差R/G的最大值,8bit精度,取值范围:[0x0, 0xFFF],默认值512。 |
metering_cb_ref_max_awb |
Bayer域统计白点信息时,色差B/G的最大值,8bit精度,取值范围:[0x0, 0xFFF],默认值512。 |
metering_cr_ref_min_awb |
Bayer域统计白点信息时,色差R/G的最小值,8bit精度,取值范围:[0x0, metering_cr_ref_max_awb],默认值128。 |
metering_cb_ref_min_awb |
Bayer域统计白点信息时,色差B/G的最小值,8bit精度,取值范围:[0x0, metering_cb_ref_max_awb],默认值128。 |
图 1 白色区域选择相关参数

【注意事项】
ot_isp_awb_raw_stat_attr结构体中的信息决定什么样的像素点被认为是白点,从而参与统计。用户开发新的AWB算法时可以使用默认值,也可以自定义配置,stat_cfg_update标识表明运行时当前帧是否需要配置stat_attr结构体中的值到寄存器。
只支持Bayer域统计信息。
【相关数据类型及接口】
无
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;
ot_isp_awb_raw_stat_attr raw_stat_attr;
} ot_isp_awb_result;
【成员】
成员名称 |
描述 |
|---|---|
white_balance_gain[OT_ISP_BAYER_CHN_NUM] |
白平衡算法得出的R、Gr、Gb、B颜色通道的增益,16bit精度表示。 取值范围:[0x10000, 0xFFF00] |
color_matrix[OT_ISP_CCM_MATRIX_SIZE] |
色彩还原矩阵,8bit精度表示。 |
color_temp |
AWB当前的色温。 |
saturation |
当前的饱和度。 |
raw_stat_attr |
定义AWB Bayer域统计信息结构体。 |
【注意事项】
AWB算法首先将会计算出R、Gr、Gb、B颜色通道的增益,以校正出白色,16bit精度表明最后16位为小数。
WDR模式,AWB统计结果和增益不需要做特别处理,和Linear模式一致。
AWB算法其次会计算一个3x3的颜色校正矩阵,以还原出真实的色彩,8bit精度表明最后8位为小数。
【相关数据类型及接口】
ot_isp_awb_calibration_gain¶
【说明】
定义AWB在线标定输出的增益结构体。
【定义】
typedef struct {
td_u16 avg_r_gain;
td_u16 avg_b_gain;
} ot_isp_awb_calibration_gain;
【成员】
成员名称 |
描述 |
|---|---|
avg_r_gain |
AWB在线标定输出的Rgain的值。 |
avg_b_gain |
AWB在线标定输出的Bgain的值。 |
【注意事项】
Rgain和Bgain值为图像中心位置若干个块的Rgain和Bgain的均值。
【相关数据类型及接口】
无
ot_isp_dcf_const_info¶
【说明】
定义DCF信息中用户配置参数。
【定义】
typedef struct {
td_u8 image_description[OT_DCF_DRSCRIPTION_LENGTH];
td_u8 make[OT_DCF_DRSCRIPTION_LENGTH];
td_u8 model[OT_DCF_DRSCRIPTION_LENGTH];
td_u8 software[OT_DCF_DRSCRIPTION_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;
【成员】
成员名称 |
描述 |
|---|---|
image_description |
图像描述、来源,指生成图像的工具。 数据格式:ascii strings,长度最大32。 |
make |
生产者,指产品生产厂家。 数据格式:ascii strings,长度最大32。 |
model |
型号,指设备型号。 数据格式:ascii strings,长度最大32。 |
software |
软件,显示固件Firmware版本。 数据格式:ascii strings,长度最大32。 |
light_source |
光源,表示白平衡设置。 0:未知。 1:日光; 2:荧光灯; 3:白炽灯(钨丝); 4:闪光灯; 10:阴天; 17:标准光A; 18:标准光B; 19:标准光C; 20:D55; 21:D65; 22:D75; 255:其他。 |
focal_length |
拍摄照片时的镜头的焦距长度,单位是毫米。高16位为分子,低16位为分母。 |
scene_type |
表示拍摄场景的类型,值 '0x01' 表示图像是指通过相机直接拍摄。 暂不支持。 |
custom_rendered |
自定义图像处理。0:标准;1:自定义。 |
focal_length_in35mm_film |
35毫米胶片焦距,0:表示这个焦距不存在。 |
scene_capture_type |
场景拍摄类型。 0:标准; 1:风景模式; 2:肖像模式; 3:夜间模式。 |
gain_control |
增益控制。 0:None; 1:Low gain up; 2 :High gain up; 3:Low gain down; 4:High gain down。 |
contrast |
对比度。 |
saturation |
饱和度。 0:无; 1:低; 2:高。 |
sharpness |
锐度。 |
metering_mode |
测光模式,用户可设置。 |
【注意事项】
无
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
iso_speed_ratings |
感光度。 只读。 |
exposure_time |
曝光时间 (快门速度的倒数),单位是秒。 高16位为分子,低16位为分母。 只读。 |
exposure_bias_value |
照片拍摄时的曝光补偿.,单位是APEX(EV)。 高16位为分子,低16位为分母。 只读。 |
exposure_program |
拍照时相机使用的曝光程序。 1:手动曝光; 2:正常程序曝光; 3:光圈优先曝光; 4:快门优先曝光; 5:创意程序(慢速程序); 6:动作程序(高速程序); 7:肖像模式; 8:风景模式。 只读。 |
f_number |
光圈系数。 高16位为分子,低16位为分母。 只读。 |
max_aperture_value |
镜头的最大光圈值。 高16位为分子,低16位为分母。 只读。 |
exposure_mode |
曝光模式。 0:自动曝光; 1:手动曝光; 2:自动包围曝光。 只读。 |
white_balance |
白平衡。 0:自动白平衡; 1:手动白平衡。 只读。 |
【注意事项】
无
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
isp_dcf_const_info |
DCF信息中用户配置参数。 |
isp_dcf_update_info |
DCF信息中ISP实时更新参数。 |
【注意事项】
无
【相关数据类型及接口】
ot_isp_pipe_diff_mode¶
【说明】
定义pipe diff的模式。
【定义】
typedef enum {
OT_ISP_PIPE_DIFF_CALIBRATION_MODE = 0,
OT_ISP_PIPE_DIFF_USER_MODE = 1,
OT_ISP_PIPE_DIFF_MODE_BUTT
} ot_isp_pipe_diff_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_PIPE_DIFF_CALIBRATION_MODE |
标定模式。配置为标定模式时,请使用PQ_Stitching_Tool标定工具得到的标定结果配置pipe_diff_param,该模式下配置gain值会影响BE统计信息。 |
OT_ISP_PIPE_DIFF_USER_MODE |
自定义模式。如果选择自定义模式,pipe_diff_param各参数的条件互不影响。配置gain值不会影响ISP Dgain模块后AE/AWB/AF的统计信息。 |
【注意事项】
如果未标定pipe_diff_param,建议配置为OT_ISP_PIPE_DIFF_USER_MODE,根据实际场景,手动修改offset、gain、color_matrix的值,达到拼接多路间颜色的一致性。
【相关数据类型及接口】
ot_isp_pipe_diff_param¶
【说明】
定义两路ISP差异参数结构体。
【定义】
typedef struct {
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_param;
【成员】
成员名称 |
描述 |
|---|---|
offset[OT_ISP_BAYER_CHN_NUM] |
多路黑电平差异偏移值。 取值范围:[-0x3FFF, 0x3FFF] 该数组4个值分别对应R、Gr、Gb、B四个通道。 基于14bit raw数据进行配置。 |
gain[OT_ISP_BAYER_CHN_NUM] |
多路增益差异比值,8bit小数精度。 取值范围:[0x80, 0x400] 该数组4个值分别对应R、Gr、Gb、B四个通道。 |
color_matrix[OT_ISP_CCM_MATRIX_SIZE] |
多路颜色校正矩阵差异比值,8bit小数精度。 bit 15是符号位,0表示正数,1表示负数,例如0x8010表示-16。 取值范围:[0x0, 0xFFFF] |
【注意事项】
仅ot_isp_black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_AUTO模式时,offset才有效。
【相关数据类型及接口】
ot_isp_pipe_diff_attr¶
【说明】
定义两路ISP差异属性结构体。
【定义】
typedef struct {
ot_isp_pipe_diff_mode mode;
ot_isp_pipe_diff_param param;
} ot_isp_pipe_diff_attr;
【成员】
成员名称 |
描述 |
|---|---|
mode |
pipe diff的模式。 |
param |
两路ISP差异参数。 |
【注意事项】
ot_isp_pipe_diff_attr主要用于拼接模式下,配置多路图像的亮度和颜色的差异,用于校正多路的图像的差异,从而使得拼接画面融合区域过渡平滑。
【相关数据类型及接口】
无
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 |
在FE的帧结束读取当前帧ob区统计信息 |
OT_ISP_UPDATE_OB_STATS_FE_FRAME_START |
在FE的帧起始读取上一帧ob区统计信息 |
【注意事项】
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黑电平寄存器时,有可能会因为计算配置不及时导致不同步的问题出现。
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_ALG_RUN_NORM |
运行ISP所有算法模块 |
OT_ISP_ALG_RUN_FE_ONLY |
只运行FE算法模块 |
【注意事项】
只支持在调用isp_mem_init前修改,不支持isp_mem_init后动态修改。
只支持在物理pipe配置为OT_ISP_ALG_RUN_FE_ONLY。
【相关数据类型及接口】
无
ot_isp_run_wakeup_select¶
【说明】
run模式下定义唤醒isp的中断类型。
【定义】
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;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_RUN_WAKEUP_FE_START |
ISP被FE帧起始中断唤醒; |
OT_ISP_RUN_WAKEUP_BE_END |
ISP被BE帧结束中断唤醒。 |
【注意事项】
只支持在调用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接口使用,推荐调用流程如图1。
图 1 接口调用流程(1)

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

【相关数据类型及接口】
无
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;
ot_isp_run_wakeup_select isp_run_wakeup_select;
} ot_isp_ctrl_param;
【成员】
成员名称 |
描述 |
|---|---|
be_buf_num |
离线模式下,ISP BE config buffer的数目。仅离线模式有效取值范围:[2, 20],SS928V100默认值为8 |
proc_param |
ISP的PROC信息更新频率。默认值30 最小值为1,无上限。proc_param为n表示每隔n帧更新一次ISP的PROC信息。 |
stat_interval |
ISP统计信息更新频率。注意:在高帧率业务时,如120fps及其以上帧率,可通过参数stat_interval设置其ISP统计信息更新频率,从而可降低ISP的CPU占用率,同时降低性能消耗。 取值范围:(0,0xffffffff]。默认值为1 |
update_pos |
默认值为0。 0:根据ot_isp_sns_regs_info结构体中u8IntPos变量的配置值,sensor寄存器在帧起始中断或帧结束中断配置; 其他值:sensor寄存器在帧结束中断配置。 取值范围:[0,1] |
interrupt_time_out |
表示中断超时的时间(ms)。默认值为200 |
pwm_num |
表示PWM号。默认值3 |
port_interrupt_delay |
表示Port 中断延时时间,默认值为0。 解决部分sensor Half WDR模式下,在前面几行配置sensor寄存器会出现闪烁,需要延时。 port_interrupt_delay是按照VI的工作时钟频率计算,以时钟为单位。如:VI时钟是300MHz。延时1ms,port_interrupt_delay的计算如下: port_interrupt_delay(1ms)= 300M/1000ms = 300000 注意:port_interrupt_delay仅在Half WDR模式下生效,因为其他模式配置sensor不用Port中断。 |
ldci_tpr_flt_en |
表示LDCI是否使能时域滤波,默认值为0。 |
ob_stats_update_pos |
表示读取ob区统计信息的位置。默认值为0。 |
alg_run_select |
ISP算法运行的选择。 0:运行ISP的所有算法; 1:仅运行ISP FE中的算法。 默认值为0。 |
isp_run_wakeup_select |
唤醒ISP中断源的选择。 0:ISP被FE帧起始中断唤醒; 1:ISP被BE帧结束中断唤醒。 默认值为0。 |
【注意事项】
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 媒体处理软件V5.0 开发参考》的VI章节。
BE 输入为YUV数据时,OT_ISP_ALG_RUN_FE_ONLY配置无效
只有在从VI捞帧再灌raw处理的场景下,ISP 需要把中断源选择isp_run_wakeup_select 配置为BE帧结束中断,其他场景下只支持配置为帧起始中断唤醒。
当中断源选择isp_run_wakeup_select 配置为BE帧结束中断时,有如下限制:
1)不支持帧模式wdr。
2)执行静态坏点标定时,如果灌raw延时较大且时间不均匀,有可能会导致静态坏点标定失败。
3) 不支持叠加配置中断底半部使用。
4)不支持输入YUV格式的处理
【相关数据类型及接口】
ot_isp_mod_param¶
【说明】
定义ISP模块参数结构体。
【定义】
typedef struct {
td_u32 interrupt_bottom_half;
td_u32 quick_start;
td_bool long_frame_interrupt_en;
} ot_isp_mod_param;
【成员】
成员名称 |
描述 |
|---|---|
interrupt_bottom_half |
表示ISP中断处理是否采用底半部机制,默认值为0。
|
quick_start |
表示ISP是否采用快速启动,默认值为0。
|
long_frame_interrupt_en |
表示WDR 时,ISP是否响应长帧中断,默认值为0。 0:不使能; 1:使能。 |
【注意事项】
不支持设置中断底半部;而ss_mpi_isp_get_mod_param接口调用顺序没有限制,可查询当前状态。
通过接口ss_mpi_isp_set_mod_param设置quick_start快速启动时,接口调用需要在ISP起主业务之前(如:起多路PIPE场景业务时,需要在将接口调用顺序放在起多路主业务之前),且ISP KO已经加载;而ss_mpi_isp_get_mod_param接口调用顺序没有限制,可查询当前状态。
不支持加载ko时设置ISP模块参数。
long_frame_interrupt_en设置为1时,WDR模式时,ISP响应中断次数会增加,会影响ISP中断响应时间。增加cpu负载。
中断底半部开启,四路拼接模式、线性模式(1080p,120fps)、寄存器固定在消隐区配置的sensor会出现同步异常的问题。
【相关数据类型及接口】
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;
【成员】
成员名称 |
描述 |
|---|---|
quick_start_enable |
设置是否打开AE启动快速收敛模式。该值为TD_TRUE时,打开AE开机快速收敛模式,AE启动时会以最快速度进行收敛(对于大部分场景可在10帧内收敛完成)。此模式可以在没有光敏的时候达到启动AE快速收敛的需求。 |
black_frame_num |
Sensor初始输出的坏帧数。此参数在quick_start_enable为TD_TRUE的情况下生效。 |
ir_mode_en |
AE快速收敛模式下,支持红外模式开关。该值为TD_TRUE时,AE快速收敛支持红外模式。此参数在quick_start_enable为TD_TRUE的情况下生效。 |
init_exposure_ir |
红外模式下的初始曝光量,等于曝光时间与曝光增益的乘积,其中曝光时间的单位为微秒(us)。此参数在quick_start_enable和ir_mode_en都为TD_TRUE的情况下生效。 |
iso_thr_ir |
在AE快速收敛模式下,设定切换到红外模式(打开IR CUT、IR LED)的ISO阈值,此参数在quick_start_enable为TD_TRUE的情况下生效。 |
ir_cut_delay_time |
设置打开IR CUT物理上需要的时间。单位为ms。此参数在quick_start_enable为TD_TRUE的情况下生效。 |
【注意事项】
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;
} ot_isp_init_attr;
【成员】
成员名称 |
描述 |
|---|---|
is_ir_mode |
设置ISP启动状态是否红外模式。 |
ae_comp |
设置ISP启动后AE的目标亮度。 |
exp_time |
设置ISP第一次启动时AE初始曝光时间,单位为us,FSWDR模式下,表示当前最短帧(VS)曝光时间。不支持。 |
int_time_accu |
设置ISP启动后曝光时间的精度。 |
a_gain |
设置ISP第一次启动时AE初始sensor模拟增益,精度为10bit,不支持。 |
again_accu |
设置ISP启动后sensor模拟增益的精度。 |
d_gain |
设置ISP第一次启动时AE初始sensor数字增益,精度为10bit,不支持。 |
dgain_accu |
设置ISP启动后sensor数字增益的精度。 |
ispd_gain |
设置ISP第一次启动时AE初始ISP数字增益,精度为10bit,不支持。 |
exposure |
设置ISP第一次启动时AE初始曝光量,等于曝光时间与曝光增益的乘积,其中曝光时间的单位为微秒(us)。 |
init_iso |
设置ISP第一次启动时AE初始ISO值。 |
lines_per500ms |
设置每500ms对应的曝光行数,用于计算AE初始曝光量。 |
piris_fno |
P-Iris光圈F值对应的等效增益,不支持。 |
wb_r_gain |
设置ISP第一次启动时AWB的R通道增益。 |
wb_g_gain |
设置ISP第一次启动时AWB的G通道增益。 |
wb_b_gain |
设置ISP第一次启动时AWB的B通道增益。 |
sample_r_gain |
设置当前样机AWB在线标定的G/R的值。 |
sample_b_gain |
设置当前样机AWB在线标定的G/B的值。 |
init_ccm |
设置ISP第一次启动时CCM值。 |
ae_route_ex_valid |
设置ISP第一次启动时AE扩展分配路线生效开关, 该值为TD_TRUE时使用扩展分配路线,否则使用普通分配路线。 |
quick_start_en |
设置不带光敏快启相关参数。 |
ae_route |
设置ISP第一次启动时AE的曝光分配路线。 |
ae_route_ex |
设置ISP第一次启动时AE的扩展曝光分配路线。 |
ae_route_sf |
设置ISP第一次启动时AE短帧的曝光分配路线,仅在WDR模式下使用。 |
ae_route_sf_ex |
设置ISP第一次启动时AE短帧的扩展曝光分配路线,仅在WDR模式下使用。 |
【注意事项】
在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;
【成员】
成员名称 |
描述 |
|---|---|
ISP_SNS_NORMAL |
sensor正常输出 |
ISP_SNS_MIRROR |
sensor mirror输出 |
ISP_SNS_FLIP |
sensor flip输出 |
ISP_SNS_MIRROR_FLIP |
Sensor mirror-flip输出 |
【注意事项】
无。
【相关数据类型及接口】
ot_isp_sns_blc_clamp¶
【说明】
定义sensor 黑电平矫正开关。
【定义】
typedef struct {
td_bool blc_clamp_en;
} ot_isp_sns_blc_clamp;
【成员】
成员名称 |
描述 |
|---|---|
blc_clamp_en |
Sensor黑电平矫正开关,该值为TD_TRUE时,sensor内部黑电平矫正使能,该值为TD_FALSE时,sensor内部黑电平矫正关闭。 |
【注意事项】
有些sensor内部黑电平校正打开和关闭时输出的ob区行数不一样,使用此接口需要检查ob区的行数变化。ob区行数变化若影响到其他算法功能要修改相应算法的配置。
【相关数据类型及接口】
ot_isp_sns_bus_ex¶
【说明】
定义sensor通讯协议的扩展结构体。
【定义】
typedef struct {
char bus_addr;
} ot_isp_sns_bus_ex;
【成员】
成员名称 |
描述 |
|---|---|
bus_addr |
指定该pipe绑定的sensor对应到serdes的设备地址。 |
【注意事项】
无。
【相关数据类型及接口】
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_ex_info)(ot_vi_pipe vi_pipe, ot_isp_sns_bus_ex *serdes_info);
ot_void (*pfn_standby)(ot_vi_pipe vi_pipe);
ot_void (*pfn_restart)(ot_vi_pipe vi_pipe);
ot_void (*pfn_mirror_flip)(ot_vi_pipe vi_pipe, ot_isp_sns_mirrorflip_type sns_mirror_flip);
ot_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);
} ot_isp_sns_obj;
【成员】
成员名称 |
描述 |
|---|---|
pfn_register_callback |
指向sensor注册函数的指针 |
pfn_un_register_callback |
指向sensor反注册函数的指针 |
pfn_set_bus_info |
指向sensor与I2C/SPI的绑定关系函数的指针 |
pfn_set_bus_ex_info |
指向sensor扩展通讯函数的指针 |
pfn_standby |
指向sensor standby的函数指针 |
pfn_restart |
指向sensor Restart的函数指针 |
pfn_mirror_flip |
指向sensor Mirror Flip的函数指针 |
pfn_set_blc_clamp |
指向sensor黑电平矫正的函数指针 |
pfn_write_reg |
指向sensor写寄存器函数的指针 |
pfn_read_reg |
指向sensor读寄存器函数的指针 |
pfn_set_init |
指向sensor设置AW/AWB初始化参数函数的指针 |
【注意事项】
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_init = sensor_set_init
};
【相关数据类型及接口】
无
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 sensor_wb_gain[OT_ISP_BAYER_CHN_NUM];
} ot_isp_sns_state;
【成员】
成员名称 |
描述 |
|---|---|
init |
Sensor初始化状态标记。 |
sync_init |
Sensor寄存器同步初始化状态标记。 |
img_mode |
Sensor 分辨率模式设置。 |
hdr |
记录是否为HDR模式,不支持。 |
wdr_mode |
Sensor WDR模式设置。 |
regs_info[ISP_SNS_SAVE_INFO_MAX] |
Sensor寄存器状态,regs_info[0]表示当前帧sensor寄存器状态,regs_info[1]表示上一帧sensor寄存器状态。 |
fl[ISP_SNS_SAVE_INFO_MAX] |
记录实际生效的一帧的总行数,fl[0]表示当前帧的行数,fl[1]表示上一帧的行数。 |
fl_std |
基准帧率下的一帧的总行数。 |
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帧曝光时间。 |
sensor_wb_gain |
Sensor应配置的AWB增益。8bit小数精度,取值范围:[0x0, 0xFFF],增益按照RGGB顺序排列。 |
【注意事项】
ot_isp_sns_state是保存cmos.c中全局变量而新增的结构体,多路ISP同时加载sensor库,sensor状态相关的全局变量以vi_pipe进行区别。
默认AWB增益在ISP配置,用户不需要关注sensor_wb_gain参数。
实现AWB增益在Sensor配置,需要对回调函数pfn_cmos_get_awb_gains赋值,且将sensor_wb_gain参数的AWB增益值配置到对应的Sensor寄存器。
【相关数据类型及接口】
无
ot_isp_awb_alg¶
【说明】
定义AWB算法类型。
【定义】
typedef enum {
OT_ISP_ALG_AWB_GW = 0,
OT_ISP_ALG_AWB_SPEC = 1,
OT_ISP_ALG_BUTT
} ot_isp_awb_alg;
【成员】
成员名称 |
描述 |
|---|---|
OT_ISP_ALG_AWB_GW |
灰度世界AWB算法 |
OT_ISP_ALG_AWB_SPEC |
机器学习AWB算法 |
【注意事项】
SS928V100不支持机器学习AWB。
【相关数据类型及接口】
ot_isp_wb_attr
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_STATUS_NORMAL |
设备当前为普通状态(非红外状态)。 |
OT_ISP_IR_STATUS_IR |
设备当前为红外状态。 |
【注意事项】
无
【相关数据类型及接口】
无
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_SWITCH_NONE |
设备不切换红外状态。 |
OT_ISP_IR_SWITCH_TO_NORMAL |
设备切换为普通状态(非红外状态)。 |
OT_ISP_IR_SWITCH_TO_IR |
设备切换为红外状态。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_ir_auto_attr¶
【说明】
定义红外自动切换属性。
【定义】
typedef struct {
td_bool en;
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;
【成员】
成员名称 |
描述 |
|---|---|
en |
红外自动切换使能。 TD_FALSE:关闭; TD_TRUE:使能。 |
normal_to_ir_iso_threshold |
从普通状态切换到红外状态的ISO阈值。当实际生效的ISO大于此阈值时,系统需要切换到红外状态。 取值范围:[0, 0xFFFFFFFF] |
ir_to_normal_iso_threshold |
从红外状态切换到普通状态的ISO阈值。当实际生效的ISO小于此阈值时,系统需要切换到普通状态。 取值范围:[0, 0xFFFFFFFF] |
rg_max |
红外状态下的R/G最大值。实际图像的R/G大于此参数时,系统需要切换到普通状态。4.8格式。 取值范围:[0, 0xFFF] |
rg_min |
红外状态下的R/G最小值。实际图像的R/G小于此参数时,系统需要切换到普通状态。4.8格式。 取值范围:[0, rg_max] |
bg_max |
红外状态下的B/G最大值。实际图像的B/G大于此参数时,系统需要切换到普通状态。4.8格式。取值范围:[0, 0xFFF] |
bg_min |
红外状态下的B/G最小值。实际图像的B/G小于此参数时,系统需要切换到普通状态。4.8格式。 取值范围:[0, bg_max] |
ir_status |
设备当前的红外状态。应配置为设备实际的红外状态,需要用户保证状态的正确性。 |
ir_switch |
设备的红外切换状态,为只读。 |
【注意事项】
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中标定流程生成。
【相关数据类型及接口】
无




