前言

概述

本文为使用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支持用户使用多种开发模式:

  1. 用户使用SDK的3A算法库。这时用户需要根据ISP基础算法库和3A算法库给出的sensor适配接口去适配不同的sensor。每款sensor对应一个文件夹,文件夹中包含两个主要文件:

    • sensor_cmos.c

      该文件中主要实现ISP需要的回调函数,这些回调函数中包含了sensor的适配算法,不同的sensor可能有所不同。

    • sensor_ctrl.c

      sensor的底层控制驱动,主要实现sensor的读写和初始化动作。用户可以根据sensor的datasheet进行这两个文件的开发,必要的时候可以向sensor厂家寻求支持。

  2. 用户根据ISP库提供的3A算法注册接口,实现自己的3A算法库开发。这时用户需要根据ISP基础算法库和用户的3A算法库给出的sensor适配接口去适配不同的sensor。

  3. 用户部分使用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_exit

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_exit

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_init

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类型。

  • 该接口不支持拼接模式。

【举例】

  1. 上一次发送的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;
}
  1. 使用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_init

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

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_pub_attr

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

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_fmw_state

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

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_sns_slave_attr

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

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_set_module_ctrl

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

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_sensor_reg_callback

ss_mpi_isp_ae_lib_reg_callback

【描述】

ISP提供的AE库注册的回调接口。

【语法】

td_s32 ss_mpi_isp_ae_lib_reg_callback(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *ae_lib, const ot_isp_ae_register *ae_register);

【参数】

参数名称

描述

输入/输出

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

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_ae_lib_reg_callback

ss_mpi_isp_awb_lib_reg_callback

【描述】

ISP提供的AWB库注册的回调接口。

【语法】

td_s32 ss_mpi_isp_awb_lib_reg_callback(ot_vi_pipe vi_pipe, 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

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_awb_lib_reg_callback

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

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_bind_attr

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

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_dcf_info

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

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_pipe_differ_attr

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

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_ctrl_param

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

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_mod_param

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

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_set_smart_info

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

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_set_be_frame_attr

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

【注意】

【举例】

【相关主题】

ss_mpi_isp_mem_share

【描述】

将ISP相关mmz buffer共享给特定的进程id。

【语法】

td_s32 ss_mpi_isp_mem_share(ot_vi_pipe vi_pipe, td_s32 pid)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

pid

需要共享的进程id。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码

【需求】

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

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

【注意】

  • 只有分配mmz buffer的进程能注册共享,其它进程注册共享返回失败。

  • 分配mmz buffer的进程不需要被共享,如果pid参数是分配mmz buffer的进程id,接口返回失败。

  • 如果mmz buffer已经是全进程共享的状态,接口返回失败。

  • 1个mmz buffer最多可以允许5个进程id共享(包含分配该mmz buffer的进程id)。

  • 重复共享给同一个进程id,接口返回成功。

  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

  • 需要在ss_mpi_isp_init之后调用,并且其他非分配mmz buffer的进程在调用相关接口前调用,否则会导致非分配mmz buffer的进程调用相关接口时mmap失败,相关接口只要涉及到读写ISP内核态分配的mmz buffer,则需要进行共享,例如访问外部寄存器、读取统计信息和获取dcf info,debug接口等。

  • ss_mpi_isp_set_debug接口访问时也需要进行共享,并且需要互相共享,共享后才允许将debug信息写出到相应进程分配的mmz buffer中。例如,进程B调用ss_mpi_isp_set_debug接口将其分配的MMZ提供给ISP主进程A写出debug信息步骤:

    1. ISP主进程A调用ss_mpi_isp_mem_share/ss_mpi_isp_mem_share_all, 允许ISP主进程写出debug信息到进程B;

    2. 进程B调用ss_mpi_sys_mem_share/ss_mpi_sys_mem_share_all,将进程B分配的debug mmz访问权限授予ISP主进程A;

    3. 进程B调用ss_mpi_isp_set_debug接口将debug mmz信息传递给ISP主进程A。

【举例】

【相关主题】

ss_mpi_isp_mem_unshare

【描述】

解除ISP相关mmz buffer对进程id的共享。

【语法】

td_s32 ss_mpi_isp_mem_unshare(ot_vi_pipe vi_pipe, td_s32 pid)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

pid

需要取消共享的进程id。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

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

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

【注意】

  • 分配mmz buffer的进程可以解除对非分配mmz buffer的进程id的共享。

  • 被共享的进程只能解除对本进程id的共享。

  • 如果mmz buffer已经是全进程共享的状态,接口返回失败。

  • 重复解除对进程id的共享,接口返回失败。

  • 与ss_mpi_isp_mem_share接口配对使用。

  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

【相关主题】

ss_mpi_isp_mem_share_all

【描述】

共享ISP相关mmz buffer以不限进程id的方式共享给所有进程。

【语法】

td_s32 ss_mpi_isp_mem_share_all(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

【注意】

  • 只有分配mmz buffer的进程能注册共享,其它进程注册共享返回失败。

  • 重复共享给所有进程,接口返回成功。

  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

  • 需要在ss_mpi_isp_init之后调用,并且其他非分配mmz buffer的进程在调用相关接口前调用,否则会导致非分配mmz buffer的进程调用相关接口时mmap失败,相关接口只要涉及到读写ISP内核态分配的mmz buffer,则需要进行共享,例如访问外部寄存器、读取统计信息和获取dcf info,debug接口等。

  • ss_mpi_isp_set_debug接口访问时也需要进行共享,并且需要互相共享,共享后才允许将debug信息写出到相应进程分配的mmz buffer中。例如,进程B调用ss_mpi_isp_set_debug接口将其分配的MMZ提供给ISP主进程A写出debug信息步骤:

    1. ISP主进程A调用ss_mpi_isp_mem_share/ss_mpi_isp_mem_share_all, 允许ISP主进程A写出debug信息到进程B;

    2. 进程B调用ss_mpi_sys_mem_share/ss_mpi_sys_mem_share_all,将进程B分配的debug mmz访问权限授予ISP主进程A;

    3. 进程B调用ss_mpi_isp_set_debug接口将debug mmz信息传递给ISP主进程A。

【举例】

【相关主题】

ss_mpi_isp_mem_unshare_all

【描述】

取消共享ISP相关mmz buffer对所有进程的共享。

【语法】

td_s32 ss_mpi_isp_mem_unshare_all(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

【注意】

  • 只有分配mmz buffer的进程可以解除对所有进程的共享。

  • 重复解除对所有进程的共享,接口返回成功。

  • 与ss_mpi_isp_mem_share_all接口配对使用。

  • 调用此接口解除对所有进程共享的状态之后,仍然保留原有对进程id的共享状态。

  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

【相关主题】

数据类型

本文档中变量,如未明确指定取值范围,则默认是数据类型对应的取值范围。例如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_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_result

  • ot_isp_ae_sensor_default

  • ot_isp_fusion_attr

  • ot_isp_nr_wdr_attr

  • ot_isp_black_level_manual_attr

  • ot_isp_inner_state_info

  • ot_isp_ae_stats

  • ot_isp_ae_stitch_stats

  • ot_isp_fe_focus_stats

  • ot_isp_sns_state

OT_ISP_EXP_RATIO_NUM

【说明】

定义WDR曝光比的数目。

【定义】

#define OT_ISP_EXP_RATIO_NUM                             3

【注意事项】

无。

【相关数据类型及接口】

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_3a_alg_lib

OT_ISP_MAX_SNS_REGS

【说明】

曝光结果写到sensor时需要配置的寄存器个数的最大值。

【定义】

#define OT_ISP_MAX_SNS_REGS             32

【注意事项】

无。

【相关数据类型及接口】

ot_isp_sns_regs_info

OT_ISP_PEOPLE_CLASS_MAX

【说明】

定义人形、人脸检测类型的最大数目。

【定义】

#define OT_ISP_PEOPLE_CLASS_MAX   2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_smart_info

OT_ISP_TUNNEL_CLASS_MAX

【说明】

定义隧道检测类型的最大数目。

【定义】

#define OT_ISP_TUNNEL_CLASS_MAX   2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_smart_info

OT_ISP_AE_ZONE_ROW

【说明】

AE水平方向的分区间数目。

【定义】

#define OT_ISP_AE_ZONE_ROW              15

【注意事项】

无。

【相关数据类型及接口】

  • ot_isp_ae_stat_attr

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

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

OT_BAYER_CALIBRATION_PARA_NUM_NEW

【说明】

定义标定噪声模型参数的最大个数。

【定义】

#define OT_BAYER_CALIBRATION_PARA_NUM_NEW  16

【注意事项】

无。

【相关数据类型及接口】

ot_isp_noise_calibration

OT_ISP_CCM_MATRIX_SIZE

【说明】

CCM矩阵参数个数。

【定义】

#define OT_ISP_CCM_MATRIX_SIZE        9

【注意事项】

无。

【相关数据类型及接口】

OT_DCF_DRSCRIPTION_LENGTH

【说明】

定义DCF描述信息的深度。

【定义】

#define OT_DCF_DRSCRIPTION_LENGTH   32

【注意事项】

无。

【相关数据类型及接口】

ot_isp_dcf_const_info

ISP_SNS_SAVE_INFO_MAX

【说明】

定义记录sensor info的最大帧数。

【定义】

#define ISP_SNS_SAVE_INFO_MAX   2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_sns_state

OT_ISP_LSC_GRID_COL

【说明】

Mesh Shading在x方向上划分的分块所需点的数量。

【定义】

#define OT_ISP_LSC_GRID_COL                       33

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_LSC_GRID_ROW

【说明】

Mesh Shading在y方向上划分的分块所需点的数量。

【定义】

#define OT_ISP_LSC_GRID_ROW                       33

【注意事项】

无。

【相关数据类型及接口】

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_ACS_LIGHT_NUM

【说明】

ACS划分的光源数量。

【定义】

#define OT_ISP_ACS_LIGHT_NUM              32

【注意事项】

无。

【相关数据类型及接口】

ot_isp_acs_calib_param

OT_ISP_ACS_CHN_NUM

【说明】

表示ACS标定的R和B通道分量。

【定义】

#define OT_ISP_ACS_CHN_NUM              2

【注意事项】

无。

【相关数据类型及接口】

ot_isp_acs_calib_param

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

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极性配置。

  • 0表示正极;
  • 1表示负极。

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~图3所示,说明了同步信号发生模块配置参数的含义。

图 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

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_dump_frame_pos

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

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_sensor_exp_func

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_cmos_default

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_cmos_acs

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_cmos_acs

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

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]

噪声标定表。

【注意事项】

【相关数据类型及接口】

ss_mpi_isp_get_noise_calibration

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_default

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_default

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_default

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_default

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_default

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

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_sensor_exp_func

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_exp_func

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

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_sensor_exp_func

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寄存器的配置生效的位置。

  • 设置为0x0时表示寄存器在超短帧起始中断配置生效,设置为0x1时表示寄存器在超短帧结束中断配置生效。
  • 设置为0x10时表示寄存器在短帧起始中断配置生效,设置为0x11时表示寄存器在短帧结束中断配置生效。
  • 设置为0x20时表示寄存器在中帧起始中断配置生效,设置为0x21时表示寄存器在中帧结束中断配置生效。
  • 设置为0x30时表示寄存器在长帧起始中断配置生效,设置为0x31时表示寄存器在长帧结束中断配置生效。

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寄存器的配置生效的位置。

  • 设置为0x0时表示寄存器在帧起始中断配置生效,设置为1时表示寄存器在AF中断配置生效。
  • 设置为0x10时表示寄存器在短帧起始中断配置生效,设置为0x11时表示寄存器在短帧结束中断配置生效。
  • 设置为0x20时表示寄存器在中帧起始中断配置生效,设置为0x21时表示寄存器在中帧结束中断配置生效。
  • 设置为0x30时表示寄存器在长帧起始中断配置生效,设置为0x31时表示寄存器在长帧结束中断配置生效。

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寄存器数据配置完成标志。

  • TD_TRUE:完成配置。
  • TD_FALSE:还未配置。

【注意事项】

【相关数据类型及接口】

ot_isp_sensor_exp_func

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_register

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_ae_exp_func

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_ae_info

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_ae_info

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_ae_info

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_ae_info

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_ae_info

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_ae_info

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_exp_func

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的配置。

  • wight_table_update不为0时,权重表以ot_isp_ae_result中的值为准配置芯片寄存器;
  • wight_table_update为0时,权重表以外部寄存器的值(MPI配置)为准配置芯片寄存器。

weight_table

15x17个区间的AE权重表。取值范围:[0, 15]

【注意事项】

  • weight_table支持拼接模式下在主路配置多路权重,在主路对所有支路对应Pipe下标的权重表进行赋值即可。在非拼接模式下,只有对应Pipe下标的权重表生效。

  • SDK提供的AE算法只支持1024段直方图,在使用AE算法情况下使能four_plane_mode会导致AE算法异常。

【相关数据类型及接口】

ot_isp_ae_result

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是否有效的标志。

  • 取值为TD_TRUE时在内核态回调Piris驱动配置步进电机的位置。
  • 取值为TD_FALSE时不回调。
  • 使用AE算法和Piris驱动对接Piris镜头时,该值须置为TD_TRUE,对接非Piris镜头时该值须置为TD_FALSE。

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_ae_exp_func

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

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_register

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_exp_func

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_info

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

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_exp_func

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_exp_func

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_attr

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

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_ctrl_param

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算法模块

【注意事项】

  1. 只支持在调用isp_mem_init前修改,不支持isp_mem_init后动态修改。

  2. 只支持在物理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帧结束中断唤醒。

【注意事项】

  1. 只支持在调用ss_mpi_isp_mem_init前修改,不支持ss_mpi_isp_mem_init动态修改。

  2. ot_isp_run_wakeup_select默认配置为OT_ISP_RUN_WAKEUP_FE_START,可匹配ss_mpi_isp_run接口使用,推荐调用流程如图1

    图 1 接口调用流程(1)

  3. 如需要从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。

  • interrupt_bottom_half =0:ISP内核态处理(读统计信息和配置sensor和ISP同步寄存器)在中断服务程序中完成;
  • interrupt_bottom_half =1:ISP内核态处理(读统计信息和配置sensor和ISP同步寄存器)在中断下半部完成。

quick_start

表示ISP是否采用快速启动,默认值为0。

  • quick_start=0:ISP初始化时配置sensor序列
  • quick_start=1:ISP初始化时不配置sensor序列。SS928V100不支持。

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_obj

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_obj

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

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中标定流程生成。

【相关数据类型及接口】