前言¶
本文为使用ISP开发的程序员而写,目的是为您在开发过程中遇到的问题提供解决办法和帮助。
说明: 本文以SS928V100描述为例,未有特殊说明,SS927V100与SS928V100内容一致。
与本文档相对应的产品版本如下。
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
概述¶
概述¶
ISP通过一系列数字图像处理算法完成对数字图像的效果处理。主要包括3A、坏点校正、去噪、强光抑制、背光补偿、色彩增强、镜头阴影校正等处理。ISP包括逻辑部分以及运行在其上的firmware。这里主要介绍ISP的用户接口。
功能描述¶
ISP的控制结构如图1所示,lens将光信号投射到sensor的感光区域后,sensor经过光电转换,将Bayer格式的原始图像送给ISP,ISP经过算法处理,输出RGB空间域的图像给后端的视频采集单元。在这个过程中,ISP通过运行在其上的firmware对ISP逻辑,lens和sensor进行相应控制,进而完成自动光圈、自动曝光、自动白平衡等功能。其中,firmware的运转靠视频采集单元的中断驱动。PQ Tools工具通过网口或者串口完成对ISP的在线图像质量调节。
ISP由ISP逻辑及运行在其上的Firmware组成,逻辑单元除了完成一部分算法处理外,还可以统计出当前图像的实时信息。Firmware通过获取ISP逻辑的图像统计信息,重新计算,反馈控制lens、sensor和ISP逻辑,以达到自动调节图像质量的目的。
ISP逻辑主要流程、具体概念和功能点请参见芯片手册。
架构¶
ISP的Firmware包含三部分,一部分是ISP控制单元和基础算法库,一部分是AE/AWB算法库,一部分是sensor库。Firmware设计的基本思想是单独提供3A算法库,由ISP控制单元调度基础算法库和3A算法库,同时sensor库分别向ISP基础算法库和3A算法库注册函数回调,以实现差异化的sensor适配。ISP firmware架构如图1所示。
不同的sensor都以回调函数的形式,向ISP算法库注册控制函数。ISP控制单元调度基础算法库和3A算法库时,将通过这些回调函数获取初始化参数,并控制sensor,如调节曝光时间、模拟增益、数字增益,控制lens步进聚焦或旋转光圈等。
开发模式¶
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所示。
软件流程¶
ISP作为前端采集部分,需要和视频采集单元(VIU)协同工作。ISP初始化和基本配置完成后,需要VIU进行接口时序匹配。一是为了匹配不同sensor的输入时序,二是为ISP配置正确的输入时序。待时序配置完成后,ISP就可以启动Run来进行动态图像质量调节。此时输出的图像被VIU采集,进而送去显示或编码。软件使用流程如图1所示。
PQ Tools工具主要完成在PC端进行动态图像质量调节,可以调节多个影响图像质量的因子,如去噪强度、色彩转换矩阵、饱和度等。
如果用户调试好图像效果后,可以使用PQ Tools工具提供的配置文件保存功能进行配置参数保存。在下次启动时系统可以使用PQ Tools工具提供的配置文件加载功能加载已经调节好的图像参数。
代码示例:
td_s32 ret;
ot_isp_3a_alg_lib ae_lib;
ot_isp_3a_alg_lib awb_lib;
ot_isp_pub_attr pub_attr;
pthread_t isp_pid;
ot_vi_pipe vi_pipe = 0;
/* 注册sensor库 */
ret = sensor_register_callback(vi_pipe, &ae_lib, &awb_lib);
if (ret != TD_SUCCESS) {
printf(”register sensor failed!\n”);
return ret;
}
/* 注册AE算法库 */
ae_lib.id = 0;
strncpy(ae_lib.lib_name, OT_AE_LIB_NAME, sizeof(OT_AE_LIB_NAME));
ret = ss_mpi_ae_register(isp_dev, &ae_lib);
if (ret != TD_SUCCESS) {
printf("ss_mpi_ae_register failed with %#x!\n", ret);
return ret;
}
/* 注册AWB算法库 */
awb_lib.id = isp_dev;
strncpy(awb_lib.lib_name, OT_AWB_LIB_NAME, sizeof(OT_AWB_LIB_NAME));
ret = ss_mpi_awb_register(isp_dev, &awb_lib);
if (ret != TD_SUCCESS) {
printf("ss_mpi_awb_register failed with %#x!\n", ret);
return ret;
}
/* 初始化ISP外部寄存器 */
ret = ss_mpi_isp_mem_init(vi_pipe);
if (ret != TD_SUCCESS) {
printf("ss_mpi_isp_mem_init failed with %#x!\n", ret);
return ret;
}
/* 配置图像公共属性 */
ret = ss_mpi_isp_set_pub_attr (vi_pipe, & pub_attr);
if (ret != TD_SUCCESS) {
printf("ss_mpi_isp_set_pub_attr failed with %#x!\n", ret);
return ret;
}
/* 初始化ISP Firmware */
ret = ss_mpi_isp_init(vi_pipe);
if (ret != TD_SUCCESS) {
printf(”isp init failed!\n”);
return ret;
}
/* ss_mpi_isp_run单独启动线程运行 */
if (0 != pthread_create(&isp_pid, 0, ISP_Run, NULL))
{
printf("create isp running thread failed!\n");
return TD_FAILURE;
}
/* 启动VI/VO等业务 */
……
/* 停止VI/VO等业务 */
ret = ss_mpi_isp_exit (vi_pipe);
if (TD_SUCCESS != ret) {
printf(”isp exit failed!\n”);
return ret;
}
pthread_join(isp_pid, 0);
return TD_SUCCESS;
说明: AE库有用到标准C库的数学库,请使用者在Makefile中增加 –lm 编译条件。
文件组织¶
ISP Firmware的文件组织结构如图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文件夹对应动态范围压缩算法程序,该部分代码不开源。
系统控制¶
功能概述¶
系统控制部分包含了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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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。
此接口不支持多进程操作。
【举例】
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, &sns_attr_info, &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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
ISP提供统一的AE算法库接口,初始化、运行、控制、销毁AE算法库。使用SDK提供的AE算法库时,不需要关注此接口;使用用户自己的AE算法库时,需要调用此接口向ISP注册回调函数。
此接口不支持多进程操作。
最大支持2个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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件:ot_common_isp.h、ss_mpi_isp.h
库文件:libss_isp.a、libot_isp.a
【注意】
ISP提供统一的AWB算法库接口,初始化、运行、控制、销毁AWB算法库。使用AWB算法库时,不需要关注此接口;使用用户自己的AWB算法库时,需要调用此接口向ISP注册回调函数。
此接口不支持多进程操作。
最大支持2个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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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)
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
【返回值】
【需求】
头文件: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);
【参数】
ISP实时信息。ot_isp_frame_info详情请参见《MPP 媒体处理软件 Vx.x 开发参考》"系统控制”章节。 |
【返回值】
【需求】
头文件: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);
【参数】
ISP实时信息。ot_isp_frame_info详情请参见《MPP 媒体处理软件 Vx.x 开发参考》"系统控制”章节。 |
【返回值】
【需求】
头文件: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模式下最大支持的帧数。
AE_INT_TIME_NUM:ae支持4to1wdr,表示支持的最大曝光时间个数。
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
AE_INT_TIME_NUM¶
【说明】
ae支持4to1wdr,表示支持的最大曝光时间个数。
【定义】
#define AE_INT_TIME_NUM 4
【注意事项】
无。
【相关数据类型及接口】
ot_rect¶
【说明】
定义裁剪窗口起始位置和图像宽高。
【定义】
typedef struct {
td_s32 x;
td_s32 y;
td_u32 width;
td_u32 height;
} ot_rect;
【成员】
【注意事项】
水平方向起始位置与图像宽度之和应小于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;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无
ot_isp_bayer_format¶
【说明】
定义输入Bayer图像数据格式。
【定义】
typedef enum {
OT_ISP_BAYER_RGGB = 0,
OT_ISP_BAYER_GRBG = 1,
OT_ISP_BAYER_GBRG = 2,
OT_ISP_BAYER_BGGR = 3,
OT_ISP_BAYER_BUTT
} ot_isp_bayer_format;
【成员】
【注意事项】
该格式可以从所使用sensor的DataSheet上获取,并和裁剪起始位置相关。
【相关数据类型及接口】
无
ot_mipi_crop_attr¶
【说明】
mipi裁剪参数。
【定义】
typedef struct {
td_bool mipi_crop_en;
ot_rect mipi_crop_offset;
} ot_mipi_crop_attr;
【成员】
【注意事项】
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;
【成员】
【注意事项】
该格式可以从所使用sensor的DataSheet上获取,并和裁剪起始位置相关。
【相关数据类型及接口】
无
ot_size¶
【说明】
定义sensor输出的宽高。
【定义】
typedef struct {
td_u32 width;
td_u32 height;
} ot_size;
【成员】
【注意事项】
图像宽度应小于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_isp_pub_attr¶
【说明】
定义ISP公共属性。
【定义】
typedef struct {
ot_rect wnd_rect;
ot_size sns_size;
td_float frame_rate;
ot_isp_bayer_format bayer_format;
ot_wdr_mode wdr_mode;
td_u8 sns_mode;
td_bool sensor_flip_en;
td_bool sensor_mirror_en;
ot_mipi_crop_attr mipi_crop_attr;
} ot_isp_pub_attr;
【成员】
【注意事项】
若sensor_flip_en为0时,mipi_crop_attr.y应设为0.
若sensor_flip_en为1时,mipi_crop_attr.y加mipi_crop_attr.height应等于sensor输出高度。
【相关数据类型及接口】
无
ot_op_mode¶
【说明】
定义模块运行状态。
【定义】
typedef enum {
OT_OP_MODE_AUTO = 0,
OT_OP_MODE_MANUAL = 1,
OT_OP_MODE_BUTT
} ot_op_mode;
【成员】
【注意事项】
无
【相关数据类型及接口】
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_slave_sns_sync¶
【说明】
定义从模式sensor同步信号配置。
【定义】
typedef struct {
union {
struct {
td_u32 bit16_reserved : 16;
td_u32 bit_h_inv : 1;
td_u32 bit_v_inv : 1;
td_u32 bit12_reserved : 12;
td_u32 bit_h_enable : 1;
td_u32 bit_v_enable : 1;
} bits;
td_u32 bytes;
} cfg;
td_u32 vs_time;
td_u32 hs_time;
td_u32 vs_cyc;
td_u32 hs_cyc;
td_u32 hs_dly_cyc;
td_u32 slave_mode_time;
} ot_isp_slave_sns_sync;
【成员】
|
|
【注意事项】
【相关数据类型及接口】
无
ot_isp_wdr_mode¶
【说明】
定义ISP宽动态模式。
【定义】
typedef struct {
ot_wdr_mode wdr_mode;
} ot_isp_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_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;
【成员】
【注意事项】
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_be_frame_attr¶
【说明】
定义be frame的相关配置信息。
【定义】
typedef struct {
ot_isp_dump_frame_pos frame_pos;
} ot_isp_be_frame_attr;
【成员】
【注意事项】
无
【相关数据类型及接口】
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_BE_END方式。
【相关数据类型及接口】
无
ot_isp_sns_attr_info¶
【说明】
定义ISP sensor属性。
【定义】
typedef struct {
ot_sensor_id sensor_id;
} ot_isp_sns_attr_info;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无
ot_isp_sensor_register¶
【说明】
定义sensor注册结构体。
【定义】
typedef struct {
ot_isp_sensor_exp_func sns_exp;
} ot_isp_sensor_register;
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
ot_isp_sensor_exp_func¶
【说明】
定义sensor回调函数结构体。
【定义】
typedef struct {
td_void (*pfn_cmos_sensor_init)(ot_vi_pipe vi_pipe);
td_void (*pfn_cmos_sensor_exit)(ot_vi_pipe vi_pipe);
td_void (*pfn_cmos_sensor_global_init)(ot_vi_pipe vi_pipe);
td_s32 (*pfn_cmos_set_image_mode)(ot_vi_pipe vi_pipe, const 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);
td_void (*pfn_cmos_set_pixel_detect)(ot_vi_pipe vi_pipe, td_bool enable);
td_s32 (*pfn_cmos_get_awb_gains)(ot_vi_pipe vi_pipe, td_u32 *sensor_awb_gain);
} ot_isp_sensor_exp_func;
【成员】
【注意事项】
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;
td_float fps;
td_u8 sns_mode;
} ot_isp_cmos_sensor_image_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;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_acs_y_shading_lut¶
【说明】
定义Auto Color Shading亮度分量上的校正强度表,也就是Gr/Gb分量的校正强度,用标定工具生成。
【定义】
typedef struct {
td_u16 g_param_high_ct[OT_ISP_LSC_GRID_POINTS];
td_u16 g_param_low_ct[OT_ISP_LSC_GRID_POINTS];
} ot_isp_acs_y_shading_lut;
【成员】
【注意事项】
算法根据场景从g_param_high_ct和g_param_low_ct两张表中进行插值。
【相关数据类型及接口】
ot_isp_acs_color_shading_lut¶
【说明】
定义Auto Color Shading颜色分量上的Lut表,用标定工具生成,算法会根据R/B分量上的Lut表,动态生成适合当前场景的Lut表。
【定义】
typedef struct {
td_float avg_rg_map[OT_ISP_LSC_GRID_POINTS];
td_float avg_bg_map[OT_ISP_LSC_GRID_POINTS];
td_float prof_rg_map[OT_ISP_LSC_GRID_POINTS];
td_float prof_bg_map[OT_ISP_LSC_GRID_POINTS];
} ot_isp_acs_color_shading_lut;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_acs_calib_param¶
【说明】
定义Auto Color Shading的标定参数,用标定工具生成。
【定义】
typedef struct {
td_s16 light_index[OT_ISP_ACS_LIGHT_NUM * OT_ISP_ACS_CHN_NUM];
td_float model_ar_min;
td_float model_ar_step;
td_float model_ab_min;
td_float model_ab_step;
td_s16 light_type_g_high;
td_s16 light_type_g_low;
} ot_isp_acs_calib_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_acs¶
【说明】
定义Auto Color Shading的CMOS参数。
【定义】
typedef struct {
ot_isp_acs_attr acs_attr;
ot_isp_acs_calib_param acs_calib_param;
ot_isp_acs_y_shading_lut acs_y_shading_lut;
ot_isp_acs_color_shading_lut acs_color_shading_lut;
} ot_isp_cmos_acs;
【成员】
【注意事项】
增益表的默认配置与ot_isp_cmos_alg_key中的bit1_acs标志位有关,如果bit1_acs=1,则采用cmos_ex.h中的配置值作为默认值;否则默认配置都为0。
ACS模块的otp通过ot_isp_cmos_lsc中的lsc_lut.lsc_gain_lut接口实现,其中lsc_lut.lsc_gain_lut[0]配置为golden sample在D50下标定的表,lsc_lut.lsc_gain_lut[1[配置为当前镜头模组在D50下标定的表,可以解决镜头的一致性问题,模组与golden之间的差异越小,校正的效果越好。也可以在ISP启动后配置接口ss_mpi_isp_set_mesh_shading_gain_lut_attr中的lsc_gain_lut[0]和lsc_gain_lut[1],用法与上面描述一致。
【相关数据类型及接口】
ot_isp_noise_calibration¶
【说明】
定义NOISE 校正参数。
【定义】
typedef struct {
td_double calibration_coef[OT_BAYER_CALIBRATION_PARA_NUM_NEW];
} ot_isp_noise_calibration;
【成员】
calibration_coef[OT_BAYER_CALIBRATION_PARA_NUM_NEW] |
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_sensor_max_resolution¶
【说明】
定义sensor最大分辨率结构体。
【定义】
typedef struct {
td_u32 max_width;
td_u32 max_height;
} ot_isp_cmos_sensor_max_resolution;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_clut¶
【说明】
定义CLUT结构体。
【定义】
typedef struct {
ot_isp_clut_attr clut_attr;
ot_isp_clut_lut clut_lut;
} ot_isp_cmos_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;
【成员】
【注意事项】
无
【相关数据类型及接口】
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;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_cmos_wdr_switch_attr¶
【说明】
定义WDR切换属性。
【定义】
typedef struct {
td_u32 exp_ratio[OT_ISP_EXP_RATIO_NUM];
} ot_isp_cmos_wdr_switch_attr;
【成员】
【注意事项】
在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;
【成员】
【注意事项】
如果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;
【成员】
【注意事项】
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;
【成员】
Sensor的黑电平是否会动态根据增益改变,取值范围:[0,1]。若设置为TD_TRUE,ISP内部始终使用cmos.c内联动的黑电平配置;此时若需要手动改变ISP的黑电平,则设置ss_mpi_isp_set_black_level_attr为手动模式。 |
|
【注意事项】
如果sensor的黑电平不会动态根据增益改变,update配置为TD_FALSE即可。
【相关数据类型及接口】
ot_isp_sensor_total_size_attr¶
【说明】
定义sensor写出数据的实际宽高。
【定义】
typedef struct {
ot_size ob_sensor_size;
} ot_isp_sensor_total_size_attr;
【成员】
【注意事项】
若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;
【成员】
【注意事项】
如果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;
struct {
td_u32 exp_distance[OT_ISP_WDR_MAX_FRAME_NUM - 1];
td_u8 delay_frame_num;
} distance_attr;
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;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_3a_alg_lib¶
【说明】
定义AE/AWB算法库结构体。
【定义】
typedef struct {
td_s32 id;
td_char lib_name[ALG_LIB_NAME_SIZE_MAX];
} ot_isp_3a_alg_lib;
【成员】
【注意事项】
库的名字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;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_ctrl_proc_write¶
【说明】
定义ISP的PROC信息。
【定义】
typedef struct {
td_char *proc_buff;
td_u32 buff_len;
td_u32 write_len;
} ot_isp_ctrl_proc_write;
【成员】
【注意事项】
用户使用自己的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;
【成员】
设置WDR 模式,将ISP控制单元的WDR模式配置到算法模块,此命令对应的参数数据类型是ot_wdr_mode。 |
|
设置写PROC信息,将算法模块的PROC信息配置到ISP控制单元,此命令对应的参数数据类型是ot_isp_ctrl_proc_write。 |
|
设置帧率,将ISP控制单元的帧率信息配置到AE算法模块,此命令对应的参数与ot_isp_pub_attr里面的frame_rate一样。 |
|
设置ISO值,将AE当前的ISO值配置到AWB模块,用于自动调整饱和度,此命令对应的参数与ot_isp_ae_result里面的iso一样。 |
|
设置图像分辨率切换标识,将ISP控制单元的图像分辨率标识配置到算法模块,此命令对应的参数数据类型为td_u8,参数值为0表示图像分辨率未切换,其他值表示图像分辨率已切换。 |
|
设置曝光量值,将AE当前的曝光量值配置到AWB模块,用于室内外检测,此命令对应的参数与ot_isp_ae_result里面的int_time一样。 |
|
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_stitch_attr¶
【说明】
定义ISP拼接结构体。
【定义】
typedef struct {
td_bool stitch_enable;
td_bool main_pipe;
td_u8 stitch_pipe_num;
td_s8 stitch_bind_id[OT_ISP_MAX_STITCH_NUM];
} ot_isp_stitch_attr;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_isp_ae_register¶
【说明】
定义AE注册结构体。
【定义】
typedef struct {
ot_isp_ae_exp_func ae_exp_func;
} ot_isp_ae_register;
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
无
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, td_void *value);
td_s32 (*pfn_ae_exit)(td_s32 handle);
} ot_isp_ae_exp_func;
【成员】
【注意事项】
调用ss_mpi_isp_init时将调用pfn_ae_init回调函数,以初始化AE算法库。
调用ss_mpi_isp_run时将调用pfn_ae_run回调函数,以运行AE算法库,计算得到sensor的曝光时间和增益、ISP的数字增益。
设计思路中,算法库实现ctrl接口用以改变内部运行状态,ctrl接口提供一个参数传输命令,提供一个VOID类型的指针传输数据。ctrl接口一方面以回调函数指针的形式注册给ISP库,ISP控制单元隐式调用一些命令控制算法库内部运行状态,另一方面,以算法库的用户接口的形式,从而用户可以改变算法库内部运行状态。示例:
td_s32 ae_ctrl_cmd(td_s32 handle, td_u32 cmd, 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;
td_float fps;
ot_isp_bayer_format bayer;
ot_isp_stitch_attr stitch_attr;
td_s32 reserved;
} ot_isp_ae_param;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_people_roi¶
【说明】
定义ISP提供给AE的人形、人脸统计信息结构体。
【定义】
typedef struct {
td_bool enable;
td_bool available;
td_u8 luma ;
} ot_isp_people_roi;
【成员】
【注意事项】
当仅由人形模型可用时,会根据人形检测结果估算出一个人脸亮度,此亮度可靠性会低于人脸检测结果。
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;
【成员】
【注意事项】
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;
【成员】
人脸的坐标信息数组,最多支持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。
人脸快速收敛算法仅支持在近距离使用,要求人脸在图像中占比较大。如果人脸占比较小,可能画面导致闪烁。建议传入的人脸坐标占画面面积的10%以上。
【相关数据类型及接口】
ot_isp_people_type¶
【说明】
定义ISP提供给AE的人形、人脸统计信息枚举类型。
【定义】
typedef enum {
OT_ISP_FACE_INDEX = 0,
OT_ISP_PEOPLE_INDEX = 1,
OT_ISP_PEOPLE_BUTT
} ot_isp_people_type;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_tunnel_type¶
【说明】
定义ISP提供给AE的隧道统计信息枚举类型。
【定义】
typedef enum {
OT_ISP_TUNNEL_IN_INDEX = 0,
OT_ISP_TUNNEL_OUT_INDEX = 1,
OT_ISP_TUNNEL_BUTT
} ot_isp_tunnel_type;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_smart_info¶
【说明】
定义ISP提供给AE的智能信息结构体。
【定义】
typedef struct {
ot_isp_people_roi people_roi[OT_ISP_PEOPLE_CLASS_MAX];
ot_isp_tunnel_roi tunnel_roi[OT_ISP_TUNNEL_CLASS_MAX];
ot_isp_face_roi face_roi;
} ot_isp_smart_info;
【成员】
【注意事项】
people_roi仅支持人脸模型与人形模型检测结果,people_roi下标为0时为人脸检测结果,下标为1时为人形检测结果。
tunnel_roi当前支持隧道入口、出口模型检测结果,tunnel_roi下标为0时为隧道入口检测结果,下标为1时为隧道出口检测结果。
【相关数据类型及接口】
ot_isp_fe_ae_stat_1¶
【说明】
定义ISP FE中AE统计属性。
【定义】
typedef struct {
td_u32 pixel_count[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 pixel_weight[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 histogram_mem_array[OT_ISP_WDR_MAX_FRAME_NUM][OT_ISP_HIST_NUM];
td_u32 histogram_mem_array_ir[OT_ISP_HIST_NUM]; /* only support fe0 */
}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;
【成员】
【注意事项】
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的成员变量默认配置说明
说明:
表中说明仅在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_VI_MAX_PIPE_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN];
} ot_isp_ae_stat_attr;
【成员】
AE算法直方图调整使能,影响ae_be_sel/four_plane_mode/hist_offset_x/ hist_offset_y/hist_skip_x/hist_skip_y六个参数的配置。 hist_adjust使能时,以上六个参数以ot_isp_ae_result中的值为准配置芯片寄存器; |
|
直方图统计时水平方向采样点设置,0=every pixel; 1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel; 6+=every 9th pixel。 |
|
直方图统计时垂直方向采样点设置,0=every pixel; 1=every 2nd pixel; 2=every 3rd pixel; 3=every 4th pixel; 4=every 5th pixel; 5=every 8th pixel; 6+=every 9th pixel。 |
|
AE算法开方模式配置使能,影响hist_mode/ aver_mode/ max_gain_mode三个参数的配置。 mode_update不为0时,以上三个参数以ot_isp_ae_result中的值为准配置逻辑寄存器; |
|
AE算法权重表配置使能,影响weight_table的配置。
|
|
15x17个区间的AE权重表。取值范围:[0, 15]。OT_VI_MAX_PIPE_NUM详情请见《MPP 媒体处理软件 V5.0 开发参考》“视频输入”章节。 |
【注意事项】
weight_table支持拼接模式下在主路配置多路权重,在主路对所有支路对应Pipe下标的权重表进行赋值即可。在非拼接模式下,只有对应Pipe下标的权重表生效。
SDK提供的AE算法只支持1024段直方图,在使用AE算法情况下使能four_plane_mode会导致AE算法异常。
【相关数据类型及接口】
ot_isp_ae_result¶
【说明】
定义AE库返回给ISP的配置寄存器结构体。
【定义】
typedef struct {
td_u32 int_time[AE_INT_TIME_NUM];
td_u32 isp_dgain;
td_u32 again;
td_u32 dgain;
td_u32 iso;
td_u32 isp_dgain_sf;
td_u32 again_sf;
td_u32 dgain_sf;
td_u32 iso_sf;
td_u8 ae_run_interval;
td_bool piris_valid;
td_s32 piris_pos;
td_u32 piris_gain;
td_u32 sns_lhcg_exp_ratio;
ot_isp_fswdr_mode fswdr_mode;
td_u32 wdr_gain[OT_ISP_WDR_MAX_FRAME_NUM];
td_u32 hmax_times;
td_u32 vmax;
ot_isp_ae_stat_attr stat_attr;
ot_isp_dcf_update_info update_info;
} ot_isp_ae_result;
【成员】
【注意事项】
ISP基本算法模块将会根据AE计算得出的总增益值调节配置参数,例如锐化、去噪等。
weight_table支持拼接模式下在主路配置多路权重,在主路对所有支路对应Pipe下标的权重表进行赋值即可。在非拼接模式下,只有对应Pipe下标的权重表生效。
将曝光时间int_time由行转换成us时,可以通过cmos.c中的lines_per500ms进行,转换关系如下:
int_time[0] =(((td_u64)int_time_rst[0] * 1024 - offset) * 500000 / ae_sns_dft->lines_per500ms) >> 10
上式中int_time_rst[0]是以行数为单位的曝光时间,offset=offset* 1024,offset即为曝光时间的偏移量,详见ot_isp_ae_accuracy的描述。
为了保证计算曝光比的精度,int_time中曝光时间精度为1/16us,计算曝光时间时需要保证在us的基础上左移四位,否则曝光比计算可能会有误差,其他模块获取的曝光时间也会偏小。
客户在使用非AE算法时,参数int_time、isp_dgain、again、dgain、iso、hmax_times、vmax必须配置,否则会影响其他模块的联动控制,其余参数则可根据需要选择性配置。
【相关数据类型及接口】
ot_isp_awb_register¶
【说明】
定义AWB注册结构体。
【定义】
typedef struct {
ot_isp_awb_exp_func awb_exp_func;
} ot_isp_awb_register;
【成员】
【注意事项】
封装的目的是为了扩展。
【相关数据类型及接口】
ot_isp_awb_exp_func¶
【说明】
定义AWB回调函数结构体。
【定义】
typedef struct {
td_s32 (*pfn_awb_init)(td_s32 handle, const ot_isp_awb_param *awb_param, ot_isp_awb_result *awb_result);
td_s32 (*pfn_awb_run)(td_s32 handle,
const ot_isp_awb_info *awb_info,
ot_isp_awb_result *awb_result,
td_s32 reserved);
td_s32 (*pfn_awb_ctrl)(td_s32 handle, td_u32 cmd, td_void *value);
td_s32 (*pfn_awb_exit)(td_s32 handle);
} ot_isp_awb_exp_func;
【成员】
【注意事项】
调用ss_mpi_isp_init时将调用pfn_awb_init回调函数,以初始化AWB算法库。
pfn_awb_init回调函数的ot_isp_awb_result参数返回ISP启动时的初始AWB增益和初始色彩校正矩阵。
调用ss_mpi_isp_run时将调用pfn_awb_run回调函数,以运行AWB算法库,计算得到白平衡增益、色彩校正矩阵。
运行时ISP控制单元会隐式调用pfn_awb_ctrl回调函数,通知AWB算法库切换WDR和线性模式、设置ISO和曝光时间(曝光时间单位是us)。设置ISO的目的是为了实现ISO与饱和度的联动,增益大时色度噪声也会比较大,所以需要调节饱和度。设置曝光时间是为了辅助室内外判断。
当前Firmware定义的ctrl命令详细描述参见ot_isp_ctrl_cmd。
调用ss_mpi_isp_exit时将调用pfn_awb_exit回调函数,以销毁AWB算法库。
【相关数据类型及接口】
ot_isp_awb_param¶
【说明】
定义ISP提供给AWB的初始化参数结构体。
【定义】
typedef struct {
ot_sensor_id 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;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_awb_stat_1¶
【说明】
定义AWB统计信息结构体。
【定义】
typedef struct {
td_u16 metering_awb_avg_r;
td_u16 metering_awb_avg_g;
td_u16 metering_awb_avg_b;
td_u16 metering_awb_count_all;
} ot_isp_awb_stat_1;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_awb_stat_result¶
【说明】
定义AWB统计信息结构体。
【定义】
typedef struct {
td_u16 *zone_avg_r;
td_u16 *zone_avg_g;
td_u16 *zone_avg_b;
td_u16 *zone_count;
} ot_isp_awb_stat_result;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_awb_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;
【成员】
【注意事项】
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;
【成员】
Bayer域统计白点信息时,色差R/G的最小值,8bit精度,取值范围:[0x0, metering_cr_ref_max_awb],默认值128。 |
|
Bayer域统计白点信息时,色差B/G的最小值,8bit精度,取值范围:[0x0, metering_cb_ref_max_awb],默认值128。 |
【注意事项】
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] |
|
color_matrix[OT_ISP_CCM_MATRIX_SIZE] |
|
【注意事项】
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;
【成员】
【注意事项】
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;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_dcf_update_info¶
【说明】
定义DCF信息中ISP实时更新配置参数。
【定义】
typedef struct {
td_u32 iso_speed_ratings;
td_u32 exposure_time;
td_u32 exposure_bias_value;
td_u8 exposure_program;
td_u32 f_number;
td_u32 max_aperture_value;
td_u8 exposure_mode;
td_u8 white_balance;
} ot_isp_dcf_update_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_dcf_info¶
【说明】
定义DCF信息参数结构体。
【定义】
typedef struct {
ot_isp_dcf_const_info isp_dcf_const_info;
ot_isp_dcf_update_info isp_dcf_update_info;
} ot_isp_dcf_info;
【成员】
【注意事项】
无
【相关数据类型及接口】
ot_isp_pipe_diff_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;
【成员】
标定模式。配置为标定模式时,请使用PQ_Stitching_Tool标定工具得到的标定结果配置pipe_diff_param,该模式下配置gain值会影响BE统计信息。 |
|
自定义模式。如果选择自定义模式,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] |
|
gain[OT_ISP_BAYER_CHN_NUM] |
|
color_matrix[OT_ISP_CCM_MATRIX_SIZE] |
【注意事项】
仅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;
【成员】
【注意事项】
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是在帧结束读取当前帧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;
【成员】
【注意事项】
只支持在调用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;
【成员】
【注意事项】
只支持在调用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。
如需要从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方案。
【相关数据类型及接口】
无
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;
【成员】
离线模式下,ISP BE config buffer的数目。仅离线模式有效取值范围:[2, 20],SS928V100默认值为8 |
|
ISP统计信息更新频率。注意:在高帧率业务时,如120fps及其以上帧率,可通过参数stat_interval设置其ISP统计信息更新频率,从而可降低ISP的CPU占用率,同时降低性能消耗。 |
|
|
0:根据ot_isp_sns_regs_info结构体中u8IntPos变量的配置值,sensor寄存器在帧起始中断或帧结束中断配置; |
|
|
解决部分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中断。 |
|
【注意事项】
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;
【成员】
【注意事项】
不支持设置中断底半部;而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;
【成员】
【注意事项】
black_frame_num填入Sensor初始输出的坏帧数。因部分Sensor在启动时,会输出若干坏帧。启动时没有坏帧的Sensor则填入值为0。
打开AE快速收敛模式状态下,如果外部硬件上没有IR CUT和IR LED,建议将ir_mode_en设定为TD_FALSE。此时AE启动快速收敛模式,不会进行相应的IR快速收敛模式。
在打开IR CUT过程中,对Sensor会产生较大的亮度变化,此时AE算法内部会等待IR CUT切换完成。为了保证AE收敛的速度,加快快速收敛的速度,ir_cut_delay_time的值要设定合适,不能远大于实际IR CUT切换的时间。
【相关数据类型及接口】
无。
ot_isp_init_attr¶
【说明】
定义ISP第一次启动时AE/AWB的初始化参数结构体。
【定义】
typedef struct {
td_bool is_ir_mode;
td_u32 ae_comp;
td_u32 exp_time;
td_float int_time_accu;
td_u32 a_gain;
td_float again_accu;
td_u32 d_gain;
td_float dgain_accu;
td_u32 ispd_gain;
td_u32 exposure;
td_u32 init_iso;
td_u32 lines_per500ms;
td_u32 piris_fno;
td_u16 wb_r_gain;
td_u16 wb_g_gain;
td_u16 wb_b_gain;
td_u16 sample_r_gain;
td_u16 sample_b_gain;
td_u16 init_ccm[OT_ISP_CCM_MATRIX_SIZE];
td_bool ae_route_ex_valid;
td_bool quick_start_en;
ot_isp_ae_route ae_route;
ot_isp_ae_route_ex ae_route_ex;
ot_isp_ae_route ae_route_sf;
ot_isp_ae_route_ex ae_route_sf_ex;
td_u32 ae_stat_pos;
} ot_isp_init_attr;
【成员】
【注意事项】
在ISP启动前,设置初始AWB增益和CCM系数,可改善前后帧颜色的一致性。
在ISP启动前,设置初始的AE曝光路线,可以实现帧率改变后,AE算法能够将初始设置的AE route保留并自动生效。
【相关数据类型及接口】
ot_isp_sns_mirrorflip_type¶
【说明】
定义sensor mirror-flip枚举。
【定义】
typedef enum {
ISP_SNS_NORMAL = 0,
ISP_SNS_MIRROR = 1,
ISP_SNS_FLIP = 2,
ISP_SNS_MIRROR_FLIP = 3,
ISP_SNS_BUTT
} ot_isp_sns_mirrorflip_type;
【成员】
【注意事项】
无。
【相关数据类型及接口】
ot_isp_sns_blc_clamp¶
【说明】
定义sensor 黑电平矫正开关。
【定义】
typedef struct {
td_bool blc_clamp_en;
} ot_isp_sns_blc_clamp;
【成员】
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;
【成员】
【注意事项】
无。
【相关数据类型及接口】
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);
td_void (*pfn_standby)(ot_vi_pipe vi_pipe);
td_void (*pfn_restart)(ot_vi_pipe vi_pipe);
td_void (*pfn_mirror_flip)(ot_vi_pipe vi_pipe, ot_isp_sns_mirrorflip_type sns_mirror_flip);
td_void (*pfn_set_blc_clamp)(ot_vi_pipe vi_pipe, ot_isp_sns_blc_clamp sns_blc_clamp);
td_s32 (*pfn_write_reg)(ot_vi_pipe vi_pipe, td_u32 addr, td_u32 data);
td_s32 (*pfn_read_reg)(ot_vi_pipe vi_pipe, td_u32 addr);
td_s32 (*pfn_set_init)(ot_vi_pipe vi_pipe, ot_isp_init_attr *init_attr);
} ot_isp_sns_obj;
【成员】
【注意事项】
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;
【成员】
regs_info[ISP_SNS_SAVE_INFO_MAX] |
Sensor寄存器状态,regs_info[0]表示当前帧sensor寄存器状态,regs_info[1]表示上一帧sensor寄存器状态。 |
wdr_int_time[OT_ISP_WDR_MAX_FRAME_NUM] |
WDR模式下曝光时间,wdr_int_time[0]表示VS帧曝光时间,wdr_int_time[1]表示S帧曝光时间,wdr_int_time[2]表示M帧曝光时间,wdr_int_time[3]表示L帧曝光时间。 |
【注意事项】
ot_isp_sns_state是保存cmos.c中全局变量而新增的结构体,多路ISP同时加载sensor库,sensor状态相关的全局变量以vi_pipe进行区别。
默认AWB增益在ISP配置,用户不需要关注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;
【成员】
【注意事项】
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_switch_status¶
【说明】
定义设备的红外切换状态。
【定义】
typedef enum {
OT_ISP_IR_SWITCH_NONE = 0,
OT_ISP_IR_SWITCH_TO_NORMAL = 1,
OT_ISP_IR_SWITCH_TO_IR = 2,
OT_ISP_IR_SWITCH_BUTT
} ot_isp_ir_switch_status;
【成员】
【注意事项】
无
【相关数据类型及接口】
无
ot_isp_ir_auto_attr¶
【说明】
定义红外自动切换属性。
【定义】
typedef struct {
td_bool 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;
【成员】
红外状态下的B/G最大值。实际图像的B/G大于此参数时,系统需要切换到普通状态。4.8格式。取值范围:[0, 0xFFF] |
|
【注意事项】
normal_to_ir_iso_threshold/ir_to_normal_iso_threshold/rg_max/rg_min/bg_max/bg_min的配置值和sensor/镜头/滤光片/红外灯相关。
rg_max/rg_min/bg_max/bg_min的配置值可参考mpp/sample/ir_auto/sample_ir_auto.c中标定流程生成。
【相关数据类型及接口】
无



















