跳转至

ISP 开发参考(1~5)

前言

概述

本文为使用ISP开发的程序员而写,目的是为您在开发过程中遇到的问题提供解决办法和帮助。

说明:

  • 本文如无特殊说明,Hi3519DV500与Hi3516DV500内容一致,Hi3516CV608与Hi3516CV610内容一致。
  • 根据功能不同,将Hi3516CV610分为10B/00S/20S/00G/20G型号,正文描述以Hi3516CV610-20S为例,如无特殊说明,则内容一致。
  • 本文描述中,cmos_ex.h在Hi3516CV610芯片上对应文件为cmos_param.h。
  • Hi3516CV608不支持WDR。

产品版本

与本文档相对应的产品版本如下。

产品名称

产品版本

Hi3516D

V500

Hi3519D

V500

Hi3516C

V610

Hi3516C

V608

读者对象

本文档(本指南)主要适用于以下工程师:

  • 技术支持工程师
  • 软件开发工程师

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

修订记录

修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。

版本

日期

修改描述

00B01

2026-06-30

第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步进聚焦或旋转光圈等。

AE/AWB算法库和sensor库不能调用ISP其他接口,否则可能会出现调用接口卡住问题。

开发模式

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使用libss_mpi_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包含ISP库、3A库、sensor库、各算法库(包含dehaze库、ldci库、drc库、bnr库、acs库等)。Firmware中的drv生成的驱动程序向用户态上报ISP中断,并以该中断驱动Firmware的ISP控制单元运转。ISP控制单元从驱动程序中获取统计信息,并调度基础算法单元和3A算法库,最后通过驱动程序配置寄存器。

Src文件夹中包含ISP控制单元和基础算法单元,编译后生成libss_mpi_isp.a、libot_mpi_isp.a,即ISP库。3a文件夹中包含AE/AWB算法库,用户也可以基于统一的接口界面开发自己的3a算法。Sensor文件夹中包含了各个sensor的驱动程序,该部分代码开源。dehaze文件对应去雾算法程序,ldci文件对应局域自动对比度增强算法程序,drc文件夹对应动态范围压缩算法程序,bnr文件对应bayer域去噪算法程序,另外还有acs、ir_auto、extend_stats、calcficker等算法程序,该算法库部分代码不开源。

系统控制

功能概述

系统控制部分包含了ISP公共属性配置,初始化ISP Firmware、运行ISP firmware、退出ISP firmware,设置ISP各模块等功能。

API参考

本文档中接口,如无特殊说明,支持多进程。

ss_mpi_isp_mem_init

【描述】

初始化ISP外部寄存器。

【语法】

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_mpi_isp.a、libot_mpi_isp.a

【注意】

【举例】

无

【相关主题】

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_mpi_isp.a、libot_mpi_isp.a

【注意】

【举例】

无

【相关主题】

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_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 运行前需要确保sensor已经初始化,并且向ISP注册了回调函数。
  • 运行前需要确保已调用ss_mpi_isp_init初始化ISP。
  • 不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档)、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit接口在同一个进程调用。
  • 该接口是阻塞接口,建议用户采用实时线程处理。
  • wdr模式下只支持在主pipe调用此接口,非主pipe调用将返回失败。

【举例】

无

【相关主题】

ss_mpi_isp_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_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 运行前需要确保sensor已经初始化,并且向ISP注册了回调函数。
  • 运行前需要确保已调用ss_mpi_isp_init初始化ISP。
  • 不支持多进程,必须要与sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档)、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit接口在同一个进程调用。
  • 该接口是阻塞接口,建议用户采用实时线程处理。
  • 该接口工作在离线时用户给BE灌RAW场景。在使用时,要等待上一次发送的RAW数据处理完成之后才能进行下一次的ss_mpi_isp_run_once接口调用+发送RAW数据(可通过在ss_mpi_vi_send_pipe_raw后调用接口ss_mpi_vi_get_chn_frame实现,接口具体信息请参见《MPP 媒体处理软件Vx.y 开发参考》的VI章节),具体参考【举例】中的伪代码。
  • 使用ss_mpi_isp_run_once模式时处理视频流时,支持模式切换及分辨率切换,切换流程与使用ss_mpi_isp_run处理视频流类似:即切换过程中ISP模块无需退出,VI模块需要销毁重建。区别在于:使用ss_mpi_isp_run_once处理视频流时需要用户创建一个线程,参考示例中伪代码。在追求性能效果的视频处理场景,更推荐使用runbe方案,请参考ot_isp_run_wakeup_select章节,runonce更推荐使用在抓拍场景。
  • ss_mpi_isp_run和ss_mpi_isp_run_once对同一个vi_pipe不能同时使用。
  • 该接口不支持帧合成wdr模式。
  • 该接口配置sensor时间为调用该接口后才配置sensor。与ss_mpi_isp_run接口在帧起始或者帧结束配置sensor 有差异。
  • 使用该接口的pipe,使用ss_mpi_isp_get_vd_time_out 接口时,ot_isp_vd_type 变量仅支持OT_ISP_VD_BE_END类型。runonce场景下,建议get_vd_timeout接口和runonce送帧在同一个线程,等待一帧处理完成再继续送帧。
  • 开启vi distribute group功能时,不支持isp runonce。

【举例】

  1. 上一次发送的raw数据处理完,才能继续调用ss_mpi_isp_run_once:

    ……
        ret = ss_mpi_isp_run_once(vi_pipe);
        if (ret != TD_SUCCESS) {
            printf("ss_mpi_isp_run_once failed with %#x\n", ret);
            return ret;
        }
    
        ret = ss_mpi_vi_send_pipe_raw(vi_pipe, frame_info, frame_num, milli_sec);
        if (ret != TD_SUCCESS) {
            printf("ss_mpi_vi_send_pipe_raw failed with %#x\n", ret);
            return ret;
        }
    
        ret = ss_mpi_vi_get_chn_frame(vi_pipe, vi_chn, &yuv_frame_info, milli_sec);
        if (ret != TD_SUCCESS) {
            printf("ss_mpi_vi_get_chn_frame failed with %#x\n", ret);
            return ret;
        }
        ret = ss_mpi_isp_get_vd_time_out(vi_pipe, SS_ISP_VD_BE_END, milli_sec_vd_timeout);
        if (ret != TD_SUCCESS) {
            printf("get vd timeout, ret: 0x%x.\n", ret);
        }
        ret = ss_mpi_vi_release_chn_frame(vi_pipe, vi_chn, &yuv_frame_info);
        if (ret != TD_SUCCESS) {
            printf("ss_mpi_vi_release_chn_frame failed with %#x\n", ret);
            return ret;
    }
    
  2. 使用ss_mpi_isp_run_once处理视频流时需要用户创建一个线程:

    …
    sns_type = HY_S0603_MIPI_8M_30FPS_12BIT;
    g_wdr_mode = HI_WDR_MODE_2To1_LINE;
    sample_comm_vi_get_default_vi_cfg(sns_type, &vi_cfg);
    ret = pthread_create(&thread, NULL, sample_vi_send_wdr_frame_proc, (td_void *)&send_raw_thread_info);
    if (ret != TD_SUCCESS) {
        pthread_detach(thread);
    }
    sample_comm_vi_swith_mode_stop_vi(&vi_route_info);
    g_runonce_swtich = 1;
    sns_type = HY_S0603_MIPI_8M_30FPS_12BIT;
    g_wdr_mode = HI_WDR_MODE_NONE;
    sample_comm_vi_get_default_vi_cfg(sns_type, &vi_cfg);
    sample_comm_vi_swith_mode_start_vi(&vi_route_info);
    g_runonce_swtich = 0;
    …
    
    static void *sample_vi_send_wdr_frame_proc(void *args)
    {
        …
        sample_get_pipe_num(&pipe_num, g_wdr_mode);
        for (i = 0; i < pipe_num; i++) {
            ret = ss_mpi_vi_set_pipe_frame_dump_attr(vi_pipe[i], &dump_attr);
            if (ret != HI_SUCCESS) {
                printf("set pipe[%d] dump attr failed\n", vi_pipe[i]);
                return HI_NULL;
            }
        }
    
        ret = ss_mpi_vi_set_pipe_frame_source(master_pipe, HI_VI_PIPE_FRAME_SOURCE_USER);
        if (ret != TD_SUCCESS) {
            printf("set pipe[%d] user fraem source failed\n", master_pipe);
            return HI_NULL;
        }
    
        while (1) {
            td_s32 millsec = 100;
            if (g_runonce_switch == 1) {
                ss_mpi_isp_run_once(master_pipe);
            }
    
        for (i = 0; i < pipe_num; i++) {
            ret = ss_mpi_vi_get_pipe_frame(vi_pipe[i], &dump_frame_info[i], millsec);
            if (ret != TD_SUCCESS) {
                printf("get pipe[%d] frame failed\n", vi_pipe[i]);
                goto release;
            }
        }
    
        ret = sample_vi_send_pipe_wdr_frame(master_pipe, dump_frame_info, pipe_num, millsec);
        if (ret != TD_SUCCESS) {
            printf("pipe[%d] send frame failed\n", master_pipe);
        }
    
        release:
        for (i = i - 1; i >= 0; i--) {
            (hi_void)ss_mpi_vi_release_pipe_frame(vi_pipe[i], &dump_frame_info[i]);
            }
        }
        return HI_NULL;
    }
    

【相关主题】

ss_mpi_isp_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_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 调用ss_mpi_isp_init和ss_mpi_isp_run之后,再调用本接口退出ISP firmware。
  • 不支持多进程,必须与sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档)、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_run接口同在一个进程调用。
  • 支持重复调用本接口。
  • 在拼接模式时,必须先退出主pipe,后退出其他pipe。
  • 不支持相同vi_pipe时,多线程执行ISP创建和销毁(多线程同时调用sensor_register_callback、ss_mpi_ae_register、ss_mpi_thermo_register(请见《Thermo开发参考》文档、ss_mpi_awb_register、ss_mpi_isp_mem_init、ss_mpi_isp_init、ss_mpi_isp_exit)
  • 推荐调用ss_mpi_isp_init之后,再调用本接口。
  • 多进程调用ISP接口场景,当主进程调用本接口退出当前pipe ISP firmware后,当前pipe ISP资源已经销毁,其他进程不能再调用ISP的接口去操作当前pipe,否则可能会访问非法资源导致未知错误。

【举例】

无

【相关主题】

ss_mpi_isp_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_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 图像属性即对应的sensor的采集属性。
  • ISP启动时,需要确保已调用ss_mpi_isp_mem_init初始化ISP外部寄存器。
  • ISP支持运行过程中动态裁剪图像的起始位置。
  • 调用本接口后ISP内的处理流程:

    • ISP firmware判断图像WDR模式、分辨率、帧率是否变化,若都不变则直接返回;否则,ISP firmware会调用sensor cmos.c里面的cmos_set_wdr_mode、cmos_set_image_mode函数改变sensor模式;
    • 若sensor模式不改变(返回值-2),判断ISP的裁剪宽高是否变化,若有变化,ISP firmware切换分辨率,并调用sensor_init函数重新配置sensor;
    • 若sensor模式改变(返回值为0),则ISP firmware会调用sensor_init函数重新配置sensor;
    • ISP firmware将帧率信息传给AE库,并决定是否更改帧率。
  • 若调用本接口实现动态分辨率和帧率切换时sensor模式发生了改变,请参照sample提供的切换流程操作(先停掉Vi设备,再创建Vi设备,然后设置ss_mpi_isp_set_pub_attr进行切换)。当前系统不支持在VI并行模式下切换帧率。另外,动态分辨率和帧率切换时,切换的分辨率和帧率必须有一项要不同(即不能切换到自己本身,sensor序列需要发生变化),否则,sensor可能不会重新初始化而导致异常,模式切换时也不能切换到自己本身。对于ISP输入同样分辨率和帧率但需要采用不同初始化序列的情况,可以利用不同的sns_mode来实现模式切换。

  • 拼接通路切换时,基本和非拼接通路切换一致,但是在将所有涉及pipe的vi设备都停止之后,需要再重新设置vi 拼接属性参数,调用接口注意事项请见《MPP媒体处理软件Vx.y开发参考》中“视频输入”的ss_mpi_vi_set_stitch_grp_attr接口。之后再重新创建所有涉及pipe的Vi设备,通过ss_mpi_isp_query_inner_state_info接口等待所有pipe切换完成,(拼接需要等待所有pipe切换完成才可以start vi pipe和enable vi chn,非拼只需要等待主pipe切换完成。模式切换时,需要等待拼接主pipe切换完成后再进行其他拼接pipe的切换)。并且设置ss_mpi_isp_set_pub_attr进行切换,具体可以参照sample提供的非拼接通路的切换流程操作,拼接切换需要在sample的基础上增加适配重新设置VI拼接属性参数和等待所有pipe切换完成操作。
  • 使用ISP提供的裁剪功能时,需要注意:

    动态裁剪图像的宽高时会重新初始化sensor,切换流程参照sample提供的切换流程(先停掉Vi设备,再创建Vi设备,然后设置ss_mpi_isp_set_pub_attr进行切换)。在线WDR模式下不支持ISP的裁剪功能。

    当输入为YUV时,裁剪不生效。

  • 用户可以更改sensor的xxx_cmos.c里面的cmos_set_image_mode函数调整sensor模式切换的顺序。如只提供了5M30fps和1080P60fps初始化序列的sensor,若要运行1080P30fps,可以从5M30fps裁剪得到,也可以从1080P60fps降帧得到,修改cmos_set_image_mode函数实现即可。

  • 通过本接口配置超过sensor帧率范围的帧率时,该帧率值能配置到ISP中,但是sensor的xxx_cmos.c检测该帧率值超出范围而不做改变帧率的动作。此时应用层如果做模式切换(如:线性模式切WDR模式),sensor重新初始化,并从ISP中读取帧率,由于ISP中存的是前一个模式配置的超出范围的帧率,sensor重新配置帧率失败,会造成切换后的模式出现帧率异常,画面异常的现象。所以使用该接口配置帧率时不要配置超过sensor帧率范围的帧率值。
  • 该接口不支持的情况:在不同的工作模式下从WDR切换到线性或在不同的工作模式下的分辨率或帧率的切换(例如不支持从OT_VI_ONLINE_VPSS_OFFLINE的WDR模式切换到OT_VI_PARALLEL_VPSS_OFFLINE 线性模式)。
  • 切换线性模式和帧WDR模式时,同样会判断cmos_set_image_mode的返回值,因此线性模式和帧WDR模式应该采用不同的image_mode,才能保证切换成功。
  • 物理pipe设置pub属性时,isp pub属性size必须小于等于VI dev_attr设置的size, 当VI pipe开启pre_crop裁剪时,需要小于等于VI pipe pre_crop裁剪之后的size。
  • 物理pipe接sensor出图时,设置pub属性,isp pub属性宽高必须等于VI的pipe_attr 设置的宽高。
  • vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM时,不建议使用拼接场景,原因如下:

    • 虚拟pipe不支持配置sensor, 不建议使用拼接场景,不保证拼接效果,需自行保证拼接触发时机,自行保证拼接效果。
    • 送帧时机不固定, 虚拟pipe依赖送帧时机生成同步参数,做多路同步,拼接效果可能存在问题。
    • 默认海思AE使用FE的统计信息,vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM只有be统计信息,无法控制曝光值。
    • OT_ISP_MAX_FE_PIPE_NUM的定义请见OT_ISP_MAX_PIPE_NUM章节。
  • 模式切换时,CA/Auto color shading/CSC/FPN/Local BLC/Mesh shading/Radial Crop/BayerSharpen/热感等算法在cmos中无linear和wdr的2套参数,并且在模式切换时也不会自动切不同参数。如果模式切换的同时,需要进行参数切换,则需要在切换完成之后重新调度该算法外部接口进行配置。

  • 开启VI PIPE离线卷绕功能,并且开启sensor从模式省内存功能时,从模式所有pipe调用接口修改帧率的操作要连续,中间时间间隔尽量少,而且所有pipe都要设置相同的帧率。
  • 模式切换时,为保证切换前后亮度不发生大幅度变化,可以在切换时获取上一模式自动曝光的曝光结果,在切换到下一模式时作为初始曝光使用。
  • mipi switch场景,要等待所有pipe通路起来稳定出帧后,再调用此接口动态设置帧率,否则会设置帧率失败。

【举例】

无

【相关主题】

ss_mpi_isp_get_pub_attr

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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_isp.a

【注意】

当state值为OT_ISP_FMW_STATE_FREEZE后,ISP Firmware的3A算法,Sharpen算法,DRC算法,Crosstalk removal算法,NR算法,去雾算法,去马赛克算法,黑电平算法,去FPN算法,ACM算法,WDR算法等会冻结,Sensor的寄存器也会停止配置,并保持冻结前的值。当state值为OT_ISP_FMW_STATE_RUN后,ISP firmware正常运行。

【举例】

无

【相关主题】

ss_mpi_isp_get_fmw_state

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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 从模式sensor需要其提供行同步XHS和场同步信号XVS,在这两个信号的控制下进行曝光与数据读出,这个接口主要配置同步信号发生模块,使其输出sensor要求的行场时序。此接口一般在sensor库里调用。
  • 支持从模式sensor设置不同的时序配置,当前在xxx_cmos.c/xxx_sensor_ctl.c文件中设定当前sensor的时序配置。
  • 从信号有两组绑定关系,首先pipe和vsync之间有绑定关系,其次vsync内部还可选择不同的信号源slave,即不同pipe可以选择不同的从信号设备vsync,不同的从信号设备vsync又可以选择不同的信号源slave。
  • 通常拼接模式,如果是两路拼接,最好选择同一个从信号设备,如果大于2路拼接,那么不同sensor必然会连接到不同的从信号设备上,这时不同的从信号设备要选择相同的信号源,这样才能保证不同sensor之间的同步。
  • 通常如果多路从sensor,不使用拼接模式而独立操作,那么这时不同的sensor要连接到不同的从信号设备上,并且从信号设备还要选择不同的信号源。

【举例】

4路 slave sensor拼接模式时,使用pipe的id分别是0/2/4/6,他们分别绑定在从信号vsync0、vsync0、vsync1、vsync1,因为是拼接模式,所以他们要选择相同的从信号源slave,假设是slave0,那么驱动中设置可以用如下方式进行赋值:

td_s32 g_SlaveBindDev[ISP_MAX_PIPE_NUM] = {0, x, 0, x, 1, x, 1, x};
td_u32 g_SlaveSensorModeTime[ISP_MAX_PIPE_NUM] = {0, x, 0, x, 0, x, 0, x};

4路 slave sensor非拼接模式时,使用pipe的id分别是0/2/4/6,他们需要分别绑定不同的从信号vsync0、vsync1、vsync2、vsync3,因为是非拼接模式,所以他们要选择不同的从信号源slave0、slave1、slave2、slave3,那么驱动中设置可以用如下方式进行赋值:

td_s32 g_SlaveBindDev[ISP_MAX_PIPE_NUM] = {0, x, 1, x, 2, x, 3, x};
td_u32 g_SlaveSensorModeTime[ISP_MAX_PIPE_NUM] = {0, x, 1, x, 2, x, 3, x};

这里x代表满足接口的任意值,无需关注。

【相关主题】

ss_mpi_isp_get_sns_slave_attr

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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 该接口表示获取ISP产生中断的相关信息,包括是否产生了中断,中断产生时的当前ISP帧信息,中断是采用的帧开始中断。
  • milli_sec参数的单位是毫秒,指超时时间。即在milli_sec毫秒内,如果获取不到ISP中断,则函数返回。当milli_sec设为0时,表示阻塞模式,程序一直等待,直到获取到ISP中断才返回。
  • 非阻塞模式获取中断信息超时,接口返回失败。
  • 等待时被信号处理打断,未等到逻辑上报中断而提前返回,接口返回失败。
  • 使用OT_ISP_VD_FE_END方式获取ISP中断信息并读取统计信息。在极端情况下(cpu占用率高等),会出现读取统计信息不及时情况。建议使用OT_ISP_VD_FE_START方式获取ISP中断来读取统计信息。
  • N个进程同时调用该接口获取同样的isp_vd_type时,每个进程获取到的中断信息为实际中断信息的(1/N),比如在灌raw场景中会使用OT_ISP_VD_FE_START的方式来发送raw数据,如果此时其他进程再使用OT_ISP_VD_FE_START运行业务,会导致灌raw业务的帧率减半。
  • KOL模式时,调用此接口获取isp状态可以去控制sensor standby,详细使用参考KOL sample.

【举例】

无

【相关主题】

无

ss_mpi_isp_sensor_reg_callback

【描述】

ISP提供的sensor注册的回调接口。

【语法】

td_s32 ss_mpi_isp_sensor_reg_callback(ot_vi_pipe vi_pipe, ot_isp_sns_attr_info *sns_attr_info , const ot_isp_sns_register *sns_register);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

sns_attr_info

向ISP注册的Sensor的属性。

输入

sns_register

Sensor注册结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • sns_id是sensor库中自定义的值,主要用于校对向ISP注册的sensor和向3A注册的sensor是否为同一个sensor。
  • ISP通过sensor注册的一系列回调接口,获取差异化的初始化参数,并控制sensor。
  • 此接口不支持多进程操作。

图 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_sns_exp_func * sensor_exp_func = &isp_register.sns_exp;
(td_void)memset_s(sensor_exp_func, sizeof(ot_isp_sns_exp_func), 0, sizeof(ot_isp_sns_exp_func)); sensor_exp_func->pfn_cmos_sensor_init         = sensor_init;
sensor_exp_func->pfn_cmos_sensor_exit         = sensor_exit;
sensor_exp_func->pfn_cmos_sensor_global_init   = sensor_global_init;
sensor_exp_func->pfn_cmos_set_image_mode      = cmos_set_image_mode;
sensor_exp_func->pfn_cmos_set_wdr_mode        = cmos_set_wdr_mode;
sensor_exp_func->pfn_cmos_get_isp_default     = cmos_get_isp_default;
sensor_exp_func->pfn_cmos_get_isp_black_level = cmos_get_isp_black_level;
sensor_exp_func->pfn_cmos_set_pixel_detect    = cmos_set_pixel_detect;
sensor_exp_func->pfn_cmos_get_sns_reg_info    = cmos_get_sns_regs_info; 
sns_attr_info.sns_id= HY_S0603_ID;
ret = ss_mpi_isp_sensor_reg_callback(vi_pipe, &sns_id, &isp_register);
if (ret) {
printf("sensor register callback function failed!\n");
return ret;
}

【相关主题】

ss_mpi_isp_sensor_unreg_callback

ss_mpi_isp_sensor_unreg_callback

【描述】

ISP提供的sensor反注册的回调接口。

【语法】

td_s32 ss_mpi_isp_sensor_unreg_callback(ot_vi_pipe vi_pipe, ot_sensor_id sensor_id);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

sns_id

向ISP注册的Sensor的Id。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • sns_id是sensor库中自定义的值,主要用于校对向ISP反注册的sensor和向3A反注册的sensor是否为同一个sensor。
  • 此接口不支持多进程操作。
  • ISP运行过程中不允许去注册。

【举例】

ot_vi_pipe vi_pipe = 0;
     ret = ss_mpi_isp_sensor_unreg_callback(vi_pipe, HY_S0603_ID);
     if (ret) {
         printf("sensor unregister callback function failed!\n");
         return ret;
     }

【相关主题】

ss_mpi_isp_sensor_reg_callback

ss_mpi_isp_ae_lib_reg_callback

【描述】

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

【语法】

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

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_lib

AE库结构体指针。

输入

ae_register

AE库注册结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • ISP提供统一的AE算法库接口,初始化、运行、控制、销毁AE算法库。使用SDK提供的AE算法库时,不需要关注此接口;使用用户自己的AE算法库时,需要调用此接口向ISP注册回调函数。
  • 此接口不支持多进程操作。
  • 最大支持2个AE库注册。

图 1 ISP库与AE库间的接口

【举例】

ot_isp_ae_register ae_register = {0};
td_s32 ret = TD_SUCCESS;
ae_register.ae_exp_func.pfn_ae_init  = ae_init;
ae_register.ae_exp_func.pfn_ae_run   = ae_run;
ae_register.ae_exp_func.pfn_ae_ctrl  = ae_ctrl;
ae_register.ae_exp_func.pfn_ae_exit  = ae_exit;
ret = ss_mpi_isp_ae_lib_reg_callback(vi_pipe, ae_lib, &ae_register);
if (TD_SUCCESS != ret) {
printf("Ot_ae register failed!\n");
}

【相关主题】

ss_mpi_isp_ae_lib_unreg_callback

ss_mpi_isp_ae_lib_unreg_callback

【描述】

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

【语法】

td_s32 ss_mpi_isp_ae_lib_unreg_callback(ot_vi_pipe vi_pipe, const 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_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 使用SDK提供的AE算法库时,不需要关注此接口;使用用户自己的AE算法库时,需要调用此接口向ISP反注册回调函数。
  • 此接口不支持多进程操作。
  • ISP运行过程中不允许去注册。

【举例】

td_s32 ret = TD_SUCCESS;
ret = ss_mpi_isp_ae_lib_unreg_callback(vi_pipe, ae_lib);
if (TD_SUCCESS != ret) {
printf("Ot_ae unregister failed!\n");
}
return ret;

【相关主题】

ss_mpi_isp_ae_lib_reg_callback

ss_mpi_isp_awb_lib_reg_callback

【描述】

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

【语法】

td_s32 ss_mpi_isp_awb_lib_reg_callback(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *awb_lib, const ot_isp_awb_register *awb_register);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

awb_lib

AWB库结构体指针。

输入

awb_register

AWB库注册结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_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, const 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_mpi_isp.a、libot_mpi_isp.a

【注意】

无

【举例】

  • 使用SDK提供的AWB算法库时,不需要关注此接口;使用用户自己的AWB算法库时,需要调用此接口向ISP反注册回调函数。
  • 此接口不支持多进程操作。
  • ISP运行过程中不允许去注册。

【相关主题】

ss_mpi_isp_awb_lib_reg_callback

ss_mpi_isp_set_bind_attr

【描述】

设置ISP库与3A库、sensor的绑定关系。

【语法】

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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_isp.a

【注意】

调用该接口前须调用ss_mpi_vb_set_supplement_cfg(请参考《MPP媒体处理软件Vx.y开发参考》的“系统控制”小节), 将supplement_cfg配置为OT_VB_SUPPLEMENT_JPEG_MASK。

【举例】

ot_vb_supplement_cfg supplement_conf = {0};

supplement_conf.supplement_cfg = OT_VB_SUPPLEMENT_JPEG_MASK;
ret=ss_mpi_vb_set_supplement_cfg(&supplement_conf); 
if(ret != TD_SUCCESS) {
         printf("ss_mpi_vb_set_supplement_conf err 0x%x\n",ret);
}

......

ret=ss_mpi_vb_init();        
if(ret != TD_SUCCESS) {
         printf("ss_mpi_vb_init err 0x%x\n",ret);
}

......

ot_vi_pipe vi_pipe;
ret=ss_mpi_isp_init(vi_pipe);

......

ot_isp_dcf_info isp_dcf;
//will:119 105 108 108
isp_dcf.isp_dcf_const_info.image_description[0]=119;
isp_dcf.isp_dcf_const_info.image_description[1]=105;
isp_dcf.isp_dcf_const_info.image_description[2]=108;
isp_dcf.isp_dcf_const_info.image_description[3]=108;
isp_dcf.isp_dcf_const_info.image_description[4]=0;
//otsi: 104 105 115 105
isp_dcf.isp_dcf_const_info.make[0]=104;
isp_dcf.isp_dcf_const_info.make[1]=105;
isp_dcf.isp_dcf_const_info.make[2]=115;
isp_dcf.isp_dcf_const_info.make[3]=105;
isp_dcf.isp_dcf_const_info.make[4]=0;
//funy:102 117 110 121
isp_dcf.isp_dcf_const_info.model[0]=102;
isp_dcf.isp_dcf_const_info.model[1]=117;
isp_dcf.isp_dcf_const_info.model[2]=110;
isp_dcf.isp_dcf_const_info.model[3]=121;
isp_dcf.isp_dcf_const_info.model[4]=0;
//v.1.1.0: 118 46 49 46 49 46 48
isp_dcf.isp_dcf_const_info.software[0] = 118;
isp_dcf.isp_dcf_const_info.software[1] = 46;
isp_dcf.isp_dcf_const_info.software[2] = 49;
isp_dcf.isp_dcf_const_info.software[3] = 46;
isp_dcf.isp_dcf_const_info.software[4] = 49;
isp_dcf.isp_dcf_const_info.software[5] = 46;
isp_dcf.isp_dcf_const_info.software[6] = 48;
isp_dcf.isp_dcf_const_info.software[7] = 0;

isp_dcf.isp_dcf_update_info.iso_speed_ratings = 500;
isp_dcf.isp_dcf_update_info.exposure_bias_value = 5;
isp_dcf.isp_dcf_update_info.exposure_time       = 0x00010004;
isp_dcf.isp_dcf_update_info.f_number            = 0x0001000f;
isp_dcf.isp_dcf_const_info.focal_length     = 0x00640001;
isp_dcf.isp_dcf_update_info.max_aperture_value = 0x00010001;
isp_dcf.isp_dcf_const_info.contrast        =5;
isp_dcf.isp_dcf_const_info.custom_rendered      = 0;
isp_dcf.isp_dcf_update_info.exposure_mode    = 0;
isp_dcf.isp_dcf_const_info.focal_length_in35mm_film = 0;
isp_dcf.isp_dcf_const_info.gain_control = 1;
isp_dcf.isp_dcf_const_info.light_source = 1;
isp_dcf.isp_dcf_const_info.metering_mode = 1;
isp_dcf.isp_dcf_const_info.saturation    = 1;
isp_dcf.isp_dcf_const_info.scene_capture_type = 1;
isp_dcf.isp_dcf_const_info.scene_type = 0;
isp_dcf.isp_dcf_const_info.sharpness =5;
isp_dcf.isp_dcf_update_info.white_balance = 0;
ss_mpi_isp_set_dcf_info(vi_pipe,&isp_dcf);

【相关主题】

ss_mpi_isp_get_dcf_info

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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 该接口不是必调接口,用于多路ISP拼接模式,对拼接效果要求更高时,可以通过标定工具(PQ_Stitching_Tool)标定出多路ISP的亮度、颜色等差异,通过此接口配置减少多路ISP输出图像的差异。该接口必须在ss_mpi_isp_init之后调用。
  • Hi3516CV610不支持。

【举例】

无

【相关主题】

ss_mpi_isp_get_pipe_differ_attr

ss_mpi_isp_get_pipe_differ_attr

【描述】

获取多路ISP Pipe差异属性。

【语法】

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_mpi_isp.a、libot_mpi_isp.a

【注意】

【举例】

无

【相关主题】

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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_isp.a

【注意】

AWB参数在线标定的接口主要为了支撑消费类客户对运动DV量产时产线上的AWB参数的校正。该接口的调用环境限于均匀光源下的均匀背景,且色温范围限于4500K到6500K。

【举例】

无

【相关主题】

无

ss_mpi_isp_ir_auto

【描述】

运行红外自动切换功能。

【语法】

td_s32 ss_mpi_isp_ir_auto(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_mpi_isp.a、libot_mpi_isp.a、libir_auto.a

【注意】

  • 该接口需要一定时间稳定后才会判断是否需要切换,若想缩短该时间,可通过调用1~3次该接口方式,次数越多越容易误判,不推荐使用。
  • 使用此接口时需要包含libir_auto.a。

【举例】

无

【相关主题】

无

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_mpi_isp.a、libot_mpi_isp.a

【注意】

配置该接口获取WDR合成后的raw数据时,WDR模块之后的ISP BE所有模块都被bypass;需要联合配置vi chn的相关属性才能从vi的通道中写出raw(会导致视频流的中断),具体参考举例中的伪代码(当vi输出raw时,需要关闭radial crop功能,radial crop不支持raw流输入)。ss_mpi_vi_set_chn_attr/ss_mpi_vi_get_chn_frame/ss_mpi_vi_release_chn_frame具体请参考《MPP 媒体处理软件Vx.y 开发参考》“视频输入”章节。

【举例】

ot_pixel_format  ori_pix_format;
ot_compress_mode ori_compress_mode;
ot_vi_chn_attr     chn_attr;
ot_isp_be_frame_attr be_frame_attr;

/* 设置 vi chn_attr 为16bit raw数据写出*/
ss_mpi_vi_get_chn_attr(vi_pipe, vi_chn, &chn_attr);

ori_pix_format    = chn_attr.pixel_format;
ori_compress_mode = chn_attr.compress_mode;
chn_attr.compress_mode = OT_COMPRESS_MODE_NONE;
chn_attr.pixel_format  = OT_PIXEL_FORMAT_RGB_BAYER_16BPP;
ss_mpi_vi_set_chn_attr(vi_pipe, vi_chn, &chn_attr);

/* 设置dump frame的位置*/
be_frame_attr.frame_pos = OT_ISP_DUMP_FRAME_POS_AFTER_WDR;
ss_mpi_isp_set_be_frame_attr(vi_pipe, &be_frame_attr);

/* dump frame */
td_s32           milli_sec = 5000;
ot_video_frame_info frame_info;
ss_mpi_vi_get_chn_frame(vi_pipe, vi_chn, &frame_info, milli_sec);

/* save frame data */
……
/* release dump frame */
ss_mpi_vi_release_chn_frame(vi_pipe, vi_chn, &frame_info);

/* dump 完成后恢复正常输出状态*/
chn_attr.compress_mode = ori_compress_mode;
be_frame_attr
chn_attr.pixel_format  = ori_pix_format;
ss_mpi_vi_set_chn_attr(vi_pipe, vi_chn, &chn_attr);
be_frame_attr.frame_pos = OT_ISP_DUMP_FRAME_POS_NORMAL;
ss_mpi_isp_set_be_frame_attr(vi_pipe, &be_frame_attr);

【相关主题】

ss_mpi_isp_get_be_frame_attr

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_mpi_isp.a、libot_mpi_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_mpi_isp.a、libot_mpi_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.y 开发参考》"系统控制”章节。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_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.y开发参考》"系统控制”章节。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

无

【举例】

无

【相关主题】

无

ss_mpi_isp_set_fe_roi_cfg

【描述】

配置FE ROI区域大小,FE中算法可以只作用在ROI区域。

【语法】

td_s32 ss_mpi_isp_set_fe_roi_cfg(ot_vi_pipe vi_pipe, const ot_isp_fe_roi_cfg *fe_roi_cfg)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

fe_roi_cfg

fe roi区域的起始坐标和宽高。

输入

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 当ROI使能打开的时候, FE中的算法只会作用在ROI区域,保护非ROI区域数据,设置了ROI区域的raw直接送到BE处理,ROI和非ROI区域可能存在差异。
  • Hi3516CV610不支持此接口。

【举例】

无

【相关主题】

无

ss_mpi_isp_get_fe_roi_cfg

【描述】

获取FE ROI区域大小。

【语法】

td_s32 ss_mpi_isp_get_fe_roi_cfg(ot_vi_pipe vi_pipe, ot_isp_fe_roi_cfg *fe_roi_cfg)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

fe_roi_cfg

fe roi区域的起始坐标和宽高。

输出

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

Hi3516CV610不支持此接口。

【举例】

无

【相关主题】

无

ss_mpi_isp_mem_share

【描述】

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

【语法】

td_s32 ss_mpi_isp_mem_share(ot_vi_pipe vi_pipe, td_s32 pid)

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

pid

需要共享的进程id。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 只有分配mmz buffer的进程能注册共享,其它进程注册共享返回失败。
  • 分配mmz buffer的进程不需要被共享,如果pid参数是分配mmz buffer的进程id,接口返回失败。
  • 如果mmz buffer已经是全进程共享的状态,接口返回失败。
  • 1个mmz buffer最多可以允许5个进程id共享(包含分配该mmz buffer的进程id)。
  • 重复共享给同一个进程id,接口返回成功。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。
  • 需要在ss_mpi_isp_init之后调用,并且其他非分配mmz buffer的进程在调用相关接口前调用,否则会导致非分配mmz buffer的进程调用相关接口时mmap失败,相关接口只要涉及到读写ISP内核态分配的mmz buffer,则需要进行共享,例如访问外部寄存器、读取统计信息和获取dcf info等。
  • ss_mpi_isp_set_debug接口访问时也需要进行共享,并且需要互相共享,共享后才允许将debug信息写出到相应进程分配的mmz buffer中。例如,进程B调用ss_mpi_isp_set_debug接口将其分配的MMZ提供给ISP进程A写出debug信息步骤:
    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,接口参见《MPP 媒体处理软件 V6.0 开发参考》中“系统控制”章节;
    3. 进程B调用ss_mpi_isp_set_debug接口将debug mmz信息传递给ISP主进程A。

【举例】

无

【相关主题】

ss_mpi_isp_mem_unshare

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

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 分配mmz buffer的进程可以解除对非分配mmz buffer的进程id的共享。
  • 被共享的进程只能解除对本进程id的共享。
  • 调用unshare接口解除共享之后不会立即生效,再重新调用需要映射mmz_buffer的接口时才会生效。
  • 如果mmz buffer已经是全进程共享的状态,接口返回失败。
  • 重复解除对进程id的共享,接口返回失败。
  • 与ss_mpi_isp_mem_share接口配对使用。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无

【相关主题】

ss_mpi_isp_mem_share

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

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 只有分配mmz buffer的进程能注册共享,其它进程注册共享返回失败。
  • 调用unshare接口解除共享之后不会立即生效,再重新调用需要映射mmz_buffer的接口时才会生效。
  • 重复共享给所有进程,接口返回成功。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。
  • 需要在ss_mpi_isp_init之后调用,并且其他非分配mmz buffer的进程在调用相关接口前调用,否则会导致非分配mmz buffer的进程调用相关接口时mmap失败,相关接口只要涉及到读写ISP内核态分配的mmz buffer,则需要进行共享,例如访问外部寄存器、读取统计信息和获取dcf info等。
  • ss_mpi_isp_set_debug接口访问时也需要进行共享,并且需要互相共享,共享后才允许将debug信息写出到相应进程分配的mmz buffer中。例如,进程B调用ss_mpi_isp_set_debug接口将其分配的MMZ提供给ISP进程A写出debug信息步骤:
    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,接口参见《MPP 媒体处理软件 V6.0 开发参考》中“系统控制”章节;
    3. 进程B调用ss_mpi_isp_set_debug接口将debug mmz信息传递给ISP主进程A;

【举例】

无

【相关主题】

ss_mpi_isp_mem_unshare_all

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

失败,其值为错误码。

【需求】

  • 头文件:ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

  • 只有分配mmz buffer的进程可以解除对所有进程的共享。
  • 重复解除对所有进程的共享,接口返回成功。
  • 与ss_mpi_isp_mem_share_all接口配对使用。
  • 调用此接口解除对所有进程共享的状态之后,仍然保留原有对进程id的共享状态。
  • 如果设置MMZ模块参数mem_process_isolation=0,此接口返回成功了也不会生效。

【举例】

无

【相关主题】

ss_mpi_isp_mem_share_all

ss_mpi_isp_set_noise_calibration

【描述】

设置噪声模型标定参数。

【语法】

td_s32 ss_mpi_isp_set_noise_calibration(ot_vi_pipe vi_pipe, const ot_isp_noise_calibration *noise_calibration);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

noise_calibration

噪声模型标定参数。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a

【注意】

Hi3519DV500不支持

【举例】

无

【相关主题】

无

数据类型

本文档中变量,如未明确指定取值范围,则默认是数据类型对应的取值范围。例如td_u8数据类型的变量取值范围为[0, 255]。本文档中变量,如未明确指定数据精度,则默认是1。

OT_ISP_BAYER_CHN_NUM

【说明】

定义bayer数据的通道数目。

【定义】

#define OT_ISP_BAYER_CHN_NUM            4

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_MAX_PIPE_NUM

【说明】

定义ISP 支持的PIPE数目的最大值。

【定义】

#define OT_ISP_MAX_FE_PIPE_NUM                    4
#define OT_ISP_MAX_PHY_PIPE_NUM                   7
#define OT_ISP_MAX_VIR_PIPE_NUM                   8
#define OT_ISP_MAX_PIPE_NUM       (OT_ISP_MAX_PHY_PIPE_NUM + OT_ISP_MAX_VIR_PIPE_NUM)

【注意事项】

  • OT_ISP_MAX_PHY_PIPE_NUM表示物理pipe的个数,其中只有pipe [0, 2] 只支持raw输入,pipe 3支持yuv或者raw输入,pipe [4, 6]只支持yuv输入。
  • OT_ISP_MAX_FE_PIPE_NUM表示,物理pipe[0, 3],支持raw输入。具体请参考《MPP 媒体处理软件 V6.0 开发参考》的“3.3.3 视频输入PIPE“小节和“3.3.1 功能框图“小节。

【相关数据类型及接口】

无

OT_ISP_WDR_MAX_FRAME_NUM

【说明】

定义WDR合成的最大帧数。

【定义】

#define OT_ISP_WDR_MAX_FRAME_NUM        4

【注意事项】

无。

【相关数据类型及接口】

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_STRIPING_MAX_NUM

【说明】

定义ISP BE离线分块数目的最大值。

【定义】

Hi3519DV500:

#define OT_ISP_STRIPING_MAX_NUM                   3

Hi3516CV610:

#define OT_ISP_STRIPING_MAX_NUM                   2

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_MAX_STITCH_NUM

【说明】

定义ISP拼接组的最大个数。

【定义】

Hi3519DV500:

#define OT_ISP_MAX_STITCH_NUM                   4

Hi3516CV610:

#define OT_ISP_MAX_STITCH_NUM                   1

【注意事项】

Hi3516CV610不支持拼接。

【相关数据类型及接口】

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             64

【注意事项】

如果sensor需要配置的寄存器个数过多,请注意系统压力较大时,尤其多路情况,是否存在中断长时间占用导致的异常情况。

【相关数据类型及接口】

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_BE_AE_ZONE_ROW

【说明】

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

【定义】

Hi3519DV500:

#define OT_ISP_BE_AE_ZONE_ROW            15

Hi3516CV610:

#define OT_ISP_BE_AE_ZONE_ROW            32

【注意事项】

无

【相关数据类型及接口】

OT_ISP_AE_ZONE_COLUMN

【说明】

AE垂直方向的分区间数目。

【定义】

#define OT_ISP_AE_ZONE_COLUMN              17

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_BE_AE_ZONE_COLUMN

【说明】

AE BE垂直方向的分区间数目。

【定义】

Hi3519DV500:

#define OT_ISP_BE_AE_ZONE_COLUMN            17

Hi3516CV610:

#define OT_ISP_BE_AE_ZONE_COLUMN            32

【注意事项】

无

【相关数据类型及接口】

OT_ISP_MG_ZONE_ROW

【说明】

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

【定义】

#define OT_ISP_MG_ZONE_ROW              15

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_MG_ZONE_COLUMN

【说明】

MG垂直方向的分区间数目。

【定义】

#define OT_ISP_MG_ZONE_COLUMN              17

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_WDR_EXP_RATIO_MAX

【说明】

WDR曝光比最大值。

【定义】

Hi3519DV500:

#define OT_ISP_WDR_EXP_RATIO_MAX         0x4000

Hi3516CV610:

#define OT_ISP_WDR_EXP_RATIO_MAX         0x7FF

【注意事项】

无

【相关数据类型及接口】

ss_mpi_isp_set_wdr_exposure_attr.

OT_ISP_WDR_EXP_RATIO_MIN

【说明】

WDR曝光比最小值。

【定义】

#define OT_ISP_WDR_EXP_RATIO_MIN         0x40

【注意事项】

无

【相关数据类型及接口】

ss_mpi_isp_set_wdr_exposure_attr

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_CALIBRATION_MAX_NUM

【说明】

定义标定噪声模型参数的iso档位个数的最大值。

【定义】

#define OT_ISP_BAYER_CALIBRATION_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_DESCRIPTION_LENGTH

【说明】

定义DCF描述信息的深度。

【定义】

#define OT_DCF_DESCRIPTION_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方向上划分的分块所需点的数量。

【定义】

Hi3519DV500:
#define OT_ISP_LSC_GRID_ROW                       33
Hi3516CV610:
#define OT_ISP_LSC_GRID_ROW                       19

【注意事项】

无。

【相关数据类型及接口】

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_ISP_FACE_NUM

【说明】

定义ISP 最多支持人脸坐标数量。

【定义】

#define OT_ISP_FACE_NUM      5

【注意事项】

无

【相关数据类型及接口】

ot_isp_face_roi

OT_ISP_PIPE_SENSOR_MAX_NUM

【说明】

定义ISP 支持的单PIPE绑定的sensor个数的最大值。

【定义】

#define OT_ISP_PIPE_SENSOR_MAX_NUM      2

【注意事项】

无

【相关数据类型及接口】

ot_isp_sns_regs_info

ot_rect

【说明】

定义裁剪窗口起始位置和图像宽高。

【定义】

typedef struct {
    td_s32 x;
    td_s32 y;
    td_u32 width;
    td_u32 height;
} ot_rect;

【成员】

成员名称

描述

x

水平方向起始位置, 2对齐。取值范围:[0, MaxWidth - MinWidth]

y

垂直方向起始位置,2对齐。取值范围:[0, MaxHeight - MinHeight]

width

图像宽度,4对齐。使用shading功能时4对齐,否则shading功能会不正常。取值范围:[MinWidth, MaxWidth]

height

图像高度,4对齐。使用shading功能时4对齐,否则shading功能会不正常。取值范围:[MinHeight, MaxHeight]

表 1 支持的分辨率

解决方案名称

分辨率

Hi3519DV500

宽度[MinWidth, MaxWidth] = [120, 8192]

高度[MinHeight, MaxHeight] = [88, 8192]

Hi3516CV610

宽度[MinWidth, MaxWidth] = [120, 4096]

高度[MinHeight, MaxHeight] = [80, 4096]

【注意事项】

  • 水平方向起始位置与图像宽度之和应小于sensor输出的图像宽度。
  • 垂直方向起始位置与图像高度之和应小于sensor输出的图像高度,由于无法检测sensor实际输出的宽高,当不满足该条件时MPI不报错。
  • 使能AF模块时,要求图像的最小宽度为256。
  • ISP支持的分辨率限制如表1,通路视频输入的分辨率限制请见《MPP 媒体处理软件Vx.y开发参考》的“视频输入”章节。

【相关数据类型及接口】

无

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

GRBG排列方式。

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](#ZH-CN_TOPIC_0000001388637013)     mipi_crop_offset;
} ot_mipi_crop_attr;

【成员】

成员名称

描述

mipi_crop_en

mipi裁剪使能。

mipi_crop_offset

mipi裁剪的范围。

【注意事项】

PUB_ATTR中的mipi参数配置用于指导Dynamic BLC模块修改ob区统计范围。该参数配置需要与mipi裁剪的实际配置参数一致。

【相关数据类型及接口】

无

ot_isp_bayer_raw_bit

【说明】

定义输入Bayer图像数据位宽。

【定义】

typedef enum {
    OT_ISP_BAYER_RAW_BIT_8BIT    = 8,
    OT_ISP_BAYER_RAW_BIT_10BIT   = 10,
    OT_ISP_BAYER_RAW_BIT_12BIT   = 12,
    OT_ISP_BAYER_RAW_BIT_14BIT   = 14,
    OT_ISP_BAYER_RAW_BIT_16BIT   = 16,
    OT_ISP_BAYER_RAW_BIT_BUTT
} ot_isp_bayer_raw_bit;

【成员】

成员名称

描述

OT_ISP_BAYER_RAWBIT_8BIT

Bayer数据位宽:8bit。

OT_ISP_BAYER_RAWBIT_10BIT

Bayer数据位宽:10bit。

OT_ISP_BAYER_RAWBIT_12BIT

Bayer数据位宽:12bit。

OT_ISP_BAYER_RAWBIT_14BIT

Bayer数据位宽:14bit。

OT_ISP_BAYER_RAWBIT_16BIT

Bayer数据位宽:16bit。

【注意事项】

该格式可以从所使用sensor的DataSheet上获取,并和裁剪起始位置相关。

【相关数据类型及接口】

无

ot_size

【说明】

定义sensor输出的宽高。

【定义】

typedef struct {
    td_u32 width;
    td_u32 height;
} ot_size;

【成员】

成员名称

描述

width

Sensor输出宽度。

取值范围:[MinWidth, MaxWidth]

height

Sensor输出高度。

取值范围:[MinHeight, MaxHeight]

表 1 sensor输出宽高取值范围

解决方案名称

取值范围

Hi3519DV500

宽度[MinWidth, MaxWidth] = [120, 8192]

高度[MinHeight, MaxHeight] = [88, 8192]

Hi3516CV610

宽度[MinWidth, MaxWidth] = [120,4096]

高度[MinHeight, MaxHeight] = [80, 4096]

【注意事项】

图像宽度应小于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。Hi3519DV500/Hi3516CV610不支持。

OT_COLOR_GAMUT_USER

用户自定义色域范围。

【注意事项】

Hi3519DV500/Hi3516CV610不支持OT_COLOR_GAMUT_BT2020。

【相关数据类型及接口】

ot_isp_pub_attr

ot_isp_pub_attr

【说明】

定义ISP公共属性。

【定义】

typedef struct {
    ot_rect              wnd_rect;
    ot_size              sns_size;
    td_float             frame_rate;
    ot_isp_bayer_format  bayer_format;
    ot_wdr_mode         wdr_mode;
    td_u8                sns_mode;
    td_bool              sns_flip_en;
    td_bool              sns_mirror_en;
    ot_mipi_crop_attr      mipi_crop_attr;
} ot_isp_pub_attr;

【成员】

成员名称

描述

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进行初始化序列的选择。

sns_flip_en

用于指导Dynamic Blc模块修改ob区统计范围。Sensor内部翻转开启且OB区被转移到下方,将该参数设置为1。Sensor内部翻转关闭,将该参数设置为0。

sns_mirror_en

用于指导Dynamic Blc模块修改ob区统计范围。Sensor内部镜像映射开启且OB区从左方被映射到右方,将该参数设置为1。Sensor内部镜像映射关闭,将该参数设置为0。

mipi_crop_attr

用于指导Dynamic Blc模块修改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_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_QUADRA,
    OT_WDR_MODE_2To1_LINE,
    OT_WDR_MODE_2To1_FRAME,
    OT_WDR_MODE_3To1_LINE,
    OT_WDR_MODE_3To1_FRAME,
    OT_WDR_MODE_4To1_LINE,
    OT_WDR_MODE_4To1_FRAME,
    OT_WDR_MODE_BUTT,
} ot_wdr_mode;

【成员】

成员名称

描述

OT_WDR_MODE_NONE

线性模式。

OT_WDR_MODE_BUILT_IN

Sensor合成WDR模式。

OT_WDR_MODE_QUADRA

Quadra模式

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支持。Hi3519DV500, Hi3516CV610只支持2to1 wdr模式,不支持3to1、4to1和OT_WDR_MODE_QUADRA模式。

【相关数据类型及接口】

无

ot_isp_module_ctrl

【说明】

定义ISP功能模块的控制。

【定义】

typedef union {
    td_u64  key;
    struct {

        td_u64  bit_bypass_isp_d_gain        : 1;   /* RW;[0] */
        td_u64  bit_bypass_anti_false_color  : 1;   /* RW;[1] */
        td_u64  bit_bypass_crosstalk_removal : 1;   /* RW;[2] */
        td_u64  bit_bypass_dpc            : 1;   /* RW;[3] */
        td_u64  bit_bypass_nr             : 1;   /* RW;[4] */
        td_u64  bit_bypass_dehaze         : 1;   /* RW;[5] */
        td_u64  bit_bypass_wb_gain        : 1;   /* RW;[6] */
        td_u64  bit_bypass_mesh_shading   : 1;   /* RW;[7] */
        td_u64  bit_bypass_drc            : 1;   /* RW;[8] */
        td_u64  bit_bypass_demosaic       : 1;   /* RW;[9] */
        td_u64  bit_bypass_color_matrix   : 1;   /* RW;[10] */
        td_u64  bit_bypass_gamma          : 1;   /* RW;[11] */
        td_u64  bit_bypass_fswdr          : 1;   /* RW;[12] */
        td_u64  bit_bypass_ca             : 1;   /* RW;[13] */
        td_u64  bit_bypass_csc            : 1;   /* RW;[14] */
        td_u64  bit_bypass_radial_crop    : 1;   /* RW;[15], not support for Hi3516CV610 */
        td_u64  bit_bypass_sharpen        : 1;   /* RW;[16] */
        td_u64  bit_bypass_bayer_sharpen  : 1;   /* RW;[17] ,not support for Hi3516CV610*/
        td_u64  bit_bypass_cac            : 1;   /* RW;[18]; */
        td_u64  bit2_chn_select           : 2;   /* RW;[19:20] */
        td_u64  bit_bypass_ldci           : 1;   /* RW;[21] */
        td_u64  bit_bypass_pregamma       : 1;   /* RW;[22], not support for Hi3519DV500 and Hi3516CV610 */
        td_u64  bit_bypass_ae_stat_fe     : 1;   /* RW;[23] */
        td_u64  bit_bypass_ae_stat_be     : 1;   /* RW;[24] */
        td_u64  bit_bypass_mg_stat        : 1;   /* RW;[25], not support for Hi3516CV610 */
        td_u64  bit_bypass_af_stat_fe     : 1;   /* RW;[26], not support for Hi3516CV610 */
        td_u64  bit_bypass_af_stat_be     : 1;   /* RW;[27] */
        td_u64  bit_bypass_awb_stat       : 1;   /* RW;[28] */
        td_u64  bit_bypass_clut           : 1;   /* RW;[29], not support for Hi3516CV610 */
        td_u64  bit_bypass_rgbir          : 1;   /* RW;[30], not support for Hi3519DV500 and Hi3516CV610 */
        td_u64  bit_bypass_lblc           : 1;   /* RW;[31],not support for Hi3516CV610 */
        td_u64  bit_reserved32            : 32;  /* H; [32:63] */
    };
} ot_isp_module_ctrl;

【成员】

成员名称

描述

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, Hi3516CV610不支持

bit_bypass_sharpen

旁路Sharpen。

bit_bypass_bayer_sharpen

旁路bayer域Sharpen, Hi3516CV610不支持。

bit_bypass_cac

旁路 CAC。

bit2_chn_select

WDR模式主路数据来源,一般在旁路多帧合成WDR模块后用于debug。

0:主路数据来源于超短帧;

1:主路数据来源于短帧;

2:主路数据来源于中帧;

3:主路数据来源于长帧。

bit_bypass_ldci

旁路Local DCI。

bit_bypass_pregamma

旁路PreGamma,Hi3519DV500, Hi3516CV610不支持。

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, Hi3516CV610不支持。

bit_bypass_rgbir

旁路RGBIR,Hi3519DV500, Hi3516CV610不支持

bit_bypass_lblc

旁路lblc, Hi3516CV610不支持。

bit_reserved32

保留位。

【注意事项】

WDR模式下,如果AWB统计信息在expander之后的位置,则开关WDR模块的使能,图像会有几帧颜色表现异常。在线WDR模式下,DRC使能时,不能同时bypass fswdr和nr,否则会导致帧率下降。

【相关数据类型及接口】

无

ot_isp_dump_frame_pos

【说明】

定义获取的帧数据在ISP BE中的位置。

【定义】

typedef enum {
    OT_ISP_DUMP_FRAME_POS_NORMAL    = 0,
    OT_ISP_DUMP_FRAME_POS_AFTER_WDR = 1,
    OT_ISP_DUMP_FRAME_POS_BUTT
} ot_isp_dump_frame_pos;

【成员】

成员名称

描述

OT_ISP_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_RUN_END,
    OT_ISP_VD_STANDBY_FE_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_RUN_END

RUN BE模式下ISP线程运行结束。

Hi3519DV500不支持此类型

OT_ISP_VD_STANDBY_FE_END

下一帧FE_END执行standby,并在完成后返回。

Hi3519DV500不支持此类型。

【注意事项】

  • 在线和并行模式下不支持OT_ISP_VD_BE_END方式。
  • 只在RUN BE模式下支持OT_ISP_VD_RUN_END,根据此状态,结合KOL其他配置,可保证获取到当帧AE收敛结果。

【相关数据类型及接口】

无

ot_isp_sns_attr_info

【说明】

定义ISP sensor属性。

【定义】

typedef struct {
    ot_sensor_id            sns_id;
} ot_isp_sns_attr_info;

【成员】

成员名称

描述

sns_id

Sensor ID 号。

【注意事项】

无。

【相关数据类型及接口】

无

ot_isp_sns_register

【说明】

定义sensor注册结构体。

【定义】

typedef struct {
    ot_isp_sns_exp_func  sns_exp;
} ot_isp_sensor_register;

【成员】

成员名称

描述

sns_exp

Sensor注册的回调函数结构体。

【注意事项】

封装的目的是为了扩展。

【相关数据类型及接口】

ot_isp_sns_exp_func

ot_isp_sns_exp_func

【说明】

定义sensor回调函数结构体。

【定义】

typedef struct {
    td_void (*pfn_cmos_sns_init)(ot_vi_pipe vi_pipe);
    td_void (*pfn_cmos_sns_exit)(ot_vi_pipe vi_pipe);
    td_void (*pfn_cmos_sns_global_init)(ot_vi_pipe vi_pipe);
    td_s32 (*pfn_cmos_set_image_mode)(ot_vi_pipe vi_pipe, ot_isp_cmos_sns_image_mode *sns_image_mode);
    td_s32 (*pfn_cmos_set_wdr_mode)(ot_vi_pipe vi_pipe, td_u8 mode);

    td_s32 (*pfn_cmos_get_isp_default)(ot_vi_pipe vi_pipe, ot_isp_cmos_default *def);
    td_s32 (*pfn_cmos_get_isp_black_level)(ot_vi_pipe vi_pipe, ot_isp_cmos_black_level *black_level);
    td_s32 (*pfn_cmos_get_blc_clamp_info)(ot_vi_pipe vi_pipe, td_bool *clamp_en);
    td_s32 (*pfn_cmos_get_sns_reg_info)(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *sns_regs_info);

    td_void (*pfn_cmos_set_pixel_detect)(ot_vi_pipe vi_pipe, td_bool enable);
    td_s32 (*pfn_cmos_get_awb_gains)(ot_vi_pipe vi_pipe, td_u32 *sns_awb_gain);
    td_s32 (*pfn_cmos_get_standby_cfg)(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *sns_regs_info);
    td_s32 (*pfn_cmos_get_restart_cfg)(ot_vi_pipe vi_pipe, ot_isp_sns_regs_info *sns_regs_info);
    td_s32 (*pfn_cmos_get_wrap_first_frame)(ot_vi_pipe vi_pipe, td_bool *first_frame);
} ot_isp_sns_exp_func;

【成员】

成员名称

描述

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_sns_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_get_standby_cfg

获取standby配置的回调函数指针。

pfn_cmos_get_restart_cfg

获取restart配置的回调函数指针。

pfn_cmos_get_wrap_first_frame

获取双目从模式中,是否响应上升沿。

【注意事项】

  • pfn_cmos_sensor_init, pfn_cmos_get_isp_default, pfn_cmos_get_isp_black_level, pfn_cmos_set_pixel_detect和pfn_cmos_get_sns_reg_info必须赋值,其他回调函数指针如果不需要赋值,应置为NULL。例如有的sensor不支持切换分辨率,那么pfn_cmos_set_image_mode需要置为NULL。
  • Hi3519DV500不支持AWB增益在sensor配置,仅支持sensor侧获取当前AWB增益。
  • 不支持切换AWB增益配置位置。

【相关数据类型及接口】

ot_isp_cmos_sns_image_mode

【说明】

定义sensor输出的宽高和帧率属性。

【定义】

typedef struct {
    td_u16   width;
    td_u16   height;
    td_float fps;
    td_u8    sns_mode;
} ot_isp_cmos_sns_image_mode;

【成员】

成员名称

描述

width

Sensor输出的宽度。

height

Sensor输出的高度。

fps

Sensor输出的帧率。

sns_mode

用于进行Sensor初始化序列的选择,在分辨率和帧率相同时,配置不同的sns_mode对应不同的初始化序列;其他情况,sns_mode默认为0。

【注意事项】

无

【相关数据类型及接口】

ot_isp_sns_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 {
    td_float avg_rg_map[OT_ISP_LSC_GRID_POINTS];
    td_float avg_bg_map[OT_ISP_LSC_GRID_POINTS];
    td_float prof_rg_map[OT_ISP_LSC_GRID_POINTS];
    td_float prof_bg_map[OT_ISP_LSC_GRID_POINTS];
} ot_isp_acs_color_shading_lut;

【成员】

成员名称

描述

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];
    td_float  model_ar_min;
    td_float  model_ar_step;
    td_float  model_ab_min;
    td_float  model_ab_step;
    td_s16   light_type_g_high;
    td_s16   light_type_g_low;
} ot_isp_acs_calib_param;

【成员】

成员名称

描述

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_sns_max_resolution

【说明】

定义sensor最大分辨率结构体。

【定义】

typedef struct {
    td_u32  max_width;
    td_u32  max_height;
} ot_isp_cmos_sns_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_sns_mode

【说明】

定义sensor模式寄存器。

【定义】

typedef struct {
    td_u32  sns_id;
    td_u8   sns_mode;
    td_bool  valid_dng_raw_format;
   ot_isp_dng_raw_format dng_raw_format;
} ot_isp_cmos_sns_mode;

【成员】

成员名称

描述

sns_id

Sensor id号。

sns_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_dng_ccm_tab ccm_tab1;
    ot_isp_dng_ccm_tab ccm_tab2;
} ot_isp_cmos_dng_color_param;

【成员】

成员名称

描述

wb_gain1

DNG白平衡校正系数1。推荐使用A光源。

wb_gain2

DNG白平衡校正系数2。推荐使用D50光源。

ccm_tab1

DNG的CCM系数1。和wb_gain1在同光源下标定得到。

ccm_tab2

DNG的CCM系数2。和wb_gain2在同光源下标定得到。

【注意事项】

无

【相关数据类型及接口】

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中的默认配置的标志位。

【定义】

Hi3519DV500中定义:

typedef union {
    td_u64  key;
    struct {
        td_u64  bit1_drc              : 1;   /* [0] */
        td_u64  bit1_demosaic         : 1;   /* [1] */
        td_u64  bit1_pregamma         : 1;   /* [2] Hi3519DV500不支持 */
        td_u64  bit1_gamma            : 1;   /* [3] */
        td_u64  bit1_sharpen          : 1;   /* [4] */
        td_u64  bit1_ldci             : 1;   /* [5] */
        td_u64  bit1_dpc              : 1;   /* [6] */
        td_u64  bit1_lsc              : 1;   /* [7] */
        td_u64  bit1_ge               : 1;   /* [8] */
        td_u64  bit1_anti_false_color : 1;   /* [9] */
        td_u64  bit1_bayer_nr         : 1;   /* [10] */
        td_u64  bit1_ca               : 1;   /* [11] */
        td_u64  bit1_expander         : 1;   /* [12] */
        td_u64  bit1_clut             : 1;   /* [13] */
        td_u64  bit1_wdr              : 1;   /* [14] */
        td_u64  bit1_dehaze           : 1;   /* [15] */
        td_u64  bit1_cac              : 1;   /* [16] */
        td_u64  bit1_acs              : 1;   /* [17] */
        td_u64  bit1_bshp             : 1;   /* [18] */
        td_u64  bit1_lblc             : 1;   /* [19] */
        td_u64  bit44_reserved        : 44;   /* [20:63] */
    };
} ot_isp_cmos_alg_key;

Hi3516CV610中定义:

typedef union {
    td_u64  key;
    struct {
        td_u64  bit1_drc              : 1;   /* [0] */
        td_u64  bit1_demosaic         : 1;   /* [1] */
        td_u64  bit1_pregamma         : 1;   /* [2] Not support for Hi3516CV610 */
        td_u64  bit1_gamma            : 1;   /* [3] */
        td_u64  bit1_sharpen          : 1;   /* [4] */
        td_u64  bit1_ldci             : 1;   /* [5] */
        td_u64  bit1_dpc              : 1;   /* [6] */
        td_u64  bit1_lsc              : 1;   /* [7] */
        td_u64  bit1_ge               : 1;   /* [8] */
        td_u64  bit1_anti_false_color : 1;   /* [9] */
        td_u64  bit1_bayer_nr         : 1;   /* [10] */
        td_u64  bit1_ca               : 1;   /* [11] */
        td_u64  bit1_expander         : 1;   /* [12] */
        td_u64  bit1_clut             : 1;   /* [13] Not support for Hi3516CV610 */
        td_u64  bit1_wdr              : 1;   /* [14] */
        td_u64  bit1_dehaze           : 1;   /* [15] */
        td_u64  bit1_cac              : 1;   /* [16] */
        td_u64  bit1_acs              : 1;   /* [17] */
        td_u64  bit1_bshp             : 1;   /* [18] Not support for Hi3516CV610 */
        td_u64  bit1_lblc             : 1;   /* [19] Not support for Hi3516CV610 */
        td_u64  bit44_reserved        : 44;   /* [20:63] */
    };
} ot_isp_cmos_alg_key;

【成员】

成员名称

描述

bit1_drc

drc模块是否采用cmos默认配置的标志位。

bit1_demosaic

demosaic模块是否采用cmos默认配置的标志位。

bit1_pregamma

pregamma模块是否采用cmos默认配置的标志位。Hi3519DV500,Hi3516CV610不支持

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默认配置的标志位,Hi3516CV610不支持。

bit1_wdr

wdr模块是否采用cmos默认配置的标志位。

bit1_dehaze

dehaze模块是否采用cmos默认配置的标志位。

bit1_cac

cac模块是否采用cmos默认配置的标志位。

bit1_acs

acs模块是否采用cmos默认配置的标志位。

bit1_bshp

Bayer sharpen模块是否采用cmos默认配置标志位,Hi3516CV610不支持。

bit1_lblc

lblc模块是否采用cmos默认配置标志位,Hi3516CV610不支持。

bit44_reserved

保留位

【注意事项】

如果ISP的某个算法模块要使用cmos中的配置,要将对应的标志位置为1,否则采用的是算法内部的默认配置。

【相关数据类型及接口】

ot_isp_cmos_default

ot_isp_cmos_default

【说明】

定义ISP基础算法库的初始化参数结构体。

【定义】

typedef struct {
    ot_isp_cmos_alg_key                key;
    const ot_isp_drc_attr              *drc;
    const ot_isp_demosaic_attr         *demosaic;
    const ot_isp_gamma_attr            *gamma;
    const ot_isp_sharpen_attr          *sharpen;
    const ot_isp_ldci_attr             *ldci;
    const ot_isp_dp_dynamic_attr       *dpc;
    const ot_isp_cmos_lsc              *lsc;
    const ot_isp_cr_attr               *ge;
    const ot_isp_anti_false_color_attr *anti_false_color;
    const ot_isp_nr_attr               *bayer_nr;
    const ot_isp_ca_attr               *ca;
    const ot_isp_expander_attr         *expander;
    const ot_isp_cmos_clut             *clut;
    const ot_isp_wdr_fs_attr           *wdr;
    const ot_isp_dehaze_attr           *dehaze;
    const ot_isp_cac_attr              *cac;
    const ot_isp_bayershp_attr         *bshp;
    const ot_isp_cmos_acs              *acs;
    const ot_isp_cmos_lblc             *lblc;
    ot_isp_noise_calibration          noise_calibration;
    ot_isp_cmos_sns_max_resolution    sns_max_resolution;
    ot_isp_cmos_sns_mode              sns_mode;
    ot_isp_cmos_dng_color_param       dng_color_param;
    ot_isp_cmos_wdr_switch_attr       wdr_switch_attr;
} ot_isp_cmos_default;

【成员】

成员名称

描述

key

标识各算法是否采用cmos中默认配置的key。

*drc

DRC结构体指针。

*demosaic

Demosaic结构体指针。

*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结构体指针。

*cac

cac结构体指针。

*bshp

Bayer sharpen结构体指针。

*acs

ACS结构体指针。

*lblc

LBLC结构体指针。

noise_calibration

Noise校正结构体。

sns_max_resolution

Sensor最大宽高结构体。

sns_mode

Sensor模式结构体。

dng_color_param

DNG结构体。

wdr_switch_attr

WDR切换属性。

【注意事项】

  • sns_max_resolution、sns_mode、dng_color_param的默认值在cmos.c中,其他ISP基础算法的默认值均在cmos_ex.h中,如果用户需要修改默认值,请修改相应参数,如果用户需要对接新的sensor,请参考已经提供的其他sensor的默认值。
  • ISP的各算法模块如果要采用cmos的默认配置,要在cmos_get_isp_default函数中将对应的标志位置1,并给该算法模块的cmos结构体指针赋值。如果cmos默认值配置的不合法,会导致算法初始化失败,同时run起来之后算法不能正常调节(调用算法的MPI接口会返回错误码0xa01c8047,同时logmpp中会有算法初始化失败的提示)。

【相关数据类型及接口】

ot_isp_sns_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_sns_exp_func

ot_isp_sns_total_size_attr

【说明】

定义sensor写出数据的实际宽高。

【定义】

typedef struct {
    ot_size    ob_sns_size;
} ot_isp_sns_total_size_attr;

【成员】

成员名称

描述

ob_sns_size

sensor写出数据的实际宽高。

若sensor写出的数据中包含ob区,ob_sns_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_sns_total_size_attr   sns_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模式下黑电平配置属性。

sns_with_ob_attr

带ob区的sensor输出宽高,用于指导Dynamic BLC修改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区得到的黑电平配置值。
  • vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM时,不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。Sensor built-in模式下不支持将black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_DYNAMIC。(数据类型请具体请参考OT_ISP_MAX_PIPE_NUM)
  • 如果使能user_black_level_en,ISP的所有模块所使用的黑电平值为user_black_level。
  • vi_pipe>=OT_ISP_MAX_FE_PIPE_NUM时,不支持使能user_black_level_en;Sensor built-in模式下不支持使能user_black_level_en。(数据类型请具体请参考OT_ISP_MAX_PIPE_NUM)

【相关数据类型及接口】

ot_isp_sns_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;
    ot_isp_sns_commbus  com_bus_multi[OT_ISP_PIPE_SENSOR_MAX_NUM];
    union {
        ot_isp_i2c_data i2c_data[OT_ISP_MAX_SNS_REGS];
        ot_isp_ssp_data ssp_data[OT_ISP_MAX_SNS_REGS];
    };
    td_u8   dev_addr_multi[OT_ISP_PIPE_SENSOR_MAX_NUM];
    td_u32  sns_multi_num; /* RW;default 0 */
    struct {
        td_bool update;
        td_u8   delay_frame_num;
        td_u32  slave_vs_time;
        td_u32  slave_bind_dev;

        td_u32 slave_hs_time;
        td_u32 slave_vs_cycle;
        td_u32 slave_hs_cycle;
        td_u32 slave_hs_dly_cyc;
    } slv_sync;
    td_bool config;
} ot_isp_sns_regs_info;

【成员】

成员名称

子成员名称

描述

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模式下曝光长帧与中帧的行差,中帧与短帧的行差,短帧与短短帧的行差。

Hi3519DV500不支持。

com_bus

i2c_dev

Sensor绑定的I2C设备号

ssp_dev

Sensor绑定SPI设备号结构体

bit4_ssp_dev

Sensor绑定的SPI设备号

bit4_ssp_cs

Sensor绑定的SPI片选信号

com_bus_multi

i2c_dev

单pipe多个sensor绑定的i2c设备号

ssp_dev

单个pipe多个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时表示寄存器在超短帧起始中断配置生效,设置为0x 1时表示寄存器在超短帧结束中断配置生效。
  • 设置为0x10时表示寄存器在短帧起始中断配置生效,设置为0x11时表示寄存器在短帧结束中断配置生效。
  • 设置为0x20时表示c寄存器在中帧起始中断配置生效,设置为0x21时表示寄存器在中帧结束中断配置生效。
  • 设置为0x30时表示寄存器在长帧起始中断配置生效,设置为0x31时表示寄存器在长帧结束中断配置生效。

dev_addr

Sensor设备地址。

reg_addr

Sensor寄存器地址。

addr_byte_numc

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寄存器数据位宽。

dev_addr_multi

-

单pipe绑定的多个Sensor的设备地址。

sns_multi_num

-

单pipe绑定的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绑定关系。

slave_hs_time

XHS信号周期,单位:sensor输入时钟周期。

slave_vs_cycle

XVS有效电平宽度,单位:sensor输入时钟周期。

slave_hs_cycle

XHS有效电平宽度,单位:sensor输入时钟周期。

slave_hs_dly_cyc

XHS脉冲输出相对XVS脉冲的延迟周期配置,单位:sensor输入时钟周期。

config

--

Sensor寄存器数据配置完成标志。

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

【注意事项】

无

【相关数据类型及接口】

ot_isp_sns_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       sns_id;
    ot_isp_3a_alg_lib  ae_lib;
    ot_isp_3a_alg_lib  af_lib;
    ot_isp_3a_alg_lib  awb_lib;
} ot_isp_bind_attr;

【成员】

成员名称

描述

sns_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_DEHAZE_DEBUG_ATTR_SET,
    OT_ISP_AE_DEBUG_ATTR_SET,
    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_ATTACHINFO_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_AWB_ERR_GET

获取AWB当前增益和目标增益的误差,可辅助判断AWB是否已稳定。

OT_ISP_DEHAZE_DEBUG_ATTR_SET

设置dehaze调试信息参数

OT_ISP_AE_DEBUG_ATTR_SET

设置ae调试信息参数

【注意事项】

无

【相关数据类型及接口】

ot_isp_stitch_attr

【说明】

定义ISP拼接结构体。

【定义】

typedef struct {
    td_bool stitch_enable;
    td_bool main_pipe;
    td_u8   stitch_pipe_num;
    td_s8   stitch_bind_id[OT_ISP_MAX_STITCH_NUM];
} ot_isp_stitch_attr;

【成员】

成员名称

描述

stitch_enable

拼接使能

main_pipe

是否为主Pipe

stitch_pipe_num

拼接总路数

stitch_bind_id

拼接绑定的pipe的号

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

无。

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_thermo_run)(td_s32 handle,
                         const ot_isp_ae_info *ae_info,
                         ot_isp_thermo_result *thermo_result,
                         td_s32 reserved);
    td_s32 (*pfn_ae_ctrl)(td_s32 handle, td_u32 cmd, td_void *value);
    td_s32 (*pfn_ae_exit)(td_s32 handle);
} ot_isp_ae_exp_func;

【成员】

成员名称

描述

pfn_ae_init

初始化AE的回调函数指针。

pfn_ae_run

运行AE的回调函数指针。

pfn_thermo_run

运行热感库的回调函数指针。ot_isp_thermo_result参考《Thermo开发参考》。

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, td_void *value)
    {
        ae_check_pointer_return(value); 
        switch (cmd) {
            case OT_ISP_WDR_MODE_SET:
                ……
                break;
            …… 
        }
        return TD_SUCCESS;
    }
    

    运行时ISP控制单元会隐式调用pfn_ae_ctrl回调函数,通知AE算法库切换WDR和线性模式、设置FPS、通知配置sensor。

    当前Firmware定义的ctrl命令详参ot_isp_ctrl_cmd。

  • 调用ss_mpi_isp_exit时将调用pfn_ae_exit回调函数,以销毁AE算法库。

  • 一个算法库支持初始化和运行多个实例,参数handle以区分不同的算法库实例。如果需要支持多个实例,可以用不同的alg_lib. id注册多次算法库。例如:

    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);
    
  • 如果需要注册热感库非AE库(二者互斥),则需要调度热感库的注册函数进行注册,调用ss_mpi_isp_run时将调用pfn_thermo_run回调函数,热感库注册时需要使用热感sensor。注册操作可参考《Thermo开发参考》文档,例如:

    ot_isp_3a_alg_lib thermo_lib;
    thermo_lib.id = isp_dev;
    strncpy_s(thermo_lib.lib_name, sizeof(thermo_lib.lib_name), OT_THERMO_LIB_NAME, sizeof(OT_THERMO_LIB_NAME));
    ret = ss_mpi_thermo_register(isp_dev, &thermo_lib);
    if (ret != HI_SUCCESS) {
    printf("ss_mpi_thermo_register failed with %#x!\n", ret);
    return ret;
    }
    

【相关数据类型及接口】

ot_isp_ae_register

ot_isp_ae_param

【说明】

定义ISP提供给AE的初始化参数结构体。

【定义】

typedef struct {
    ot_sensor_id sns_id;
    td_u8  wdr_mode;
    td_u8  hdr_mode;
    td_u16 black_level;
    td_float fps;
    ot_isp_bayer_format bayer;
    ot_isp_stitch_attr stitch_attr;
    td_s32 reserved;
} ot_isp_ae_param;

【成员】

成员名称

描述

sns_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;                /* R; Range:[0, 1]; enable smart roi info */
    td_bool  available;             /* R; Range:[0, 1]; whether roi area is available */
    td_u8    luma ;                  /* R; Range:[0x00, 0xFF]; luma of roi area*/
} ot_isp_people_roi;

【成员】

成员名称

描述

enable

模型是否使能。

available

模型是否有可用的检测结果。

luma

模型检测结果的整体亮度。取值范围:[0x0, 0xFF]

【注意事项】

  • 当仅由人形模型可用时,会根据人形检测结果估算出一个人脸亮度,此亮度可靠性会低于人脸检测结果。
  • luma采用的是YUV图像中检测到的人脸或人形框内Y分量的亮度平均值。客户在使用自己的智能信息时,当存在多个人脸或人形检测结果,建议取多个检测结果的整体亮度平均值。

【相关数据类型及接口】

ot_isp_ae_info

ot_isp_tunnel_roi

【说明】

定义ISP提供给AE的隧道统计信息结构体。

【定义】

typedef struct {
    td_bool  enable;                /* R; Range:[0, 1]; enable tunnel roi info */
    td_bool  available;             /* R; Range:[0, 1]; whether roi area is available */
    td_u32   tunnel_area_ratio;     /* R; Range:[0, 10000]; the proportion of tunnels in the whole picture */
    td_u32   tunnel_exp_perf;       /* R; Range:[0, 10000]; the performance of tunnels exposure result */
} ot_isp_tunnel_roi;

【成员】

成员名称

描述

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;                     /* R; Range:[0, 1]; enable fast face roi info */
    td_bool  available;                  /* R; Range:[0, 1]; whether roi area is available */
    td_u64   frame_pts;                  /* pts of face info */
    ot_rect face_rect[OT_ISP_FACE_NUM];  /* face roi rect */
} ot_isp_face_roi;

【成员】

成员名称

描述

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。

  • 人脸快速收敛算法仅支持在近距离使用,要求人脸在图像中占比较大。如果人脸占比较小,可能画面导致闪烁。建议传入的人脸坐标占画面的面积1/64以上。

【相关数据类型及接口】

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]; /* people ae info */
    ot_isp_tunnel_roi  tunnel_roi[OT_ISP_TUNNEL_CLASS_MAX]; /* tunnels ae info */
    ot_isp_face_roi    face_roi;                           /* fast face ae info */
} ot_isp_smart_info;

【成员】

成员名称

描述

people_roi

人形人脸的模型检测结果。

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 not support for Hi3519DV500 */ 
}ot_isp_fe_ae_stat_1;

【成员】

无

【注意事项】

详情请见ot_isp_ae_info。

【相关数据类型及接口】

无

ot_isp_be_ae_stat_1

【说明】

定义ISP BE中AE统计属性。

【定义】

typedef struct {
    td_u32 pixel_count;
    td_u32 pixel_weight;
    td_u32 histogram_mem_array[OT_ISP_HIST_NUM];
    td_u32 estimate_histogram_mem_array[OT_ISP_HIST_NUM];
} ot_isp_be_ae_stat_1;

【成员】

无

【注意事项】

详情请见ot_isp_ae_info。

【相关数据类型及接口】

无

ot_isp_ae_info

【说明】

定义ISP提供给AE的统计信息结构体。

【定义】

typedef struct {
    td_u32  frame_cnt;    /* the counting of frame */
    td_u64 frame_pts;
    td_u16 frame_width;
    td_u16 frame_height;
    ot_isp_smart_info smart_info;
    ot_isp_fe_ae_stat_1 *fe_ae_stat1;
    ot_isp_fe_ae_stat_2 *fe_ae_stat2;
    ot_isp_fe_ae_stat_3 *fe_ae_stat3;
    ot_isp_fe_ae_stitch_stat_3 *fe_ae_sti_stat;
    ot_isp_be_ae_stat_1 *be_ae_stat1;
    ot_isp_be_ae_stat_2 *be_ae_stat2;
    ot_isp_be_ae_stat_3 *be_ae_stat3;
    ot_isp_be_ae_stitch_stat_3 *be_ae_sti_stat;
} ot_isp_ae_info;

【成员】

成员名称

子成员名称

描述

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

Hi3519DV500, Hi3516CV610不支持

fe_ae_stat2

global_avg_r

全局R分量平均值,取值范围:[0, 0xFFFF] Hi3516CV610不支持

global_avg_gr

全局Gr分量平均值,取值范围:[0, 0xFFFF] Hi3516CV610不支持

global_avg_gb

全局Gb分量平均值,取值范围:[0, 0xFFFF] Hi3516CV610不支持

global_avg_b

全局B分量平均值,取值范围:[0, 0xFFFF] Hi3516CV610不支持

global_avg_ir

Hi3519DV500, Hi3516CV610不支持

fe_ae_stat3

zone_avg

分区间R、Gr、Gb、B分量平均值,取值范围:[0, 0xFFFF] Hi3516CV610不支持

zone_avg_ir

Hi3519DV500, Hi3516CV610不支持

fe_ae_sti_stat

zone_avg

拼接模式下拼接后分区间R、Gr、Gb、B分量平均值,取值范围:[0, 0xFFFF]

只有参与拼接的Pipe分区间均值有效,其余Pipe的均值无效。Hi3516CV610不支持

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的均值无效。Hi3516CV610不支持

【注意事项】

  • 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之后

已减

否

说明:

  • 表1中说明仅在ISP默认配置下生效,实际会受到黑电平配置及AE统计信息位置的影响。
  • WDR合成前(FE)统计信息为固定在WB模块之后,不可配置。使用FE统计信息时需要减去黑电平,直方图应减去10bit黑电平,均值应减去16bit黑电平。WDR合成前(FE)统计信息受到位于FE AE之前处理模块(在Hi3519DV500中,FE AE之前的处理模块有DG/WB)增益影响,这些模块的FE增益值由算法内部保证与BE保持一致,无需单独配置。
  • 在Hi3519DV500中第0路FE统计信息会经过水平下采样,因此点数减半。
  • 线性模式推荐使用WDR合成前(FE)1024段直方图。WDR模式推荐使用WDR合成前(FE)1024段直方图,或者使用WDR合成后(BE)开方模式的1024段直方图。离线模式下业务压力大时,WDR合成前(FE)实时性更好,因此离线模式下推荐使用FE统计信息。SDK提供的AE算法在如果采用的是BE统计信息,默认在线性模式下使用(BE)不开方模式的统计信息,在WDR模式下使用(BE)开方模式的统计信息。如果线性模式下使用(BE)开方模式的统计信息,或者WDR模式下使用(BE)不开方模式的统计信息,会导致SDK提供AE算法的出现异常。
  • Hi3519DV500: FE通路中只有FE0,FE2支持分块统计信息,全局均值统计信息和1024段直方图。FE1,FE3只支持256段直方图。
  • Hi3516CV610: FE通路只支持256段直方图,不支持分块统计信息和全局均值统计信息。
  • 只有使用FE0和FE2拼接才有拼接后的1024段直方图信息和均值信息,其他路拼接只有256段直方图信息。

【相关数据类型及接口】

ot_isp_ae_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 weight_table_update;
    td_u8 weight_table[OT_VI_MAX_PIPE_NUM][OT_ISP_AE_ZONE_ROW][OT_ISP_AE_ZONE_COLUMN];
    td_u8 be_weight_table[OT_VI_MAX_PIPE_NUM][OT_ISP_BE_AE_ZONE_ROW][OT_ISP_BE_AE_ZONE_COLUMN];
} ot_isp_ae_stat_attr;

【成员】

成员名称

描述

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配置为同一模式。Hi3516CV610不支持

weight_table_update

AE算法权重表配置使能,影响weight_table的配置。

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

weight_table

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

OT_VI_MAX_PIPE_NUM请参见《MPP媒体处理软件V6.0开发参考》中“视频输入”章节。

be_weight_table

32x32个区间的AE权重表。取值范围:[0, 15],Hi3519DV500不支持。

OT_VI_MAX_PIPE_NUM请参见《MPP媒体处理软件V6.0开发参考》中“视频输入”章节。

【注意事项】

  • weight_table支持拼接模式下在主路配置多路权重,在主路对所有支路对应Pipe下标的权重表进行赋值即可。在非拼接模式下,只有对应Pipe下标的权重表生效。
  • SDK提供的AE算法只支持1024段直方图,在使用AE算法情况下使能four_plane_mode会导致AE算法异常。
  • Hi3519DV500 FE和BE都是15x17的统计信息,使用weight_table同时对FE,BE的统计权重进行更新。
  • Hi3516CV610 BE提供32x32的统计信息,需用通过be_weight_table对BE权重表更新,FE仍然使用的weight_table的权重表。

【相关数据类型及接口】

ot_isp_ae_result

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_ae_fast_ae_attr

【说明】

Fast AE相关算法参数。

【定义】

typedef struct {
    td_bool enable;
    td_u16  sns_delay_frame;
} ot_isp_ae_fast_ae_attr;

【成员】

成员名称

描述

enable

是否使能Fast AE。

sns_delay_frame

当前帧配置曝光参数,多少帧后在AE统计中生效。

【注意事项】

  • sns_delay_frame 一般在低帧率时,当帧配置曝光参数ISP软件能立马下发给Sensor,此时生效延时配制为3。
  • 在较高帧率时,ISP软件需要等到下一帧配置给Sensor,此时生效延时为4。可以参考快速收敛AE适配指南的代码来测试sensor生效延时具体为几帧。
  • 当前Fast AE只支持普通线性模式,不支持WDR。
  • 当前Fast AE在快速收敛的过程中Smart AE不生效。快速收敛完成后Smart AE就可以正常工作。
  • 在Fast AE的快速收敛过程中,所有的高低光优先,black delay、bright delay等功能也不能使用。快速收敛完成后就可以正常工作。

ot_isp_awb_register

【说明】

定义AWB注册结构体。

【定义】

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, td_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 sns_id;
    td_u8 wdr_mode;
    td_u8 awb_zone_row;
    td_u8 awb_zone_col;
    td_u8 awb_zone_bin;
    ot_isp_stitch_attr stitch_attr;
    td_u16 awb_width;
    td_u16 awb_height;
    td_u32 init_iso;
    td_s8 reserved;
} ot_isp_awb_param;

【成员】

成员名称

描述

sns_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_overlap_zone

【说明】

定义拼接算法重叠区域。

【定义】

typedef struct {
    td_u8 col_start;
    td_u8 col_stop;
    td_u8 row_start;
    td_u8 row_stop;
} ot_isp_awb_overlap_zone;

【成员】

成员名称

描述

col_start

重叠区域相对AWB统计块所在的列起始位置

col_stop

重叠区域相对AWB统计块所在的列结束位置

row_start

重叠区域相对AWB统计块所在的行起始位置

row_stop

重叠区域相对AWB统计块所在的行结束位置

【注意事项】

  • 上述起始和结束点都包含于AWB重叠区域中。
  • Hi3516CV610不支持拼接,该结构体未使用。

【相关数据类型及接口】

无

ot_isp_awb_overlap_all_zone

【说明】

定义每一pipe图像左侧部分和右侧部分重叠区域位置。

【定义】

typedef struct {
    td_u8  stitch_pipe_num;
    ot_isp_awb_overlap_zone left_zone_range[OT_ISP_MAX_STITCH_NUM];
    ot_isp_awb_overlap_zone right_zone_range[OT_ISP_MAX_STITCH_NUM];
} ot_isp_awb_overlap_all_zone;

【成员】

成员名称

描述

stitch_pipe_num

总共拼接路数。

left_zone_range[OT_ISP_MAX_STITCH_NUM]

所有pipe左侧重叠区域。

right_zone_range[OT_ISP_MAX_STITCH_NUM]

所有pipe右侧重叠区域。

【注意事项】

  • 最左侧图像左侧部分和最右侧图像右侧部分不属于重叠区域,但是内部仍然会基于设置值返回相应结果,对应结果可不参与计算。
  • Hi3516CV610不支持拼接,该结构体未使用。

【相关数据类型及接口】

无

ot_isp_awb_info

【说明】

定义ISP提供给AWB的统计信息结构体。

【定义】

typedef struct {
    td_u32  frame_cnt;
    ot_isp_awb_stat_1 *awb_stat1;
    ot_isp_awb_stat_result awb_stat2;
    td_u8  awb_gain_switch;
    td_u8  awb_stat_switch;
    td_bool wb_gain_in_sensor;
    td_u32 wdr_wb_gain[OT_ISP_BAYER_CHN_NUM];
    ot_isp_awb_overlap_all_zone overlap_all_zone;
} ot_isp_awb_info;

【成员】

成员名称

描述

frame_cnt

帧的累加计数。

取值范围:[0, 0xFFFFFFFF]

*awb_stat1

Awb统计信息1

awb_stat2

Awb统计信息2

awb_gain_switch

白平衡增益在ISP的位置。取值范围:[0,1]

0:白平衡增益配置在WDR合成前的DG1处。

1:白平衡增益配置在WB处。

Hi3519DV500暂不支持白平衡增益配置在DG1处。

awb_stat_switch

白平衡统计模块在ISP的位置。取值范围:[0, 1, 2]

0:白平衡统计模块在DG后。

1:白平衡统计模块在EXPANDER后。

2:白平衡统计模块在DRC后。

wb_gain_in_sensor

白平衡增益是否在sensor配置。取值范围:[0, 1]

0:白平衡增益在ISP配置。

1:白平衡增益在sensor配置。

Hi3519DV500暂不支持白平衡增益在sensor配置。

wdr_wb_gain[-]

在WDR合成前的DG1处配置的白平衡增益值。

overlap_all_zone

图像重叠区域信息。

Hi3516CV610不支持。

【注意事项】

  • AWB库可以根据frame_cnt控制运算频率,例如两帧运算一次。
  • ot_isp_awb_info提供了全局统计信息和分块统计信息,不同模式下水平、垂直分块个数不固定,可通过ot_isp_awb_param的awb_zone_row、awb_zone_col两个参数获取。AWB分块个数 = awb_zone_row* awb_zone_col。
  • 切换白平衡统计模块位置,会导致2帧统计信息错误,建议在启动时配置合理值,避免切换。如果必须进行位置切换,建议切换后,AWB算法冻结2帧以上,待统计信息正确后,再重新计算。
  • 非拼接模式下,通过ss_mpi_isp_set_stats_cfg接口配置白平衡统计模块位置在DRC后,通过ss_mpi_isp_set_wb_attr接口关闭亮度对白平衡权重的影响,可以优化WDR模式下暗区偏红问题。

【相关数据类型及接口】

ot_isp_awb_exp_func

ot_isp_awb_raw_stat_attr

【说明】

定义AWB库返回给ISP的白点信息配置寄存器结构体。

【定义】

typedef struct {
    td_bool stat_cfg_update;
    td_u16  metering_white_level_awb;
    td_u16  metering_black_level_awb;
    td_u16  metering_cr_ref_max_awb;
    td_u16  metering_cb_ref_max_awb;
    td_u16  metering_cr_ref_min_awb;
    td_u16  metering_cb_ref_min_awb;
} ot_isp_awb_raw_stat_attr;

【成员】

成员名称

描述

stat_cfg_update

该结构体中的值是否需要配置寄存器。

metering_white_level_awb

Bayer域统计白点信息时,找白点的亮度上限。

取值范围:[0x0, 0xFFFF],默认值0xFFF。

metering_black_level_awb

Bayer域统计白点信息时,找白点的亮度下限。

取值范围:[0x0, white_level],默认值0x0。

metering_cr_ref_max_awb

Bayer域统计白点信息时,色差R/G的最大值,8bit精度,默认值512。

metering_cb_ref_max_awb

Bayer域统计白点信息时,色差B/G的最大值,8bit精度,默认值512。

metering_cr_ref_min_awb

Bayer域统计白点信息时,色差R/G的最小值,8bit精度,默认值128。

metering_cb_ref_min_awb

Bayer域统计白点信息时,色差B/G的最小值,8bit精度,默认值128。

图 1 白色区域选择相关参数

【注意事项】

  • ot_isp_awb_raw_stat_attr结构体中的信息决定什么样的像素点被认为是白点,从而参与统计。用户开发新的AWB算法时可以使用默认值,也可以自定义配置,stat_cfg_update标识表明运行时当前帧是否需要配置stat_attr结构体中的值到寄存器。
  • 只支持Bayer域统计信息。

【相关数据类型及接口】

无

ot_isp_awb_overlap_result

【说明】

定义AWB库返回的指定区域的ISP增益信息,用于拼接模块计算重叠区域AWB差异。

【定义】

typedef struct {
    td_u32 left_overlap_zone_awb[OT_ISP_MAX_STITCH_NUM][OT_ISP_BAYER_CHN_NUM];
    td_u32 right_overlap_zone_awb[OT_ISP_MAX_STITCH_NUM][OT_ISP_BAYER_CHN_NUM];
} ot_isp_awb_overlap_result;

【成员】

成员名称

描述

left_overlap_zone_awb

[OT_ISP_MAX_STITCH_NUM][OT_ISP_BAYER_CHN_NUM]

图像左侧重叠区域AWB增益计算结果。

right_overlap_zone_awb

[OT_ISP_MAX_STITCH_NUM][OT_ISP_BAYER_CHN_NUM]

图像右侧重叠区域AWB增益计算结果。

【注意事项】

  • 对于拼接来说,最左侧通路的左边和最右侧通路的右边不属于重叠区域,这两部分仍然会基于设定区域返回结果,但是这一结果不参与后续AWB一致性计算。
  • Hi3516CV610不支持拼接。

【相关数据类型及接口】

无

ot_isp_awb_result

【说明】

定义AWB库返回给ISP的增益配置寄存器结构体。

【定义】

typedef struct {
    td_u32  white_balance_gain[OT_ISP_BAYER_CHN_NUM];
    td_u16  color_matrix[OT_ISP_CCM_MATRIX_SIZE];
    td_u32  color_temp;
    td_u8   saturation;
    td_u16  sector_matrix[OT_ISP_COLOR_SECTOR_NUM][OT_ISP_CCM_MATRIX_SIZE]; /* Not supported for Hi3519DV500 */
    ot_isp_awb_raw_stat_attr raw_stat_attr;
    ot_isp_awb_overlap_result overlap_result;
} ot_isp_awb_result;

【成员】

成员名称

描述

white_balance_gain[OT_ISP_BAYER_CHN_NUM]

白平衡算法得出的R、Gr、Gb、B颜色通道的增益,16bit精度表示。

color_matrix[OT_ISP_CCM_MATRIX_SIZE]

色彩还原矩阵,8bit精度表示。Hi3516CV610使用用户AWB算法时,ISP使用的CCM是sector_matrix的参数。

color_temp

AWB当前的色温。

saturation

当前的饱和度。

sector_matrix[OT_ISP_COLOR_SECTOR_NUM][OT_ISP_CCM_MATRIX_SIZE]

颜色分区调节参数,包含6个颜色区域的CCM矩阵。Hi3519DV500不支持。Hi3516CV610使用用户AWB算法时,ISP使用的CCM是sector_matrix的参数。

raw_stat_attr

定义AWB库返回给ISP的配置寄存器结构体。

overlap_result

重叠区域AWB统计信息。

Hi3516CV610不支持。

【注意事项】

  • AWB算法首先将会计算出R、Gr、Gb、B颜色通道的增益,以校正出白色,16bit精度表明最后16位为小数。
  • WDR模式,AWB统计结果和增益不需要做特别处理,和Linear模式一致。
  • AWB算法其次会计算一个3x3的颜色校正矩阵,以还原出真实的色彩,8bit精度表明最后8位为小数。
  • Hi3516CV610使用用户AWB算法,给ISP配置CCM参数时,如果关闭颜色分区调节功能,即be_cc_sector_en为0,需要将color_matrix参数配置到sector_matrix[0]中使用,即ISP使用的CCM是sector_matrix[0]的参数。如果使用颜色分区调节功能,需要用户算法算出6个颜色区域对应的CCM矩阵,填入sector_matrix。
  • white_balance_gain和color_matrix参数会影响图像数据流,所以配置为全0时,图像变黑。Hi3516CV610的sector_matrix[0]为实际使用的CCM参数,所以这个参数配置为0时,图像变黑。

【相关数据类型及接口】

ot_isp_awb_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_DESCRIPTION_LENGTH];
    td_u8 make[OT_DCF_DESCRIPTION_LENGTH];
    td_u8 model[OT_DCF_DESCRIPTION_LENGTH];
    td_u8 software[OT_DCF_DESCRIPTION_LENGTH];
    td_u8 light_source;
    td_u32 focal_length;
    td_u8 scene_type;
    td_u8 custom_rendered;
    td_u8 focal_length_in35mm_film;
    td_u8 scene_capture_type;
    td_u8 gain_control;
    td_u8 contrast;
    td_u8 saturation;
    td_u8 sharpness;
    td_u8 metering_mode;
} ot_isp_dcf_const_info;

【成员】

成员名称

描述

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

测光模式,用户可设置。

0:unknown;

1:平均测光;

2:中心测光;

3:点测光;

4:多点测光;

5:多区域测光;

6:部分测光;

255:其他。

【注意事项】

无

【相关数据类型及接口】

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_attr

【说明】

定义多路ISP差异参数结构体。

【定义】

typedef struct {
    ot_op_mode op_type;
    td_u8 overlap;
    td_s32 offset[OT_ISP_BAYER_CHN_NUM]
    td_u32 gain[OT_ISP_BAYER_CHN_NUM];
    td_u16 color_matrix[OT_ISP_CCM_MATRIX_SIZE];
} ot_isp_pipe_diff_attr;

【成员】

成员名称

描述

op_type

多路颜色一致性自动和手动切换开关, 取值范围:[0, 1]

overlap

多路拼接重叠区域宽度,取值范围:[1, 16]

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]

【注意事项】

  • op_type是拼接颜色一致性手动和自动切换开关,

    • 0表示auto模式。
    • 1表示manual模式这一开关只有在主通路下才生效,如果拼接后图像拼缝左右存在明显的颜色不一致问题,建议将这一开关切换到auto模式。如果主路拼接区域被遮挡,从路颜色会发生相应的变化,这时建议将开关切到manual模式,同时把从路的四个gain值全部设为256。
  • 在manual模式下,允许手动配置每个通路的AWB额外增益(ot_isp_pipe_diff_attr),相关配置只在对应的pipe中生效。如果切换auto模式,则自动计算每个通路的AWB额外增益(ot_isp_pipe_diff_attr),以实现图像拼缝位置过渡自然。

  • 如果pipe0是主通路,而此时要手动配置pipe1的增益,需要先在pipe0切换为manual模式,然后再切换到pipe1进行配置。

  • overlap指重叠区域相对AWB统计区域的宽度,根据原始拼接图像重叠区域大小预估,目前只支持两路拼接颜色一致性,只有在主通路下才生效,一般同一批次模组可复用同一overlap,如果模组结构发生变化,需要重新适配overlap。

  • 仅ot_isp_black_level_mode配置为OT_ISP_BLACK_LEVEL_MODE_AUTO模式时,offset才有效。

  • ot_isp_pipe_diff_attr主要用于拼接模式下,配置多路图像的亮度和颜色的差异,用于校正多路的图像的差异,从而使得拼接画面融合区域过渡平滑。
  • 四路拼接颜色一致性功能,仅在Hi3519DV500拼接支持的四种模式下能生效,该功能未生效时四路用相同awb增益值。
  • 多路拼接色度一致性功能与亮度一致性功能有耦合,在开启亮度一致性功能前提下,该功能才生效。若亮度一致性功能未打开,多路用的是同一个增益值。
  • Hi3516CV610不支持。

【相关数据类型及接口】

无

ot_isp_ob_stats_update_pos

【说明】

定义读取ob区统计信息的位置。

【定义】

typedef enum {
    OT_ISP_UPDATE_OB_STATS_FE_FRAME_END   = 0,
    OT_ISP_UPDATE_OB_STATS_FE_FRAME_START = 1,
    OT_ISP_UPDATE_OB_STATS_BUTT,
} ot_isp_ob_stats_update_pos;

【成员】

成员名称

描述

OT_ISP_UPDATE_OB_STATS_FE_FRAME_END

在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黑电平寄存器时,有可能会因为计算配置不及时导致不同步的问题出现。
  • Hi3516CV610不支持。

【相关数据类型及接口】

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

【注意事项】

  • 只支持在调用isp_mem_init前修改,不支持isp_mem_init后动态修改。
  • 只支持在物理pipe配置为OT_ISP_ALG_RUN_FE_ONLY。

【相关数据类型及接口】

无

ot_isp_run_wakeup_select

【说明】

定义那个中断驱动ISP firmware。

【定义】

typedef enum {
    OT_ISP_RUN_WAKEUP_FE_START = 0,
    OT_ISP_RUN_WAKEUP_BE_END = 1,
    OT_ISP_RUN_WAKEUP_BUTT,
}ot_isp_run_wakeup_select;

【成员】

成员名称

描述

OT_ISP_RUN_WAKEUP_FE_START

FE帧起始驱动ISP firmware

OT_ISP_RUN_WAKEUP_BE_END

BE帧结束驱动ISP firmware

【注意事项】

  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接口使用。

  3. 如需要从VI捞帧再送raw处理,则可将 ot_isp_run_wakeup_select配置为OT_ISP_RUN_WAKEUP_BE_END,可匹配ss_mpi_isp_run接口使用。这种配置的软件通路为run_be通路。客户自行调ss_mpi_vi_send_pipe_raw接口送raw时,应尽量保证送帧间隔均匀,如送raw持续不均匀,会对曝光比切换、模式切换等场景图像效果产生一定影响。

    run_be相比于run和runonce的方案差异点和优劣势:

    (1)run_be相比于run支持自主送帧操作,但在送帧延迟时间过长时可能出现同步异常。

    (2)run_be和runonce都支持自主送帧操作,run_be支持多路拼接模式送帧操作,runonce不支持多路拼接。runonce软件通路与硬件是串行处理,run_be软件通路与硬件是并行处理,可以将逻辑性能最优化。因此,在追求性能效果的视频处理场景,更推荐使用run_be方案;在抓拍场景更推荐使用runonce方案。

【相关数据类型及接口】

无

ot_isp_ctrl_param

【说明】

定义ISP控制参数结构体。

【定义】

typedef struct {
    td_u8   be_buf_num;
    td_u32  proc_param;
    td_u32  stat_interval; 
    td_u32  update_pos; 
    td_u32  interrupt_time_out;
    td_u32  pwm_num;
    td_u32  port_interrupt_delay;
    td_bool ldci_tpr_flt_en;
    ot_isp_ob_stats_update_pos ob_stats_update_pos;
    ot_isp_alg_run_select alg_run_select;
    td_bool quick_start_en; 
    td_bool long_frame_interrupt_en; 
    ot_isp_run_wakeup_select isp_run_wakeup_select;
} ot_isp_ctrl_param;

【成员】

成员名称

描述

be_buf_num

离线模式下,ISP BE config buffer的数目。仅离线模式有效取值范围:[2, 20],芯片支持AIISP时默认值为8,否则为4。

proc_param

ISP的PROC信息更新频率。默认值30

最小值为0,无上限。proc_param为n表示每隔n帧更新一次ISP的PROC信息。

stat_interval

ISP统计信息更新频率。注意:在高帧率业务时,如120fps及其以上帧率,可通过参数stat_interval设置其ISP统计信息更新频率,从而可降低ISP的CPU占用率,同时降低性能消耗。

取值范围:(0,0xffffffff]

update_pos

默认值为0。

0:根据ot_isp_sns_regs_info结构体中u8IntPos变量的配置值,sensor寄存器在帧起始中断或帧结束中断配置;

其他值:sensor寄存器在帧结束中断配置。

取值范围:[0,1]

interrupt_time_out

表示中断超时的时间(ms)。

pwm_num

表示PWM号。Hi3519DV500默认值为0,Hi3516CV610默认值7。

port_interrupt_delay

表示Port 中断延时时间,默认值为0。

解决部分sensor Half WDR模式下,在前面几行配置sensor寄存器会出现闪烁,需要延时。

port_init_delay是按照VI的工作时钟频率计算,以时钟为单位。如:VI时钟是300MHz。延时1ms,port_init_delay的计算如下:

port_init_delay(1ms)= 300M/1000ms = 300000

注意:port_init_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。

quick_start_en

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

  • quick_start_en=0:ISP初始化时配置sensor序列
  • quick_start_en=1:ISP初始化时不配置sensor序列。

long_frame_interrupt_en

表示WDR 时,ISP是否响应长帧中断,默认值为0。

0:不使能;

1:使能。

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 媒体处理软件Vx.y 开发参考》的VI章节。
  • BE 输入为YUV数据时,OT_ISP_ALG_RUN_FE_ONLY配置无效
  • 通过接口ss_mpi_isp_set_ctrl_param设置quick_start_en快速启动时,接口调用需要在ISP起主业务之前(如:起多路PIPE场景业务时,需要在将接口调用顺序放在起多路主业务之前),且ISP KO已经加载;而ss_mpi_isp_get_ctrl_param接口调用顺序没有限制,可查询当前状态。
  • long_frame_interrupt_en设置为1时,WDR模式时,ISP响应中断次数会增加,会影响ISP中断响应时间。增加cpu负载。
  • 只有在从VI捞帧再灌raw处理的场景下,ISP 需要把中断源选择ot_isp_run_wakeup_select 配置为BE帧结束中断,其他场景下只支持配置为帧起始中断唤醒。
  • 当中断源选择isp_run_wakeup_select 配置为BE帧结束中断时,有如下限制:

    1)不支持帧模式wdr。

    2)执行静态坏点标定时,如果灌raw延时较大且时间不均匀,有可能会导致静态坏点标定失败。

    3)不支持叠加配置中断底半部使用。

    4)不支持sync拼接模式。

    5)不支持从某个物理pipe获取raw,交叉送到另一个物理pipe的使用场景。

    6)不支持从某个物理pipe获取raw,把该帧重复送多次做BE处理的使用场景。

    7)不支持对用户灌raw(raw对应帧信息并非从物理pipe中获取到的帧信息),同时又使用物理pipe过BE处理的场景。

    8)RUN BE模式不支持VI在线(无BE帧结束中断)。

【相关数据类型及接口】

ot_isp_mod_param

【说明】

定义ISP模块参数结构体。

【定义】

typedef struct {
    td_u32 interrupt_bottom_half;
} ot_isp_mod_param;

【成员】

成员名称

描述

interrupt_bottom_half

表示ISP中断处理是否采用底半部机制,默认值为0。

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

【注意事项】

  • 通过接口ss_mpi_isp_set_mod_param设置interrupt_bottom_half中断底半部时,接口调用需要在ISP起主业务之前(如:起多路PIPE场景业务时,需要在将接口调用顺序放在起多路主业务之前),且ISP KO已经加载;而ss_mpi_isp_get_mod_param接口调用顺序没有限制,可查询当前状态。
  • 不支持加载KO时设置ISP模块参数
  • 中断底半部开启,四路拼接模式、线性模式(1080p,120fps)、寄存器固定在消隐区配置的sensor会出现同步异常的问题。
  • 多pipe通路打开底半部,配置外设(sensor)寄存器时容易出现不同步的现象,因此多pipe的通路不支持底半部。如:拼接、mcf、wdr等。

【相关数据类型及接口】

ot_isp_quick_start_param

【说明】

设定不带光敏AE快速启动参数结构体。

【定义】

typedef struct {
    td_bool quick_start_enable;
    td_u8 black_frame_num;
    td_bool ir_mode_en;
    td_u32 init_exposure_ir;
    td_u32 iso_thr_ir;
    td_u16 ir_cut_delay_time;
} ot_isp_quick_start_param;

【成员】

成员名称

描述

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;
    td_u32 ae_stat_pos;
} 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模式下使用。

ae_stat_pos

设置ISP第一次启动时AE使用的统计信息位置,ae_stat_pos为1时使用BE统计信息进行AE曝光,其他值则使用FE统计信息进行曝光。

【注意事项】

  • 在ISP启动前,设置初始AWB增益和CCM系数,可改善前后帧颜色的一致性。
  • 在ISP启动前,设置初始的AE曝光路线,可以实现帧率改变后,AE算法能够将初始设置的AE route保留并自动生效。

【相关数据类型及接口】

ot_isp_sns_mirrorflip_type

【说明】

定义sensor mirror-flip枚举。

【定义】

typedef enum {
    ISP_SNS_NORMAL      = 0,
    ISP_SNS_MIRROR      = 1,
    ISP_SNS_FLIP        = 2,
    ISP_SNS_MIRROR_FLIP = 3,
    ISP_SNS_BUTT
} ot_isp_sns_mirrorflip_type;

【成员】

成员名称

描述

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_info_multi)(ot_vi_pipe vi_pipe, ot_isp_sns_commbus sns_bus_info_multi[], td_u8 num);
    td_s32  (*pfn_set_bus_ex_info)(ot_vi_pipe vi_pipe, ot_isp_sns_bus_ex *serdes_info);
    td_void (*pfn_standby)(ot_vi_pipe vi_pipe);
    td_void (*pfn_restart)(ot_vi_pipe vi_pipe);
    td_void (*pfn_mirror_flip)(ot_vi_pipe vi_pipe, ot_isp_sns_mirrorflip_type sns_mirror_flip);
    td_void (*pfn_set_blc_clamp)(ot_vi_pipe vi_pipe, ot_isp_sns_blc_clamp sns_blc_clamp);
    td_s32  (*pfn_write_reg)(ot_vi_pipe vi_pipe, td_u32 addr, td_u32 data);
    td_s32  (*pfn_read_reg)(ot_vi_pipe vi_pipe, td_u32 addr);
    td_s32  (*pfn_set_init)(ot_vi_pipe vi_pipe, ot_isp_init_attr *init_attr);
    td_s32  (*pfn_set_fast_ae)(ot_vi_pipe vi_pipe, ot_isp_sns_fast_ae_attr *fast_ae_attr);
} ot_isp_sns_obj;

【成员】

成员名称

描述

pfn_register_callback

指向sensor注册函数的指针

pfn_un_register_callback

指向sensor反注册函数的指针

pfn_set_bus_info

指向sensor与I2C/SPI的绑定关系函数的指针

pfn_set_bus_info_multi

指向单pipe下的多个sensor与I2C的绑定关系函数的指针

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初始化参数函数的指针

pfn_set_fast_ae

指向sensor设置FastAE使能的函数的指针。

【注意事项】

单pipe下绑定一个sensor场景可以使用pfn_set_bus_info来绑定sensor与i2c的绑定关系,也可以使用pfn_set_bus_info_multi来绑定sensor与i2c的绑定关系;

单pipe下绑定一个sensor使用pfn_set_bus_info_multi是,num值为1,i2c_dev的值填在sns_bus_info_multi[0]中。

单pipe下绑定多个sensor的场景使用pfn_set_bus_info_multi来绑定sensor与i2c的绑定关系;

单pipe下绑定多个sensor的场景只支持i2c的方式跟sensor通信,不支持ssp的方式

ot_isp_sns_obj是为了区分不同sensor库新增的结构体,用法如下:

ot_isp_sns_obj g_sns_xxx_obj = {
    .pfn_register_callback     = sensor_register_callback,
    .pfn_un_register_callback  = sensor_unregister_callback,
    .pfn_standby             = xxx_standby,
    .pfn_restart               = xxx_restart,
    .pfn_mirror_flip           = xxx_mirror_flip,
    .pfn_set_blc_clamp         = xxx_blc_clamp,
    .pfn_read_reg              = xxx_read_register,
    .pfn_set_bus_info          = xxx_set_bus_info,
    .pfn_set_bus_info_multi    = xxx_set_bus_info_multi,
    .pfn_set_init              = sensor_set_init,
    .pfn_set_fast_ae           = fast_ae_able
};

【相关数据类型及接口】

无

ot_isp_sns_state

【说明】

定义sensor相关全局变量参数结构体。

【定义】

typedef struct {
    td_bool      init;
    td_bool      sync_init;
    td_u8        img_mode;
    td_u8        hdr;
    ot_wdr_mode  wdr_mode;
    ot_isp_sns_regs_info regs_info[ISP_SNS_SAVE_INFO_MAX];
    td_u32      fl[ISP_SNS_SAVE_INFO_MAX];
    td_u32      fl_std;
    td_u32      wdr_int_time[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u32      sns_wb_gain[OT_ISP_BAYER_CHN_NUM];
} ot_isp_sns_state;

【成员】

成员名称

描述

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帧曝光时间。

sns_wb_gain

Sensor应配置的AWB增益。8bit小数精度,取值范围:[0x0, 0xFFF],增益按照RGGB顺序排列。

【注意事项】

  • ot_isp_sns_state是保存cmos.c中全局变量而新增的结构体,多路ISP同时加载sensor库,sensor状态相关的全局变量以vi_pipe进行区别。
  • 默认AWB增益在ISP配置,用户不需要关注sns_wb_gain参数。
  • 实现AWB增益在Sensor配置,需要对回调函数pfn_cmos_get_awb_gains赋值,且将sns_wb_gain参数的AWB增益值配置到对应的Sensor寄存器。

【相关数据类型及接口】

无

ot_isp_awb_alg

【说明】

定义AWB算法类型。

【定义】

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

【注意事项】

Hi3519DV500/Hi3516CV610不支持机器学习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 enable;
    td_u32  normal_to_ir_iso_threshold;
    td_u32  ir_to_normal_iso_threshold;
    td_u32  rg_max;
    td_u32  rg_min;
    td_u32  bg_max;
    td_u32  bg_min;
    ot_isp_ir_status ir_status;
    ot_isp_ir_switch_status ir_switch;
} ot_isp_ir_auto_attr;

【成员】

成员名称

描述

enable

红外自动切换使能。

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

【相关数据类型及接口】

无

ot_isp_cmos_lblc

【说明】

定义Local BLC结构体。

【定义】

typedef struct {
    ot_isp_lblc_attr lblc_attr;
    ot_isp_lblc_lut_attr lblc_lut;
} ot_isp_cmos_lblc;

【成员】

成员名称

描述

lblc_attr

Local BLC算法的参数

lblc_lut

Local BLC表的属性

【注意事项】

Hi3516CV610不支持

【相关数据类型及接口】

ot_isp_cmos_default

ot_isp_fe_roi_cfg

【说明】

定义fe roi区域的配置

【定义】

typedef struct {
    td_bool enable;
    ot_rect roi_rect;
} ot_isp_fe_roi_cfg;

【成员】

成员名称

描述

enable

fe roi功能的开关。

TD_FALSE:关闭;

TD_TRUE:使能。

roi_rect

roi区域的起始坐标和宽高。roi区域不能超过图像有效范围,长宽不能小于最小分辨率120x88和不能大于图像有效宽度,坐标以及长宽必须2对齐。

【注意事项】

Hi3516CV610不支持。

【相关数据类型及接口】

无

AE

概述

ISP AE模块实现的功能是:根据自动测光系统获得当前图像的曝光量,再自动配置镜头光圈、sensor快门及增益来获得最佳的图像质量。自动曝光的算法主要分光圈优先、快门优先、增益优先。光圈优先时算法会优先调整光圈到合适的位置,再分配曝光时间和增益,只适合p-iris镜头,这样能均衡噪声和景深。快门优先时算法会优先分配曝光时间,再分配sensor增益和ISP增益,这样拍摄的图像噪声会比较小。增益优先则是优先分配sensor增益和ISP增益,再分配曝光时间,适合拍摄运动物体的场景。当前AE算法也支持客户设定更灵活的曝光分配策略,AE模块的工作流程如图1所示。

图 1 AE模块工作流程图

重要概念

  • 曝光时间:sensor积累电荷的时间,是sensor pixel从开始曝光到电量被读出的这段时间。
  • 曝光增益:对sensor的输出电荷的总的放大系数,一般有数字增益和模拟增益,模拟增益引入的噪声会稍小,所以一般优先用模拟增益。
  • 光圈:光圈是镜头中可以改变中间孔大小的机械装置。
  • 抗闪烁:由于电灯的电源工频与sensor的帧率不匹配而导致的画面闪烁,一般通过限定曝光时间和修改sensor的帧率来达到抗闪烁的效果。

功能描述

AE模块主要有ISP的AE统计信息模块及AE控制策略的AE算法Firmware两部分组成。ISP的AE统计信息模块主要是提供sensor输入数据的亮度信息统计。其提供的统计信息包括直方图和平均值,可同时提供整幅图像的1024段的直方图和R/Gr/Gb/B四分量平均值统计信息,还可提供将整幅图像分成MxN区块的每个区块的R/Gr/Gb/B四分量平均值统计信息,具体如图1所示。

图 1 AE 1024段统计信息直方图

AE算法的主要工作原理是实时获取输入图像的统计信息并与设定目标亮度进行比较,而动态调节sensor的曝光时间和增益以及镜头光圈大小以达到实际亮度与设定目标亮度接近。其工作原理如图2所示。

图 2 AE工作原理图

API参考

AE库接口

所有AE库接口都只是针对SDK提供的AE库,如果客户自己实现AE库,不需要关注这些接口,且无法使用这些接口。

ss_mpi_ae_register

【描述】

向ISP注册AE库。

【语法】

td_s32 ss_mpi_ae_register(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *ae_lib);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_lib

AE算法库结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_ae.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 该接口调用了ISP库提供的AE注册回调接口ss_mpi_isp_ae_lib_reg_callback,以实现SDK提供的AE库向ISP库注册的功能。
  • AE库可以注册多个实例。
  • 不支持向同一ISP pipe重复注册同一个AE库。
  • 此接口不支持多进程操作。

【举例】

ot_vi_pipe vi_pipe = 0;
ae_lib.id = 0;
strcpy(ae_lib.lib_name, OT_AE_LIB_NAME);
ss_mpi_ae_register(vi_pipe, &ae_lib);
ae_lib.id  = 1; 
ss_mpi_ae_register(vi_pipe, &ae_lib);

【相关主题】

无

ss_mpi_ae_unregister

【描述】

向ISP反注册AE库。

【语法】

td_s32 ss_mpi_ae_unregister(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_ae.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 该接口调用了ISP库提供的AE反注册回调接口ss_mpi_isp_ae_lib_unreg_callback,以实现AE向ISP库反注册的功能。
  • 此接口不支持多进程操作。

【举例】

ot_vi_pipe vi_pipe = 0;
ae_lib.id = 0;strcpy(ae_lib.lib_name, OT_AE_LIB_NAME); 
ss_mpi_ae_unregister(vi_pipe, & ae_lib);
ae_lib.id = 1; 
ss_mpi_ae_unregister(vi_pipe, & ae_lib);

【相关主题】

无

ss_mpi_ae_sensor_reg_callback

【描述】

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

【语法】

td_s32 ss_mpi_ae_sensor_reg_callback(ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *ae_lib, const ot_isp_sns_attr_info *sns_attr_info, ot_isp_ae_sensor_register *pregister);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_lib

AE算法库结构体指针。

输入

sns_attr_info

向AE注册的Sensor的属性。

输入

pregister

Sensor注册结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_ae.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a

【注意】

  • SensorId是sensor库中自定义的值,主要用于校对向ISP注册的sensor和向3A注册的sensor是否为同一个sensor。
  • AE通过sensor注册的一系列回调接口,获取差异化的初始化参数,并控制sensor。
  • 此接口不支持多进程操作。

图 1 AE库与sensor库间的接口

【举例】

ot_isp_3a_alg_lib ae_lib;
ot_isp_ae_sensor_register  ae_register;
ot_isp_sns_attr_info   sns_attr_info;
ot_isp_ae_sensor_exp_func *exp_func = &ae_register.sns_exp;
(td_void)memset_s(exp_func, sizeof(ot_isp_ae_sensor_exp_func), 0, sizeof(ot_isp_ae_sensor_exp_func));
exp_func->pfn_cmos_get_ae_default    = cmos_get_ae_default;
exp_func->pfn_cmos_fps_set           = cmos_fps_set;
exp_func->pfn_cmos_slow_framerate_set= cmos_slow_framerate_set;    
exp_func->pfn_cmos_inttime_update    = cmos_inttime_update;
exp_func->pfn_cmos_gains_update      = cmos_gains_update;
exp_func->pfn_cmos_again_calc_table  = cmos_again_calc_table;
exp_func->pfn_cmos_dgain_calc_table  = cmos_dgain_calc_table;
exp_func->pfn_cmos_get_inttime_max   = cmos_get_inttime_max;
exp_func->pfn_cmos_ae_fswdr_attr_set = cmos_ae_fswdr_attr_set;
exp_func->pfn_cmos_ae_quick_start_status_set = cmos_ae_quick_start_status_set;

ot_vi_pipe vi_pipe = 0;
ae_lib.id = 0;
sns_attr_info.sns_id = HY_S0603_ID;
strncpy(ae_lib.lib_name, OT_AE_LIB_NAME, sizeof(OT_AE_LIB_NAME));
ret = ss_mpi_ae_sensor_reg_callback(vi_pipe, &ae_lib, &sns_attr_info, &ae_register);
if (ret != TD_SUCCESS) {
    printf("sensor register callback function to ae lib failed!\n");
    return ret;
}

【相关主题】

无

ss_mpi_ae_sensor_unreg_callback

【描述】

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

【语法】

td_s32 ss_mpi_ae_sensor_unreg_callback(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *ae_lib, ot_sensor_id sns_id);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_lib

AE算法库结构体指针。

输入

sns_id

向AE反注册的Sensor的Id。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_ae.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a

【注意】

  • SensorId是sensor库中自定义的值,主要用于校对向ISP反注册的sensor和向3A反注册的sensor是否为同一个sensor。
  • 此接口不支持多进程操作。

【举例】

ot_isp_3a_alg_lib ae_lib;
ot_vi_pipe vi_pipe = 0;
ae_lib.id = 0;
strncpy(ae_lib.lib_name, OT_AE_LIB_NAME, sizeof(OT_AE_LIB_NAME));
ret = ss_mpi_ae_sensor_unreg_callback(vi_pipe, &ae_lib, HY_S0603_ID);
if (ret != TD_SUCCESS) {
    printf("sensor register callback function to ae lib failed!\n");
    return ret;
}

【相关主题】

无

AE控制模块

曝光控制接口:

ss_mpi_isp_set_exposure_attr

【描述】

设定AE曝光属性。

【语法】

td_s32 ss_mpi_isp_set_exposure_attr (ot_vi_pipe vi_pipe, const ot_isp_exposure_attr *exp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

exp_attr

AE曝光属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a

【注意】

  • AE曝光控制类型为自动时,曝光时间,曝光增益都由AE算法自动控制,可以通过配置自动曝光属性结构体ot_isp_ae_attr里面的参数得到不同的曝光效果。
  • AE曝光控制类型为手动时,可以通过配置手动曝光属性结构体manual_attr控制使能类型(曝光时间使能、sensor模拟增益使能、sensor数字增益使能、ISP数字增益使能)及相应的曝光参数(曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益)。
  • AE曝光控制类型为自动时,配置手动曝光属性的参数无效。同理,AE曝光控制类型为手动时,配置自动曝光属性的参数无效。
  • AE曝光控制类型为手动时,若曝光参数设置超出最大(小)值,将使用sensor支持的最大(小)值代替。
  • 无论是自动曝光还是手动曝光,曝光时间的单位为微秒(us),曝光增益的单位为10bit精度的倍数,即1024代表1倍,2048代表2倍等。
  • WDR模式下,优先帧设置为长帧时,优先根据长帧的曝光路线进行曝光,其中2合1WDR模式下当增益分开配置时,短帧曝光路线根据长帧的曝光参数进行调整;优先帧设置为短帧时,优先根据短帧的曝光路线进行曝光,其中2合1WDR模式下当增益分开配置时,长帧曝光路线根据短帧的曝光参数进行调整。
  • 2合1WDR模式下,设置增益分开配置,若sensor支持长短帧不同增益,可实现长短帧不同的sensor模拟增益、sensor数字增益、WDR增益,若sensor不支持长短帧不同增益,可实现长短帧不同的WDR增益。

【举例】

自动曝光属性设置:

ot_vi_pipe vi_pipe = 0;
ot_isp_exposure_attr exp_attr;

ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr.bypass = TD_FALSE;   
exp_attr.prior_frame= OT_ISP_LONG_FRAME;
exp_attr.ae_gain_sep_cfg= TD_FALSE; 
exp_attr.op_type= OT_OP_MODE_AUTO;       
exp_attr.auto_attr.exp_time_range.max = 40000;
exp_attr.auto_attr.exp_time_range.min = 10;       
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr.auto_attr.speed = 0x80;      
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr.auto_attr.exp_attr =OT_ISP_AE_EXP_HIGHLIGHT_PRIOR;   
exp_attr.auto_attr.hist_ratio_slope= 0x100;
exp_attr.auto_attr.max_hist_offset= 0x40;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr.auto_attr.antiflicker.enable= TD_TRUE;
exp_attr.auto_attr.antiflicker.frequency= 50;
exp_attr.auto_attr.antiflicker.mode= OT_ISP_ANTIFLICKER_NORMAL_MODE;
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr.auto_attr.ae_delay_attr.black_delay_frame = 10;
exp_attr.auto_attr.ae_delay_attr.white_delay_frame = 0;
ss_mpi_isp_set_exposure_attr(vi_pipe, &exp_attr);     

手动曝光属性设置:

ot_vi_pipe vi_pipe = 0;
ot_isp_exposure_attr exp_attr;  
ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr);
exp_attr. bypass= TD_FALSE;
exp_attr. op_type= OT_OP_MODE_MANUAL;       
exp_attr.manual_attr.a_gain_op_type = OT_OP_MODE_MANUAL;
exp_attr.manual_attr.d_gain_op_type = OT_OP_MODE_MANUAL
exp_attr.manual_attr.ispd_gain_op_type = OT_OP_MODE_MANUAL;
exp_attr.manual_attr.exp_time_op_type = OT_OP_MODE_MANUAL;
exp_attr.manual_attr.a_gain = 0x400;
exp_attr.manual_attr.d_gain = 0x400;
exp_attr.manual_attr.isp_d_gain = 0x400;
exp_attr.manual_attr.exp_time = 0x40000;     
ss_mpi_isp_set_exposure_attr(vi_pipe, &exp_attr);

【相关主题】

ss_mpi_isp_get_exposure_attr

ss_mpi_isp_get_exposure_attr

【描述】

获取AE曝光属性。

【语法】

td_s32 ss_mpi_isp_get_exposure_attr(ot_vi_pipe vi_pipe, ot_isp_exposure_attr *exp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

exp_attr

AE曝光属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_exposure_attr

ss_mpi_isp_set_wdr_exposure_attr

【描述】

设置WDR模式下的AE曝光属性。

【语法】

td_s32 ss_mpi_isp_set_wdr_exposure_attr(ot_vi_pipe vi_pipe, const ot_isp_wdr_exposure_attr *wdr_exp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

wdr_exp_attr

WDR模式下的AE曝光属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a

【注意】

Hi3516CV608不支持

【举例】

无

【相关主题】

ss_mpi_isp_get_wdr_exposure_attr

ss_mpi_isp_get_wdr_exposure_attr

【描述】

获取WDR模式下的AE曝光属性。

【语法】

td_s32 ss_mpi_isp_get_wdr_exposure_attr(ot_vi_pipe vi_pipe, ot_isp_wdr_exposure_attr *wdr_exp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

wdr_exp_attr

WDR模式下的AE曝光属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libss_mpi_isp.a、libot_mpi_isp.a、libss_mpi_ae.a

【注意】

Hi3516CV608不支持

【举例】

无

【相关主题】

ss_mpi_isp_set_wdr_exposure_attr

ss_mpi_isp_set_hdr_exposure_attr

【描述】

设置HDR模式下的AE曝光属性。

【语法】

td_s32 ss_mpi_isp_set_hdr_exposure_attr(ot_vi_pipe vi_pipe, const ot_isp_hdr_exposure_attr *hdr_exp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

hdr_exp_attr

HDR模式下的AE曝光属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

Hi3519DV500和Hi3516CV610不支持HDR模式。

【举例】

无

【相关主题】

ss_mpi_isp_get_hdr_exposure_attr

ss_mpi_isp_get_hdr_exposure_attr

【描述】

获取HDR模式下的AE曝光属性。

【语法】

td_s32 ss_mpi_isp_get_hdr_exposure_attr(ot_vi_pipe vi_pipe, ot_isp_hdr_exposure_attr *hdr_exp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

hdr_exp_attr

HDR模式下的AE曝光属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

Hi3519DV500和Hi3516CV610不支持HDR模式。

【举例】

无

【相关主题】

ss_mpi_isp_set_hdr_exposure_attr

ss_mpi_isp_set_smart_exposure_attr

【描述】

设置智能模式下的AE曝光属性。仅在有智能信息时生效。

【语法】

td_s32 ss_mpi_isp_set_smart_exposure_attr(ot_vi_pipe vi_pipe, const ot_isp_smart_exposure_attr *smart_exp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

smart_exp_attr

智能模式下的AE曝光属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 客户使用此功能时可通过自己的智能模块得到相应智能信息并传递给ISP,传递方式可参考ss_mpi_isp_set_smart_info接口,ISP得到人脸或人形的亮度信息后,会针对性地调节曝光,以使人脸或人形亮度达到设定的目标值。
  • 接口使用详见ot_isp_smart_exposure_attr说明。

【举例】

无

【相关主题】

ss_mpi_isp_get_smart_exposure_attr

ss_mpi_isp_get_smart_exposure_attr

【描述】

获取智能模式下的AE曝光属性。仅在有智能信息时生效。

【语法】

td_s32 ss_mpi_isp_get_smart_exposure_attr(ot_vi_pipe vi_pipe, ot_isp_smart_exposure_attr *smart_exp_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

smart_exp_attr

智能模式下的AE曝光属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_smart_exposure_attr

ss_mpi_isp_set_fast_face_ae_attr

【描述】

设置人脸快速收敛模式下的AE曝光属性。仅在有人脸坐标信息时生效。

【语法】

td_s32 ot_mpi_isp_set_fast_face_ae_attr(ot_vi_pipe vi_pipe, const ot_isp_fast_face_ae_attr *fast_face_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

fast_face_attr

人脸快速收敛模式下的AE曝光属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【举例】

ot_vi_pipe vi_pipe = 0;
ot_isp_fast_face_ae_attr fast_face_attr;
ss_mpi_isp_get_fast_face_ae_attr (vi_pipe, &fast_face_attr);
fast_face_attr. enable = TD_TRUE;
ss_mpi_isp_set_fast_face_ae_attr (vi_pipe, &fast_face_attr);

【相关主题】

ss_mpi_isp_get_fast_face_ae_attr

【描述】

获取人脸快速收敛模式下的AE曝光属性。仅在有人脸坐标信息时生效。

【语法】

td_s32 ot_mpi_isp_get_fast_face_ae_attr(ot_vi_pipe vi_pipe, ot_isp_fast_face_ae_attr *fast_face_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

fast_face_attr

人脸快速收敛模式下的AE曝光属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【举例】

ot_vi_pipe vi_pipe = 0;
ot_isp_fast_face_ae_attr fast_face_attr;
ss_mpi_isp_get_fast_face_ae_attr (vi_pipe, &fast_face_attr);
fast_face_attr. enable = TD_TRUE;
ss_mpi_isp_set_fast_face_ae_attr (vi_pipe, &fast_face_attr);

【相关主题】

ss_mpi_isp_set_ae_route_attr

【描述】

设置AE曝光分配策略属性。

【语法】

td_s32 ss_mpi_isp_set_ae_route_attr(ot_vi_pipe vi_pipe, const ot_isp_ae_route *ae_route_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_route_attr

AE曝光分配策略结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 此接口用于设定AE曝光分配路线,AE计算得到的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光优先、增益优先、光圈优先。
  • AE分配路线示意图如图1所示。AE分配路线遵循以下限定:
    • 最大支持16个节点,每个节点有曝光时间、增益、光圈三个分量,增益包含模拟增益、数字增益、ISP数字增益。
    • 节点中曝光时间的单位为us,不能设置为0,也不能设置太小导致实际对应的曝光行数为0,否则可能产生异常。
    • 光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制,所以DC-Iris和手动光圈镜头光圈分量是无效的。即光圈类型为DC-Iris时,节点光圈分量不会对曝光量分配产生任何影响。
    • 节点的曝光量是曝光时间、增益和光圈的乘积,节点曝光量单调递增,后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。
    • 如果相邻节点的曝光量增加,那么应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如增益分量增加,那么该段路线的分配策略是增益优先。
    • 不支持设置等曝光量节点。
    • 用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
    • AE分配路线不能用于限制曝光参数的最大值和最小值。如果当前曝光量不在用户设定的路线范围当中,即曝光量超出了第一个节点或最后一个节点,曝光参数分配会超出节点限制,但不超过参数本身范围限制。
    • 针对DC-Iris和手动光圈镜头,默认AE分配策略是首先分配曝光时间,其次分配增益。针对P-Iris镜头,默认AE分配策略是首先调节光圈,将光圈调至最大后调节曝光时间,最后再分配增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
    • 在线进行DC-Iris和P-Iris切换,AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置AE route。
    • 2合1WDR模式下,优先帧为短帧且增益分开配置不使能时,AE route不生效。
    • 自动降帧时,若cmos.c里面设置了AE route,则在切换后会采用cmos.c中的AE route,否则采用已生效的AE route。同时,最大曝光时间的改变会更新到AE route中。
    • 线性模式与WDR模式切换时,若cmos.c里面设置了AE route,则在切换后会采用cmos.c中的route,否则采用默认的AE route。
    • 帧率或分辨率切换时,若用户设置的最大曝光目标时间大于切换后1帧所允许的最大曝光时间,那么分配路线的最大曝光时间会更新为切换后1帧所允许的最大曝光时间。
    • 发生自动降帧、线性与WDR模式切换、帧率或分辨率切换、优先帧切换、增益分开配置切换、限制曝光时间或增益的最大最小值等情况时,实际生效的AE route可能与MPI设置的不一致,此时可以通过ss_mpi_isp_query_exposure_info获取实际生效的AE route。

图 1 AE分配路线示意图

【举例】

ot_vi_pipe vi_pipe = 0;
ot_isp_ae_route ae_route;
td_u32 route_node[3][3]
         = {{100,1024,1},{40000,1024,1},{40000,16384,1}};

ss_mpi_isp_get_ae_route_attr(vi_pipe, &ae_route);
ae_route.total_num = 3;
memcpy(ae_route. route_node, route_node, sizeof(route_node));
ss_mpi_isp_set_ae_route_attr(vi_pipe, &ae_route);

【相关主题】

ss_mpi_isp_get_ae_route_attr

【描述】

获取AE曝光分配策略属性。

【语法】

td_s32 ss_mpi_isp_get_ae_route_attr(ot_vi_pipe vi_pipe, ot_isp_ae_route *ae_route_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_route_attr

AE曝光分配策略结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_ae_route_attr

ss_mpi_isp_set_ae_route_attr_ex

【描述】

设置AE曝光分配扩展属性,支持分别设置AE分配策略中的sensor模拟增益,sensor数字增益和ISP数字增益。

【语法】

td_s32 ss_mpi_isp_set_ae_route_attr_ex(ot_vi_pipe vi_pipe, const ot_isp_ae_route_ex *ae_route_attr_ex);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_route_attr_ex

AE曝光分配策略扩展属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 此接口用于设定AE曝光分配扩展属性,AE计算得到的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光时间优先、sensor模拟增益优先、sensor数字增益优先、ISP数字增益优先和光圈优先。该接口可用于设置WDR模式下的曝光分配路线,减轻正常室内照度多帧合成WDR产生的工频闪现象,优化WDR模式图像效果。
  • AE曝光分配扩展属性是否生效可通过配置ss_mpi_isp_set_exposure_attr接口中的ae_route_ex_valid来实现。ae_route_ex_valid为TD_TRUE时使用扩展AE route,否则使用正常AE route。
  • AE扩展分配路线遵循以下限定:
    • 最大支持16个节点,每个节点有曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈五个分量。
    • 节点中曝光时间的单位为us,不能设置为0,也不能设置太小导致实际对应的曝光行数为0,否则可能产生异常。
    • 光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制,所以DC-Iris和手动光圈镜头光圈分量是无效的。即光圈类型为DC-Iris时,节点光圈分量不会对曝光量分配产生任何影响。
    • 节点的曝光量是曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈的乘积,节点曝光量单调递增,后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。
    • 如果相邻节点的曝光量增加,那么应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如sensor模拟增益分量增加,那么该段路线的分配策略是sensor模拟增益优先。
    • 不支持设置等曝光量节点。
    • 用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
    • AE分配路线不能用于限制曝光参数的最大值和最小值。如果当前曝光量不在用户设定的路线范围当中,即曝光量超出了第一个节点或最后一个节点,曝光参数分配会超出节点限制,但不超过参数本身范围限制。
    • 针对DC-Iris和手动光圈镜头,默认AE扩展分配策略是先分配曝光时间,再分配sensor模拟增益、sensor数字增益,最后分配ISP数字增益。针对P-Iris镜头,默认AE扩展分配策略是先调节光圈,将光圈调至最大后调节曝光时间,最后再分配sensor模拟增益、sensor数字增益和ISP数字增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
    • 在线进行DC-Iris和P-Iris切换,扩展AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置扩展AE route。
    • 2合1WDR模式下,优先帧为短帧且增益分开配置不使能时,扩展AE route不生效。
    • 自动降帧时,最大曝光时间的改变会更新到分配路线中。
    • 线性模式与WDR模式切换时,若cmos.c里面设置了扩展AE route,且cmos.c中的扩展AE route标识符ae_route_ex_valid为TD_TRUE,则在切换后会采用cmos.c中的扩展AE route,否则采用默认的AE route。
    • 帧率或分辨率切换时,若用户设置的最大曝光目标时间大于切换后1帧所允许的最大曝光时间,那么分配路线的最大曝光时间会更新为切换后1帧所允许的最大曝光时间。
    • 发生自动降帧、线性与WDR模式切换、帧率或分辨率切换、优先帧切换、增益分开配置切换、限制曝光时间或增益的最大最小值等情况时,实际生效的扩展AE route可能与MPI设置的不一致,此时可以通过ss_mpi_isp_query_exposure_info获取实际生效的扩展AE route。

【举例】

ot_vi_pipe vi_pipe = 0;
ot_isp_exposure_attr exp_attr;
ot_isp_ae_route_ex ae_route_attr_ex;
td_u32  route_ex_node [6][5]
        = {{   30,  1024,  1024, 1024, 0},
           {   30,  1024,  1024, 1024, 10},
           {   30, 16384,  1024, 1024, 10},
           {1000000, 16384,  1024, 1024, 10},
           {1000000, 16384, 16384, 1024, 10},
           {1000000, 16384, 16384, 4096, 10}};
ss_mpi_isp_get_ae_route_attr_ex(vi_pipe, &ae_route_attr_ex);ss_mpi_isp_get_exposure_attr(vi_pipe, &exp_attr); 
exp_attr.ae_route_ex_valid = TD_TRUE;
ae_route_attr_ex.total_num = 6;
memcpy(ae_route_attr_ex.route_ex_node, route_ex_node, sizeof(route_ex_node));
ss_mpi_isp_set_ae_route_attr_ex (vi_pipe, & ae_route_attr_ex);
ss_mpi_isp_set_exposure_attr (vi_pipe, &exp_attr);

【相关主题】

ss_mpi_isp_get_ae_route_attr_ex

【描述】

获取AE曝光分配策略扩展属性。

【语法】

td_s32 ss_mpi_isp_get_ae_route_attr_ex(ot_vi_pipe vi_pipe, ot_isp_ae_route_ex *ae_route_attr_ex);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_route_attr_ex

AE曝光分配策略扩展属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

无。

【举例】

无。

【相关主题】

ss_mpi_isp_set_ae_route_attr_ex

ss_mpi_isp_set_ae_route_sf_attr

【描述】

WDR模式下,设置AE短帧的曝光分配策略属性。

【语法】

td_s32 ss_mpi_isp_set_ae_route_sf_attr(ot_vi_pipe vi_pipe, const ot_isp_ae_route *ae_route_sf_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_route_sf_attr

AE短帧的曝光分配策略结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 此接口用于WDR模式下设定AE短帧的曝光分配路线,AE计算得到的短帧的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光优先、增益优先、光圈优先。
  • Hi3516CV608不支持。
  • AE分配路线遵循以下限定:
    • 最大支持16个节点,每个节点有曝光时间、增益、光圈三个分量,增益包含模拟增益、数字增益、ISP数字增益。
    • 节点中曝光时间的单位为us,不能设置为0,也不能设置太小导致实际对应的曝光行数为0,否则可能产生异常。
    • 光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制,所以DC-Iris和手动光圈镜头光圈分量是无效的。即光圈类型为DC-Iris时,节点光圈分量不会对曝光量分配产生任何影响。光圈分量仅在优先帧为短帧时可控。
    • 节点的曝光量是曝光时间、增益和光圈的乘积,节点曝光量单调递增,后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。
    • 如果相邻节点的曝光量增加,那么应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如增益分量增加,那么该段路线的分配策略是增益优先。
    • 不支持设置等曝光量节点。
    • 用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
    • AE分配路线不能用于限制曝光参数的最大值和最小值。如果当前曝光量不在用户设定的路线范围当中,即曝光量超出了第一个节点或最后一个节点,曝光参数分配会超出节点限制,但不超过参数本身范围限制。
    • 针对DC-Iris和手动光圈镜头,默认AE分配策略是首先分配曝光时间,其次分配增益。针对P-Iris镜头,默认AE分配策略是首先调节光圈,将光圈调至最大后调节曝光时间,最后再分配增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
    • 在线进行DC-Iris和P-Iris切换,短帧AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置短帧AE route。
    • 优先帧为长帧且增益分开配置不使能、以及线性模式下,短帧AE route不生效。
    • 自动降帧时,最大曝光时间的改变会更新到分配路线中。
    • 线性模式与WDR模式切换时,若cmos.c里面设置了短帧AE route,则在切换后会采用cmos.c中的route,否则采用默认的短帧AE route。
    • 2合1WDR模式下,帧率或分辨率切换时,若用户设置的最大曝光目标时间大于切换后1帧所允许的最大曝光时间的一半,那么分配路线的最大曝光时间会更新为切换后1帧所允许的最大曝光时间的一半。
    • 发生自动降帧、线性与2合1WDR模式切换、帧率或分辨率切换、优先帧切换、增益分开配置切换、限制曝光时间或增益的最大最小值等情况时,实际生效的AE route可能与MPI设置的不一致,此时可以通过ss_mpi_isp_query_exposure_info获取实际生效的短帧AE route。

【举例】

ot_vi_pipe vi_pipe = 0;
ot_isp_ae_route ae_route_sf_attr;
td_u32 route_node [3][3]
         = {{100,1024,1},{20000,1024,1},{20000,16384,1}};

ss_mpi_isp_get_ae_route_sf_attr (vi_pipe, & ae_route_sf_attr);
ae_route_sf_attr. total_num = 3;
memcpy(ae_route_sf_attr. route_node, route_node, sizeof(route_node));
ss_mpi_isp_set_ae_route_sf_attr (vi_pipe, & ae_route_sf_attr);

【相关主题】

ss_mpi_isp_get_ae_route_sf_attr

【描述】

获取AE短帧曝光分配策略属性。

【语法】

td_s32 ss_mpi_isp_get_ae_route_sf_attr(ot_vi_pipe vi_pipe, ot_isp_ae_route *ae_route_sf_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_route_sf_attr

AE短帧的曝光分配策略结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

Hi3516CV608不支持。

【举例】

无

【相关主题】

ss_mpi_isp_set_ae_route_sf_attr

ss_mpi_isp_set_ae_route_sf_attr_ex

【描述】

WDR模式下,设置AE短帧的曝光分配策略扩展属性。

【语法】

td_s32 ss_mpi_isp_set_ae_route_sf_attr_ex(ot_vi_pipe vi_pipe, const ot_isp_ae_route_ex *ae_route_sf_attr_ex);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_route_sf_attr_ex

AE短帧的曝光分配策略扩展属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 此接口用于WDR模式下设定AE短帧的曝光分配扩展属性,AE计算得到的短帧的曝光量将按照设定的路线进行分配,用户可以根据自己的需求设定曝光时间优先、sensor模拟增益优先、sensor数字增益优先、ISP数字增益优先和光圈优先。
  • AE曝光分配扩展属性是否生效可通过配置ss_mpi_isp_set_exposure_attr接口中的ae_route_ex_valid来实现。ae_route_ex_valid为TD_TRUE时使用扩展AE route,否则使用正常AE route。
  • Hi3516CV608不支持。
  • AE扩展分配路线遵循以下限定:
    • 最大支持16个节点,每个节点有曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈五个分量。
    • 节点中曝光时间的单位为us,不能设置为0,也不能设置太小导致实际对应的曝光行数为0,否则可能产生异常。节点曝光时间应设置不超过sensor最大曝光时间的一半。
    • 光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制,所以DC-Iris和手动光圈镜头光圈分量是无效的。即光圈类型为DC-Iris时,节点光圈分量不会对曝光量分配产生任何影响。光圈分量仅在优先帧为短帧时可控。
    • 节点的曝光量是曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈的乘积,节点曝光量单调递增,后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。
    • 如果相邻节点的曝光量增加,那么应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如sensor模拟增益分量增加,那么该段路线的分配策略是sensor模拟增益优先。
    • 不支持设置等曝光量节点。
    • 用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
    • AE分配路线不能用于限制曝光参数的最大值和最小值。如果当前曝光量不在用户设定的路线范围当中,即曝光量超出了第一个节点或最后一个节点,曝光参数分配会超出节点限制,但不超过参数本身范围限制。
    • 针对DC-Iris和手动光圈镜头,默认AE扩展分配策略是先分配曝光时间,再分配sensor模拟增益、sensor数字增益,最后分配ISP数字增益。针对P-Iris镜头,默认AE扩展分配策略是先调节光圈,将光圈调至最大后调节曝光时间,最后再分配sensor模拟增益、sensor数字增益和ISP数字增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
    • 在线进行DC-Iris和P-Iris切换,扩展AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置短帧扩展AE route。
    • 优先帧为长帧且增益分开配置不使能、以及线性模式下,短帧扩展AE route不生效。
    • 自动降帧时,最大曝光时间的改变会更新到分配路线中。
    • 线性模式与WDR模式切换时,若cmos.c里面设置了短帧扩展AE route,且cmos.c中的扩展AE route标识符ae_route_ex_valid为TD_TRUE,则在切换后会采用cmos.c中的短帧扩展AE route,否则采用默认的短帧AE route。
    • 2合1WDR模式下,帧率或分辨率切换时,若用户设置的最大曝光目标时间大于切换后1帧所允许的最大曝光时间,那么分配路线的最大曝光时间会更新为切换后1帧所允许的最大曝光时间。
    • 发生自动降帧、线性与WDR模式切换、帧率或分辨率切换、优先帧切换、增益分开配置切换、限制曝光时间或增益的最大最小值等情况时,实际生效的扩展AE route可能与MPI设置的不一致,此时可以通过ss_mpi_isp_query_exposure_info获取实际生效的短帧扩展AE route。

【举例】

ot_vi_pipe vi_pipe = 0;
ot_isp_exposure_attr exp_attr;
ot_isp_ae_route_ex ae_route_sf_attr_ex;
td_u32 route_ex_node [6][5]
        = {{   30,  1024,  1024, 1024, 0},
           {   30,  1024,  1024, 1024, 10},
           {   30, 16384,  1024, 1024, 10},
           {20000, 16384,  1024, 1024, 10},
           {20000, 16384, 16384, 1024, 10},
           {20000, 16384, 16384, 4096, 10}};
ss_mpi_isp_get_ae_route_sf_attr_ex (vi_pipe, & ae_route_sf_attr_ex);
ss_mpi_isp_get_exposure_attr (vi_pipe, &exp_attr);    
exp_attr. ae_route_ex_valid= TD_TRUE;
ae_route_sf_attr_ex. total_num= 6;
memcpy(ae_route_sf_attr_ex. route_ex_node, route_ex_node, sizeof(route_ex_node));
ss_mpi_isp_set_ae_route_sf_attr_ex (vi_pipe, &ae_route_sf_attr_ex);
ss_mpi_isp_set_exposure_attr (vi_pipe, &exp_attr);

【相关主题】

ss_mpi_isp_get_ae_route_sf_attr_ex

【描述】

获取AE短帧曝光分配策略扩展属性。

【语法】

td_s32 ss_mpi_isp_get_ae_route_sf_attr_ex(ot_vi_pipe vi_pipe, ot_isp_ae_route_ex *ae_route_sf_attr_ex);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

ae_route_sf_attr_ex

AE曝光分配策略扩展属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

Hi3516CV608不支持。

【举例】

无。

【相关主题】

ss_mpi_isp_set_ae_route_sf_attr_ex

ss_mpi_isp_query_exposure_info

【描述】

获取AE内部状态信息,包括全局1024段直方图和平均亮度等统计信息,同时还可获取AE运行状态中的曝光时间、增益、曝光量和实际生效的AE route等信息。

【语法】

td_s32 ss_mpi_isp_query_exposure_info(ot_vi_pipe vi_pipe, ot_isp_exp_info *exp_info);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

exp_info

曝光内部状态信息结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 获取的曝光时间以微秒(us)为单位,获取的sensor模拟增益、sensor数字增益和ISP数字增益以倍数为单位,精度是10bit。
  • 获取的曝光量=(曝光时间 * 曝光增益),未考虑光圈状态,其中曝光时间以行数为单位,曝光增益包括sensor模拟增益、sensor数字增益和ISP数字增益,以倍数为单位,6bit小数精度。若该值的精度不足以满足需求,可以根据上面高精度的曝光时间(us)和增益(10bit小数精度)重新计算一个曝光量。
  • 可通过查询hist_error来获取AE是否稳定的信息,若hist_error的绝对值小于曝光容忍偏差值,意味着当前AE不会动作。
  • 通过该接口获取的AE route与Proc信息中的AE route都是实际生效的值。只不过该接口的节点曝光时间以us为单位,而Proc信息中的曝光时间以行数为单位;该接口的光圈分量为F值大小,取值范围为[0,10],而Proc信息中的光圈分量为F值等效增益,大小为(1<<F值)。扩展AE route以及短帧AE route和短帧扩展AE route也是同样的对应关系。
  • 若用户使用非SDK提供的AE算法,则该接口需要自己实现并且需要同步修改PQTOOLS的xml文件,具体修改方式请参考《图像质量调试工具使用指南》“物理/虚拟寄存器的添加与调试”小节。
  • 调用该接口需要确保系统已经运行起来并且统计信息已经生成;当系统刚运行起来第一帧,AE内部还没有统计信息时,调用该接口统计信息会返回全0,这时候系统内存是足够的。

【举例】

ot_vi_pipe vi_pipe = 0;
ot_isp_exp_info exp_info;
ss_mpi_isp_query_exposure_info (vi_pipe, &exp_info);

printf("Sensor exposure time: %d\n",exp_info.exp_time);
printf("Analog Gain: %d\n",exp_info. a_gain);
printf("Digital Gain: %d\n",exp_info. d_gain);
printf("ISP Gain: %d\n",exp_info. isp_d_gain);
printf("Exposure: %d\n",exp_info. exposure);
printf("Average Luminance: %d\n",exp_info. ave_lum);
printf("Hist error: %d\n",exp_info. hist_error);
exp_info. exposure_is_max? printf("Exposure is MAX!\n") : printf("Exposure is NOT MAX!\n");
for(i = 0; i < 1024; i++)
{
     printf("Hist1024Value[%d]: %d\n",i, exp_info. ae_hist1024_value [i]);
}

【相关主题】

无

ss_mpi_isp_set_exp_convert

【描述】

设定等曝光量转换的曝光参数相关属性。

【语法】

td_s32 ss_mpi_isp_set_exp_convert(ot_vi_pipe vi_pipe, const ot_isp_exp_conv_param *conv_param);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

conv_param

等曝光量转换相关曝光量属性指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

作为输入的值,除了值要设定输入的vi_pipe号,还需对conv_param中的成员变量tar_fps进行设置目标帧率即可。

【举例】

ot_vi_pipe vi_pipe = 0;
    td_s32 i;
    ot_isp_exp_conv_param conv_param;

    conv_param. tar_fps= 3000;

    ss_mpi_isp_set_exp_convert (vi_pipe, &conv_param);
    ss_mpi_isp_get_vd_time_out(vi_pipe, OT_ISP_VD_FE_START, 50);
    ss_mpi_isp_get_exp_convert (vi_pipe, &conv_param);
    for (i = 0; i < 4; i++) {
        printf("time_reg. reg_addr [%d]: 0x%x, time_reg. reg_value [%d]: 0x%x\n", i, conv_param. time_reg [i]. reg_addr, i, conv_param. time_reg [i]. reg_value);

        printf("again_reg. reg_addr [%d]: 0x%x, again_reg. reg_value [%d]: 0x%x\n", i, conv_param. again_reg [i]. reg_addr, i, conv_param. again_reg [i]. reg_value);
        printf("dgain_reg. reg_addr [%d]: 0x%x, dgain_reg. reg_value [%d]: 0x%x\n", i, conv_param. dgain_reg [i]. reg_addr, i, conv_param. dgain_reg [i]. reg_value);
    }

【相关主题】

无

ss_mpi_isp_get_exp_convert

【描述】

获取等曝光量转换的曝光参数相关属性。

【语法】

td_s32 ss_mpi_isp_get_exp_convert(ot_vi_pipe vi_pipe, ot_isp_exp_conv_param *conv_param);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

conv_param

等曝光量转换相关曝光量属性指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 转换出来的Sensor曝光时间、模拟增益、数字增益均为Sensor寄存器的值并有对应的寄存器地址,可以直接配给Sensor寄存器使用。转换出来的ISP数字增益以倍数为单位,精度是10bit。
  • 转换出来的Sensor曝光时间、模拟增益、数字增益分别最多为10个寄存器值和10个寄存器地址。

【举例】

无

【相关主题】

无

AI控制模块

光圈控制接口:

ss_mpi_isp_set_iris_attr

【描述】

设定光圈的控制属性,该函数可实现手动光圈属性和光圈类型等参数的设置。

【语法】

td_s32 ss_mpi_isp_set_iris_attr(ot_vi_pipe vi_pipe, const ot_isp_iris_attr *iris_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

iris_attr

光圈控制属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • 进行AI算法测试前,建议确认AI电路特性是否符合_录像机_要求。
  • 根据实际对接镜头光圈类型,设置正确的光圈类型属性,由此再去设置相关的DC-Iris/P-Iris控制属性。若对接的是手动光圈镜头,可将光圈类型设置为OT_ISP_IRIS_DC_TYPE,建议此时关闭AI使能。
  • 手动光圈属性主要用于调试,可通过该MPI进行设置。对于P-Iris镜头,手动iris_fno值会受到最大、最小光圈目标值的影响。自动光圈属性的更多参数需要调用ss_mpi_isp_set_dciris_attr和ss_mpi_isp_get_piris_attr进行设置。

【举例】

无

【相关主题】

ss_mpi_isp_get_iris_attr

【描述】

获取光圈的控制属性。

【语法】

td_s32 ss_mpi_isp_get_iris_attr(ot_vi_pipe vi_pipe, ot_isp_iris_attr *iris_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

iris_attr

光圈控制属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

无

【举例】

无

【相关主题】

无

ss_mpi_isp_set_dciris_attr

【描述】

设定DC-Iris AI算法的控制属性,该函数可实现DC-Iris自动光圈的参数设置。

【语法】

td_s32 ss_mpi_isp_set_dciris_attr(ot_vi_pipe vi_pipe, const ot_isp_dciris_attr *dciris_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

dciris_attr

DC-Iris自动光圈控制属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • DC-Iris光圈控制采用PID算法,算法根据画面亮度,调节PWM占空比对光圈大小进行控制。当曝光时间和增益达到最小目标值之后,会进入光圈控制区域。当光圈控制能满足目标亮度的要求时,AE直接返回,保持曝光时间和增益不变。当画面亮度稳定且PWM占空比维持在打开值一段时间后,AI算法会认为光圈已经打开至最大,退出光圈控制区,将控制权交还给AE。处于光圈控制区时,更改AE算法参数,如最大/最小曝光时间、最大/最小增益和抗闪等需要即时生效的参数,AE会即时响应,根据新设定的参数和环境亮度,AI算法重新决定是否要进入光圈控制区。由于进入光圈控制区域和退出光圈控制区域需要短暂时间,针对手动光圈镜头建议关闭AI功能,否则AE的调节速度会受到一点影响。针对DC-Iris镜头建议一直打开AI功能,随意开关AI容易导致光圈控制出现异常。针对某些长焦的DC-Iris镜头,默认参数可能会导致光圈打开/关闭速度过快,此时可以调节相关参数来解决,详见ot_isp_dciris_attr部分描述。
  • 关闭AI功能,对于DC-Iris镜头,光圈会打开到最大。

【举例】

无

【相关主题】

ss_mpi_isp_get_dciris_attr

【描述】

获取DC-Iris自动光圈的控制属性。

【语法】

td_s32 ss_mpi_isp_get_dciris_attr(ot_vi_pipe vi_pipe, ot_isp_dciris_attr *dciris_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

dciris_attr

DC-Iris自动光圈控制属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

无

【举例】

无

【相关主题】

无

ss_mpi_isp_set_piris_attr

【描述】

设定P-Iris自动光圈的控制属性。

【语法】

td_s32 ss_mpi_isp_set_piris_attr(ot_vi_pipe vi_pipe, const ot_isp_piris_attr *piris_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

piris_attr

P-Iris自动光圈控制属性结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

  • P-Iris自动光圈控制属性包含一个只写参数step_fno_table_change,建议先对该结构体赋值,set MPI接口一次之后再get MPI 接口,直接get再set MPI可能会报错。
  • P-Iris镜头光圈控制通过AE分配路线进行。P-Iris对接重点在于正确设置镜头相关参数和合理设置AE分配路线,详见ot_isp_piris_attr和ss_mpi_isp_set_ae_route_attr部分描述,才能保证P-Iris正常工作。由于不同P-Iris的驱动方式可能会有差别,用户可以自行修改P-Iris驱动以适配不同镜头。
  • 关闭AI功能,对于P-Iris镜头,光圈会打开到最大光圈目标值对应步进电机位置。
  • 单光圈多pipe时,只能有一个pipe的AE控制光圈,其余pipe不能控制光圈,即当一路pipe enable光圈控制,其余路应设置为disable。

【举例】

ot_vi_pipe vi_pipe = 0;
    ot_isp_piris_attr  piris_attr, piris_attr_def;
    td_u16 total_step_def = 93;
    td_u16 step_count_def = 62;
    td_u16 step_fno_table_def[1024] = {30,35,40,45,50,56,61,67,73,79,85,92,98,105,112,120,127,135,143,150,158,166,174,183,191,200,208,217,225,234,243,252,261,270,279,289,298,307,316,325,335,344,353,362,372,381,390,399,408,417,426,435,444,453,462,470,478,486,493,500,506,512};
    ot_isp_iris_f_no  max_iris_fno_target_def = 9;
    ot_isp_iris_f_no  min_iris_fno_target_def = 5;
    piris_attr_def. step_fno_table_change= TD_TRUE;
    piris_attr_def. zero_is_max= TD_TRUE;
    piris_attr_def. step_count= step_count_def;
    piris_attr_def. total_step= total_step_def;
    piris_attr_def. max_iris_fno_target = max_iris_fno_target_def;
    piris_attr_def. min_iris_fno_target = min_iris_fno_target_def;
    memcpy(piris_attr_def. step_fno_table, step_fno_table_def, sizeof(piris_attr_def. step_fno_table));
    ss_mpi_isp_set_piris_attr (vi_pipe, &piris_attr_def);
    ss_mpi_isp_get_piris_attr (vi_pipe, &piris_attr);

【相关主题】

ss_mpi_isp_get_piris_attr

【描述】

获取P-Iris自动光圈的控制属性。

【语法】

td_s32 ss_mpi_isp_get_piris_attr(ot_vi_pipe vi_pipe, ot_isp_piris_attr *piris_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

piris_attr

P-Iris自动光圈控制属性结构体指针。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_isp.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_ae.a

【注意】

无

【举例】

无

【相关主题】

无

数据类型

Register

OT_ISP_HIST_NUM

【说明】

定义直方图bin的数目。

【定义】

#define OT_ISP_HIST_NUM       1024

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_AI_MAX_STEP_FNO_NUM

【说明】

定义光圈的最大步数。

【定义】

#define OT_ISP_AI_MAX_STEP_FNO_NUM      1024

【注意事项】

无。

【相关数据类型及接口】

ot_isp_piris_attr

ot_isp_ae_sensor_register

【说明】

定义sensor注册结构体。

【定义】

typedef struct {
    ot_isp_ae_sensor_exp_func sns_exp;
} ot_isp_ae_sensor_register;

【成员】

成员名称

描述

sns_exp

Sensor注册的回调函数结构体。

【注意事项】

封装的目的是为了扩展。

【相关数据类型及接口】

ot_isp_ae_sensor_exp_func

ot_isp_ae_sensor_exp_func

【说明】

定义sensor回调函数结构体。

【定义】

typedef struct {
    td_s32 (*pfn_cmos_get_ae_default)(ot_vi_pipe vi_pipe, ot_isp_ae_sensor_default *ae_sns_dft);

    /* the function of sensor set fps */
    td_void (*pfn_cmos_fps_set)(ot_vi_pipe vi_pipe, td_float f32_fps, ot_isp_ae_sensor_default *ae_sns_dft);
    td_void (*pfn_cmos_slow_framerate_set)(ot_vi_pipe vi_pipe, td_u32 full_lines, ot_isp_ae_sensor_default *ae_sns_dft);

    /* while isp notify ae to update sensor regs, ae call these funcs. */
    td_void (*pfn_cmos_inttime_update)(ot_vi_pipe vi_pipe, td_u32 int_time);
    td_void (*pfn_cmos_gains_update)(ot_vi_pipe vi_pipe, td_u32 again, td_u32 dgain);

    td_void (*pfn_cmos_again_calc_table)(ot_vi_pipe vi_pipe, td_u32 *again_lin, td_u32 *again_db);
    td_void (*pfn_cmos_dgain_calc_table)(ot_vi_pipe vi_pipe, td_u32 *dgain_lin, td_u32 *dgain_db);

    td_void (*pfn_cmos_get_inttime_max)(ot_vi_pipe vi_pipe, td_u16 man_ratio_enable, td_u32 *ratio,
                                        ot_isp_ae_int_time_range *int_time, td_u32 *lf_max_int_time);

    /* long frame mode set */
    td_void (*pfn_cmos_ae_fswdr_attr_set)(ot_vi_pipe vi_pipe, ot_isp_ae_fswdr_attr *ae_fswdr_attr);
    td_void (*pfn_cmos_ae_quick_start_status_set)(ot_vi_pipe vi_pipe, td_bool quick_start_status);
    td_void (*pfn_cmos_exp_param_convert)(ot_vi_pipe vi_pipe, ot_isp_ae_convert_param *exp_param);
    td_s32 (*pfn_cmos_get_thermo_default)(ot_vi_pipe vi_pipe, ot_isp_thermo_sensor_default *thermo_sns_dft);
    td_void (*pfn_cmos_ae_fast_ae_attr_get)(ot_vi_pipe vi_pipe, ot_isp_ae_fast_ae_attr *fast_ae_attr);
    td_void (*pfn_cmos_ae_fast_ae_attr_set)(ot_vi_pipe vi_pipe, const ot_isp_ae_fast_ae_attr *fast_ae_attr);
} ot_isp_ae_sensor_exp_func;

【成员】

成员名称

描述

pfn_cmos_get_ae_default

获取AE算法库的初始值的回调函数指针。

pfn_cmos_fps_set

设置sensor的帧率。

pfn_cmos_slow_framerate_set

设置sensor的降帧。

pfn_cmos_inttime_update

设置sensor的曝光时间。

pfn_cmos_gains_update

设置sensor的模拟增益和数字增益。

pfn_cmos_again_calc_table

计算TABLE类型sensor模拟增益。

pfn_cmos_dgain_calc_table

计算TABLE类型sensor数字增益。

pfn_cmos_get_inttime_max

WDR模式下,计算短帧最大曝光时间的回调函数指针,与sensor强相关。

pfn_cmos_ae_fswdr_attr_set

LineWDR模式下,设置长帧模式。

pfn_cmos_ae_quick_start_status_set

设置AE无光敏快启收敛状态。

pfn_cmos_get_thermo_default

获取thermo算法库的初始值的回调函数指针。

pfn_cmos_ae_fast_ae_attr_get

获取驱动中Fast AE开关是否使能。

pfn_cmos_ae_fast_ae_attr_set

设置驱动中Fast AE的开关。

【注意事项】

  • 如果回调函数指针不需要赋值,需要置为NULL。
  • 在ot_isp_ae_sensor_default中定义了曝光时间和增益的精度,pfn_cmos_inttime_update和pfn_cmos_gains_update中设置的曝光时间和增益都是带精度的值,如何转换成sensor的配置值与sensor强相关,请参阅sensor手册。
  • 不使用无光敏快启功能时,pfn_cmos_ae_quick_start_status_set需要设置为NULL。
  • quick_start_status是AE无光敏快启收敛状态的标志位。该值为TD_TRUE时,无光敏快启收敛完成。
  • 只有在注册Thermo库时,才需要使用pfn_cmos_get_thermo_default成员,注册AE库时,无需操作pfn_cmos_get_thermo_default成员。
  • 在注册Thermo库时,只需要使用pfn_cmos_get_thermo_default成员,其他成员无需操作。
  • ot_isp_ae_fast_ae_attr是Fast AE的开关。该值为TD_TRUE时,AE进行一次快速收敛,完成后AE会通过pfn_cmos_ae_fast_ae_attr_set把FastAE使能关闭。

【相关数据类型及接口】

ot_isp_sns_register

ot_isp_ae_sensor_default

【说明】

定义AE算法库的初始化参数结构体。

【定义】

typedef struct {
    td_u8   ae_compensation;
    td_u32  lines_per500ms;
    td_u32  flicker_freq;
    td_float fps;
    td_u32  hmax_times;
    td_u32  init_exposure;
    td_u32  init_int_time;
    td_u32  init_again;
    td_u32  init_dgain;
    td_u32  init_isp_dgain;
    td_u32  init_ae_speed;
    td_u32  init_ae_tolerance;
    td_u32  full_lines_std;
    td_u32  full_lines_max;
    td_u32  full_lines;
    td_u32  binning_full_lines;
    td_u32  max_int_time;
    td_u32  min_int_time;
    td_u32  max_int_time_target;
    td_u32  min_int_time_target;
    ot_isp_ae_accuracy int_time_accu;
    td_u32  max_again;
    td_u32  min_again;
    td_u32  max_again_target;
    td_u32  min_again_target;
    ot_isp_ae_accuracy again_accu;
    td_u32  max_dgain;
    td_u32  min_dgain;
    td_u32  max_dgain_target;
    td_u32  min_dgain_target;
    ot_isp_ae_accuracy dgain_accu;
    td_u32  max_isp_dgain_target;
    td_u32  min_isp_dgain_target;
    td_u32  isp_dgain_shift;
    td_u32  max_int_time_step;
    td_bool  max_time_step_enable;
    td_u32  max_inc_time_step[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u32  max_dec_time_step[OT_ISP_WDR_MAX_FRAME_NUM];
    td_u32  lf_max_short_time;
    td_u32  lf_min_exposure;
    ot_isp_ae_route ae_route_attr;
    td_bool ae_route_ex_valid;
    ot_isp_ae_route_ex ae_route_attr_ex;
    ot_isp_ae_route ae_route_sf_attr;
    ot_isp_ae_route_ex ae_route_sf_attr_ex;
    td_u16 man_ratio_enable;
    td_u32 arr_ratio[OT_ISP_EXP_RATIO_NUM];
    ot_isp_iris_type  iris_type;
    ot_isp_piris_attr piris_attr;
    ot_isp_iris_f_no  max_iris_fno;
    ot_isp_iris_f_no  min_iris_fno;
    ot_isp_ae_strategy ae_exp_mode;
    td_u16 iso_cal_coef;
    td_u8  ae_run_interval;
    td_u32 exp_ratio_max;
    td_u32 exp_ratio_min;
    td_bool diff_gain_support;
    ot_isp_quick_start_param quick_start;
    ot_isp_prior_frame prior_frame;
    td_bool ae_gain_sep_cfg;
    td_bool lhcg_support;
    td_u32 sns_lhcg_exp_ratio;
    td_u8 ae_stat_pos;
} ot_isp_ae_sensor_default;

【成员】

成员名称

描述

ae_compensation

AE亮度目标值,取值范围为[0,255],建议用0x38~0x40。

lines_per500ms

每500ms的总行数。

flicker_freq

抗闪频率,数值为当前电源频率的256倍。

fps

基准帧率。

hmax_times

Sensor读出一行的时间,单位:ns。

init_exposure

默认初始曝光量,等于曝光时间与曝光增益的乘积,其中曝光时间的单位为微秒(us)。AE算法采用该值作为初始5帧的曝光量,可用于运动DV加速启动。

建议关注快速启动的产品形态根据常用场景配置一个合适的初始曝光量,以达到AE快速收敛。线性/WDR模式切换时,也会采用该值作为切换后第一帧的曝光量。合理修改sensor初始化序列的曝光时间和增益,将曝光时间(行数)*增益(6bit小数精度)计算得到曝光量,并赋值给该变量,可使得切换更加平滑。若不设置,该值默认为0。

init_int_time

初始化曝光时间

init_again

初始化模拟增益

init_dgain

初始化数字增益

init_isp_dgain

初始化ISP数字增益

init_ae_speed

默认初始AE调节速度,AE算法采用该值作为初始100帧的调节速度,可用于运动DV加速启动。

建议关注快速启动的产品形态可将该值配置为128。若不设置,该值默认为0。AE算法内部会将该值钳位至[64, 255]。

init_ae_tolerance

默认初始AE曝光容忍偏差,AE算法采用该值作为初始100帧的曝光容忍偏差值,可用于设置得到首次AE收敛稳定标志的亮度范围。AE统计亮度第一次落在[目标亮度- init_ae_tolerance,目标亮度+ init_ae_tolerance]范围内时,得到首次AE收敛稳定标志。若不设置,该值默认为0。若在cmos.c不对该值赋值或赋值为0,则AE算法内部将其置为ae_compensation /10。AE算法内部会将该值钳位至(0, 255]。

full_lines_std

基准帧率时1帧的有效行数。

full_lines_max

sensor降帧后1帧所能达到的最大行数,一般设为sensor所支持的最大行数。

full_lines

sensor每帧实际生效的总行数。使用AE算法时,回调cmos_fps_set和cmos_slow_framerate_set时必须给该值赋值,用于返回每帧实际生效的总行数。

binning_full_lines

sensor在binning模式下的等效曝光总行数,以行为单位。

max_int_time

最大曝光时间,以行为单位。

min_int_time

最小曝光时间,以行为单位。

max_int_time_target

最大曝光时间目标值,以行为单位。

min_int_time_target

最小曝光时间目标值,以行为单位。

int_time_accu

曝光时间精度。

max_again

最大模拟增益,以倍为单位。

min_again

最小模拟增益,以倍为单位。

max_again_target

最大模拟增益目标值,以倍为单位。

min_again_target

最小模拟增益目标值,以倍为单位。

again_accu

模拟增益精度。

max_dgain

最大数字增益,以倍为单位。

min_dgain

最小数字增益,以倍为单位。

max_dgain_target

最大数字增益目标值,以倍为单位。

min_dgain_target

最小数字增益目标值,以倍为单位。

dgain_accu

数字增益精度。

max_isp_dgain_target

最大ISP数字增益目标值,以倍为单位。

min_isp_dgain_target

最小ISP数字增益目标值,以倍为单位。

isp_dgain_shift

ISP数字增益精度。

max_int_time_step

自动长帧模式下普通模式和长帧模式之前切换过程中,对短帧曝光时间减小的最大调整步长,以行数为单位。仅在自动长帧模式下有效。

max_time_step_enable

短帧曝光时间最大步长限定开关,该值为TD_TRUE时,短帧曝光时间最大步长限制功能生效。仅在2帧行合成WDR模式下生效。

max_inc_time_step [OT_ISP_WDR_MAX_FRAME_NUM]

目前只开放max_inc_time_step [0],max_inc_time_step [0]为短帧曝光时间增加的最大步长,以行为单位。即下一帧的曝光行数相比当前帧增加的最大曝光行数不超过max_inc_time_step [0]。仅在2帧行合成WDR模式下max_time_step_enable开关使能后生效。

max_dec_time_step [OT_ISP_WDR_MAX_FRAME_NUM]

目前只开放max_dec_time_step [0],max_dec_time_step [0]为短帧曝光时间减少的最大步长,以行为单位。即下一帧的曝光行数相比当前帧减少的最大曝光行数不超过max_dec_time_step [0]。仅在2帧行合成WDR模式下max_time_step_enable开关使能后生效。

lf_max_short_time

自动长帧模式下短帧最大曝光时间。

lf_min_exposure

自动长帧模式下强制输出长帧的最小曝光量。

ae_route_attr

AE默认分配路线。

ae_route_ex_valid

AE扩展分配路线是否生效开关,该值为TD_TRUE时使用扩展分配路线,否则使用普通AE分配路线。

ae_route_attr_ex

AE默认扩展分配路线,合理配置可用于优化WDR模式图像效果。

ae_route_sf_attr

AE短帧默认分配路线。

ae_route_sf_attr_ex

AE短帧默认扩展分配路线,合理配置可用于优化WDR模式图像效果。

man_ratio_enable

多帧合成WDR手动曝光比使能,该值为TD_TRUE时,曝光比固定,不会根据场景自动更新。

arr_ratio [OT_ISP_EXP_RATIO_NUM]

多帧合成WDR相邻2帧默认曝光比。当man_ratio_enable为TD_TRUE时,采用arr_ratio [0]作为S/VS默认曝光比,arr_ratio [1]作为M/S默认曝光比,arr_ratio [2]作为L/M默认曝光比。上述VS,S,M,L分别表示极短帧,短帧,中帧和长帧的曝光时间,2帧合成时只有VS和S;3帧合成时采用VS,S和M;4帧合成时采用VS,S,M和L。6bit小数精度。

取值范围:[0x40, 0x4000]

iris_type

默认镜头类型,DC-Iris或P-Iris。默认镜头类型与实际对接镜头类型不一致时,AI算法无法正常工作。

piris_attr

P-Iris参数,与具体镜头相关。只有默认镜头类型是P-Iris时,才需要用该结构体参数。

max_iris_fno

P-Iris可用的最大F值,与具体使用镜头相关,使用P-Iris时必须设置,用于限制实际生效的max_iris_fno_target和min_iris_fno_target,避免光圈目标值落到不合理的范围导致AE分配异常。

取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。

min_iris_fno

P-Iris可用的最小F值,与具体使用镜头相关,使用P-Iris时必须设置,用于限制实际生效的max_iris_fno_target和min_iris_fno_target,避免光圈目标值落到不合理的范围导致AE分配异常。

取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。

ae_exp_mode

默认曝光策略,高光优先或低光优先。建议FSWDR模式设置为低光优先,线性模式及BuiltIn WDR设置为高光优先。若不设置该值,默认为高光优先。

iso_cal_coef

ISO标定系数,用于保证拍照所需DCF信息中显示的ISO是标准的,8bit精度。

取值范围:[0x0, 0xFFFF],默认值为0x100。

ae_run_interval

默认AE算法运行间隔,以帧为单位。若不设置,则默认AE每帧执行一次。

取值范围:(0x0, 0xFF]

exp_ratio_max

默认最大曝光比,仅在多帧合成WDR模式下有效。

  • 当man_ratio_enable为TD_FALSE时,exp_ratio_max表示最长帧与最短帧曝光时间比值的最大值。即2帧合成时表示S/VS曝光比的最大值,3帧合成时表示M/VS曝光比的最大值,4帧合成时表示L/VS曝光比的最大值。
  • 当man_ratio_enable为TD_TRUE时,exp_ratio_max无效。 6bit小数精度,0x40表示曝光比为1倍。

取值范围:[0x40, 0x4000]

exp_ratio_min

默认最小曝光比,仅在多帧合成WDR模式下有效。

  • 当man_ratio_enable为TD_FALSE时,exp_ratio_min表示长帧曝光时间与短帧曝光时间比值的最小值。
  • 当man_ratio_enable为TD_TRUE时,exp_ratio_min无效。 6bit小数精度,0x40表示曝光比为1倍。

取值范围:[0x40, exp_ratio_max]

diff_gain_support

在打开ae_gain_sep_cfg的情况下,该值为TD_TRUE,AE能够对sensor长短帧配置不同增益,该值为TD_FALSE时,AE对sensor长短帧配置的增益相同。

quick_start

设置不带光敏快启相关参数。

prior_frame

WDR模式下曝光路线生效的优先帧, 线性模式下此参数需配置为LONG_FRAME。

ae_gain_sep_cfg

长短帧增益是否分开分配。

lhcg_support

Sensor是否使用LCG+HCG模式,该值为TD_TRUE时,Sensor使用LCG+HCG模式,该值为TD_FALSE时,Sensor使用普通模式。

sns_lhcg_exp_ratio

LCG+HCG模式的基础曝光比。

ae_stat_pos

AE使用的统计信息的位置,ae_stat_pos为1时使用BE统计信息进行AE曝光,其他值则使用FE统计信息进行曝光。

【注意事项】

  • 线性/WDR模式切换时,会回调pfn_cmos_get_ae_default函数更新AE相关默认参数。若WDR模式要使用AE扩展分配路线而线性模式不需要,建议在cmos_get_ae_default函数里面先对AE路线清零:ae_route_ex_valid= TD_FALSE,ae_route_attr. total_num= 0,ae_route_attr_ex. total_num= 0,然后视需要在WDR分支赋值。
  • SDK提供的AE算法采用init_exposure作为初始5帧的曝光量,可用于运动DV加速启动。建议关注快速启动的产品形态根据常用场景配置一个合适的初始曝光量,以达到AE快速收敛。FSWDR模式该值对应的是长帧曝光量,FSWDR模式若要快速启动,最好在cmos.c设置为固定曝光比,以减少曝光比调整的时间,待AE稳定后再根据需要设置为自动曝光比。若在cmos.c未给init_exposure赋值或将init_exposure赋值为0,则AE算法内部按起始曝光量为1024开始计算。WDR模式切换时,SDK提供的AE算法内部会计算切换曝光量以保证切换平滑,如果希望在WDR模式切换时init_exposure生效,可以通过配置init_ae_speed为0xFFFFFFFF实现。
  • 对于特定Sensor,如 DCG模式,内部仅支持固定曝光比,需要配置man_ratio_enable= TD_TRUE,并把ratio配置为Sensor支持的固定曝光比,如果使用自动曝光比或手动配置为不支持的曝光比,会使图像效果不正常。
  • max_int_time_step自动长帧模式下普通模式和长帧模式之前切换过程中, 对短帧曝光时间减小的最大调整步长,以行数为单位。仅在自动长帧模式下有效。此参数针对短帧曝光时间减小过快会出现坏帧的sensor开放,一般sensor可以设定为较大值,则可以受此参数限制。
  • max_time_step_enable,max_inc_time_step [0],max_dec_time_step [0],这部分参数针对2合1行合成WDR模式下,短帧曝光时间前后2帧之间增加或者减少有限制的sensor开放。
  • lf_max_short_time为自动长帧模式下短帧曝光时间的最大值,如果此参数设置过小会导致自动长帧模式下亮区噪声表现变差。
  • 对于支持LCG+HCG模式的Sensor,如果使用该模式,需正确配置基础曝光比sns_lhcg_exp_ratio,并且必须配置prior_frame= OT_ISP_LONG_FRAME,ae_gain_sep_cfg= TD_TRUE,否则会使图像效果不正常。
  • ae_stat_pos 不支持在AE使用过程中切换,只有在AE初始化、系统模式切换的时候才能切换使用的统计信息。
  • WDR模式不支持使用BE统计信息进行AE曝光。
  • ae_stat_pos 不建议在使用BE统计信息时改BE统计信息的位置。
  • BE统计信息受前端模块影响,使用BE统计信息相比使用FE统计信息相同的目标亮度整体亮度可能会有差异。

【相关数据类型及接口】

ot_isp_sns_exp_func

ot_isp_ae_accuracy_type

【说明】

定义曝光时间、增益的精度类型的枚举。

【定义】

typedef enum {
    OT_ISP_AE_ACCURACY_DB = 0,
    OT_ISP_AE_ACCURACY_LINEAR,
    OT_ISP_AE_ACCURACY_TABLE,
    OT_ISP_AE_ACCURACY_BUTT,
} ot_isp_ae_accuracy_type;

【成员】

成员名称

描述

OT_ISP_AE_ACCURACY_DB

DB精度类型。

OT_ISP_AE_ACCURACY_LINEAR

线性精度类型。

OT_ISP_AE_ACCURACY_TABLE

表格类型。

【注意事项】

无

【相关数据类型及接口】

ot_isp_ae_accuracy

【说明】

定义曝光时间、增益的精度的结构体。

【定义】

typedef struct {
    ot_isp_ae_accuracy_type accu_type;
    float   accuracy;
    float   offset;
} ot_isp_ae_accuracy;

【成员】

成员名称

描述

accu_type

精度类型,包括线性类型、DB类型和TABLE类型。

accuracy

精度值。

offset

曝光时间的偏移量,支持正负偏移量设置,以行为单位,该值配置与sensor强相关。

【注意事项】

  • 大部分增益的精度均可归结为线性精度、DB精度和TABLE精度这几类。
  • 线性精度指的是增益的倍数均匀增加。例如sensor能支持的again为1倍,1(1+1/16)倍,1(1+2/16)倍……这种情况下,精度类型可以设定为OT_ISP_AE_ACCURACY_LINEAR,精度值设置为0.0625,在这种精度下,again为32则表示32*0.0625= 2倍增益。
  • DB精度指的是增益的倍数以倍增的形式增加。例如sensor的芯片手册说明能支持的again为0db,0.3db,0.6db……这种情况下,精度类型可以设定为OT_ISP_AE_ACCURACY_DB,精度值设置为0.3,在这种精度下,again为80则表示80*0.3db=24db,24db是16倍增益。再例如sensor能支持的again为1倍,2倍,4倍,8倍……这种情况下,对应为db则为0db,6db,12db,18db,所以精度类型设定为OT_ISP_AE_ACCURACY_DB,精度值设置为6。由于AE算法内部实现线性转DB时计算精度存在误差,当DB精度较高(小于1)时,建议采用TABLE精度来实现。
  • TABLE精度指增益的倍数是通过查表的形式获得,表格统一使用10bit精度,即1024表示1倍增益。当某些sensor的增益值的增加规律不线性或者DB精度较高时,可以使用TABLE方式,AE算法计算出需要的模拟增益/数字增益的数值,用查询sensor增益表格中最接近的值作为数字增益/模拟增益的值。
  • 使用TABLE模式时,需要相应的初始化回调结构体ot_isp_ae_sensor_exp_func中的回调函数。
  • 曝光时间的精度通常都是线性的,都是以行为单位。若曝光时间为线性精度,精度accuracy为大于1的整数,则意味着AE计算出来的曝光行数只能为最小曝光时间加上accuracy的整数倍。该功能可用于计算某些sensor WDR模式下的长/短帧曝光时间,如某些sensor曝光行数必须为2n+1,则可以配置最小曝光时间为1或3,配置accuracy为2。
  • 曝光时间与sensor增益保持线性关系是AE曝光量分配的前提,即认为曝光量一定的情况下,曝光时间和sensor增益可以相互转换而保持图像亮度基本不变。比如说曝光量为4096,那么分配为曝光时间(2)*增益(2048),也可以分配为曝光时间(4)*增益(1024),这2种情况下图像亮度应该基本不变。若不满足这种线性关系,在高亮环境下,由于曝光时间很短,1行曝光时间的变化也容易使画面发生闪烁。某些sensor采用1080p@30fps的初始化序列配置时,曝光时间必须偏移X行之后才与sensor增益有线性关系,因此增加了offset这个变量,它为float型变量,以行为单位,将offset设置成X,AE算法内部即可完成偏移处理。一般sensor的曝光时间和增益不存在这种偏移关系,需在cmos.c中将该值配为0。
  • 规定这3种精度类型,可以以统一的接口形式对接绝大部分sensor。

【相关数据类型及接口】

ot_isp_sns_register

AE

ot_isp_ae_mode

【说明】

定义自动曝光的模式。

【定义】

typedef enum {
    OT_ISP_AE_MODE_SLOW_SHUTTER = 0,
    OT_ISP_AE_MODE_FIX_FRAME_RATE  = 1,
    OT_ISP_AE_MODE_BUTT
} ot_isp_ae_mode;

【成员】

成员名称

描述

OT_ISP_AE_MODE_SLOW_SHUTTER

自动降帧模式,即SLOW_SHUTTER模式。

OT_ISP_AE_MODE_FIX_FRAME_RATE

固定帧率模式。

【注意事项】

  • 自动降帧模式是指自动曝光调节时会优先增大曝光时间来尽量减小增益。当sensor增益达到用户设置的最大值时,自动曝光调节会逐渐降帧率并延长曝光时间,持续到曝光时间等于自动曝光的最大时间为止。低照度环境下噪声较小但帧率会降低。
  • 固定帧率模式是指自动曝光调节时保持帧率不变,低照度环境下噪声会较大。
  • Built-In WDR模式和多帧合成WDR模式支持降帧。若是客户自己对接的Line-WDR sensor,支持自动降帧处理需要修改cmos.c,修改方法可以参考hy_s0603的cmos.c文件。另外,在cmos.c中Built-In WDR模式降帧设置应和线性一样。
  • 开启VI PIPE离线卷绕功能,并且开启sensor从模式省内存功能时,不支持自动降帧模式。

【相关数据类型及接口】

无

ot_isp_ae_strategy

【说明】

定义AE曝光策略模式。

【定义】

typedef enum {
    OT_ISP_AE_EXP_HIGHLIGHT_PRIOR = 0,
    OT_ISP_AE_EXP_LOWLIGHT_PRIOR  = 1,
    OT_ISP_AE_STRATEGY_MODE_BUTT
} ot_isp_ae_strategy;

【成员】

成员名称

描述

OT_ISP_AE_EXP_HIGHLIGHT_PRIOR

高光优先曝光模式。

OT_ISP_AE_EXP_LOWLIGHT_PRIOR

低光优先曝光模式。

【注意事项】

  • 线性模式下,AE算法默认曝光策略为高光优先,尽量避免画面过曝,但在宽动态场景时,暗处亮度较低。此时若主要关注暗处区域,可采用低光优先模式,但亮处容易过曝。
  • WDR模式下,AE算法默认使用低光优先模式。在低光优先模式和高光优先模式都是控制长帧曝光,手动模式曝光时间、最大最小曝光时间、AE_Route、AE_Route_Ex中曝光时间参数影响长帧曝光时间。

【相关数据类型及接口】

无

ot_isp_ae_delay

【说明】

定义AE延时属性。

【定义】

typedef struct {
    td_u16 black_delay_frame;
    td_u16 white_delay_frame;
} ot_isp_ae_delay;

【成员】

成员名称

描述

black_delay_frame

图像亮度小于目标亮度时间超过black_delay_frame帧时,AE开始调节。取值范围:[0, 65535]

white_delay_frame

图像亮度大于目标亮度时间超过white_delay_frame帧时,AE开始调节。取值范围:[0, 65535]

【注意事项】

  • black_delay_frame/white_delay_frame设置越大,在AE调节步长相同的情况下,调节至目标亮度需要越长时间。
  • 人眼对于过曝比较敏感,建议white_delay_frame要设置得比black_delay_frame小一些。
  • 固定降帧时,若帧率较低,black_delay_frame/white_delay_frame要做出相应调整,建议不要设置过大,否则AE收敛时间会较长。

【相关数据类型及接口】

无

ot_isp_ae_range

【说明】

定义曝光时间或增益的最大值和最小值。

【定义】

typedef struct {
    td_u32 max;
    td_u32 min;
} ot_isp_ae_range;

【成员】

成员名称

描述

max

最大值。取值范围:[0, 0xFFFFFFFF]

min

最小值。取值范围:[0, 0xFFFFFFFF]

【注意事项】

  • 最小值不能大于最大值。
  • 最大最小值是计算后做的限制,实际生效值需要根据抗闪,sensor等原因,向下取整生效,有可能导致实际生效值小于min。

【相关数据类型及接口】

无

ot_isp_antiflicker_mode

【说明】

定义抗闪模式。

【定义】

typedef enum {
    OT_ISP_ANTIFLICKER_NORMAL_MODE = 0x0,
    OT_ISP_ANTIFLICKER_AUTO_MODE   = 0x1,
    OT_ISP_ANTIFLICKER_MODE_BUTT
} ot_isp_antiflicker_mode;

【成员】

成员名称

描述

OT_ISP_ANTIFLICKER_NORMAL_MODE

普通抗闪模式。

OT_ISP_ANTIFLICKER_AUTO_MODE

自动抗闪模式。

【注意事项】

  • OT_ISP_ANTIFLICKER_NORMAL_MODE为普通抗闪模式,曝光时间可以根据亮度进行调节,最小曝光时间固定为1/120 sec(60Hz)或1/100 sec(50Hz),不受曝光时间最小值的限制。

    • 有灯光的环境:曝光时间可与光源频率相匹配,能够防止图像闪烁。
    • 高亮度的环境:亮度越高,要求曝光时间就最短。而普通抗闪模式的最小曝光时间不能匹配光源频率,产生过曝。
  • OT_ISP_ANTIFLICKER_AUTO_MODE为自动抗闪模式,曝光时间可以根据亮度进行调节,最小曝光时间可达到sensor的最小曝光时间。与普通抗闪模式的差别主要在高亮度的环境体现。

    高亮度的环境:最小曝光时间可以达到sensor的最小曝光时间,能够有效抑制过曝,但此时抗闪失效。

【相关数据类型及接口】

无

ot_isp_antiflicker

【说明】

定义抗闪属性。

【定义】

typedef struct {
    td_bool enable;
    td_u8   frequency;
    ot_isp_antiflicker_mode  mode;
} ot_isp_antiflicker;

【成员】

成员名称

描述

enable

enable为TD_TRUE时使能图像抗闪,为TD_FALSE时不使能图像抗闪。

frequency

抗闪频率值。

取值范围:[0x0, 0xFF],默认值为0x0。

mode

抗闪模式,普通抗闪或自动抗闪。

【注意事项】

  • 抗闪开启后曝光时间会受到最大/最小曝光时间的限制,若最小抗闪时间大于最大曝光时间,那么开启抗闪后曝光时间将被限制为最大曝光时间。开启抗闪时,AE Route中各节点的Again、DGain、ISPDGain参数至少有一个需小于对应参数范围的上限,避免特定场景下无法进行补偿导致图像闪烁。使用route_ex时,Again、ISPDGain参数至少有一个需小于对应参数范围的上限,避免特定场景下无法进行补偿导致图像闪烁。
  • 开启自动降帧模式时,抗闪不生效。
  • 开启抗闪后,为了保证ae能够收敛,again, dgain, isp_dgain不再受到sys_gain的限制。

【相关数据类型及接口】

ot_isp_antiflicker_mode

ot_isp_subflicker

【说明】

定义ISP图像亚抗闪属性。

【定义】

typedef struct {
    td_bool enable;
    td_u8   luma_diff; /
} ot_isp_subflicker;

【成员】

成员名称

描述

enable

enable为TD_TRUE时使能图像亚抗闪功能,为TD_FALSE时不使能图像亚抗闪。

luma_diff

抗闪程度设置,范围 [0x0, 0x64]。亚抗闪功能生效时,该值越大越接近于抗闪。

【注意事项】

  • 强制抗闪模式时,最小曝光时间固定为1/120 sec(60Hz)或1/100 sec(50Hz),在某些场景(如室内对准室外窗户的背光场景)画面可能会过曝严重,但不抗闪画面工频闪又比较厉害。在这种情况下引入亚抗闪模式是为了取得过曝与闪烁之间的平衡。在强制抗闪模式下,当亚抗闪功能生效时,若画面亮度小于(ae_compensation + luma_diff),那么曝光时间仍会固定为最小抗闪时间1/120 sec(60Hz)或1/100 sec (50Hz)以防止图像闪烁。若画面亮度大于(ae_compensation + luma_diff),则取消抗闪,调整画面目标亮度为(ae_compensation + luma_diff),通过引入一定程度的画面闪烁来避免画面过曝严重。

    注意:非背光场景luma_diff较小时(如小于10)可能会导致曝光时间在最小抗闪点左右来回变化,导致画面轻微闪烁,建议设置该值不小于20。实际上,若luma_diff设置较小,背光场景下相当于取消了抗闪功能,与自动抗闪模式下的效果相近,达不到亚抗闪的目的,因此该值只有设置一个稍大些的值才有意义。

  • 只有在满足打开抗闪、强制抗闪模式且抗闪频率值不等于0的前提下,亚抗闪功能才能生效。

  • 自动抗闪模式不支持亚抗闪。在自动抗闪模式下打开亚抗闪,再将其切换到抗闪模式时,在极亮场景时可能有一帧过曝。

【相关数据类型及接口】

无

ot_isp_fswdr_mode

【说明】

定义ISP FSWDR运行模式。

【定义】

typedef enum {
    OT_ISP_FSWDR_NORMAL_MODE          = 0x0,
    OT_ISP_FSWDR_LONG_FRAME_MODE      = 0x1,
    OT_ISP_FSWDR_AUTO_LONG_FRAME_MODE = 0x2, 
    OT_ISP_FSWDR_MODE_BUTT
} ot_isp_fswdr_mode;

【成员】

成员名称

描述

OT_ISP_FSWDR_NORMAL_MODE

正常FSWDR模式,此时AE和合成模块按照自动/手动曝光比进行工作。

OT_ISP_FSWDR_LONG_FRAME_MODE

长帧模式,此时AE将短帧曝光时间设置为最小值,长帧曝光时间接近1帧所允许的最大值,合成模块只输出长帧数据,可用于优化弱宽动态场景或低照度时的图像质量。

OT_ISP_FSWDR_AUTO_LONG_FRAME_MODE

自动长帧模式,此时AE短帧曝光时间不会超过sensor限制的长帧模式下短帧最大曝光时间,在曝光量超过sensor设置的阈值时,自动切换为长帧模式,合成模块只输出长帧数据。

【注意事项】

  • 长帧模式及自动长帧模式仅在行模式WDR长帧优先模式下有效,并且为了保证图像质量,WDR模块的运动检测及长短帧融合阈值均为自动配置,不支持手动配置。在线将模式切换到WDR模式,默认为正常FSWDR模式。
  • 长帧模式下,如果WDR模块开启FUSION模式,可能会导致亮区颜色偏粉或变灰,因此不推荐长帧模式与WDR模块FUSION模式同时开启。
  • 长帧模式和自动长帧模式仅支持在优先帧为长帧且增益分开配置不使能的情况下使用。
  • 长帧模式和WDR模式切换时,如果打开dehaze,由于画面亮度变化,dehaze使用前一帧统计信息,可能会导致切换时画面呈现由暗变亮的过渡过程。
  • 长帧模式和WDR模式切换时,在目前WDR合成模块的框架下,画面会出现亮度变化(长帧模式切换到WDR模式时画面会变暗,反之变亮),曝光比越大现象越明显。此外,ISP中存在时域依赖的模块(如DRC,LDCI, Dehaze),有可能因此引起画面闪烁,所以不建议在大曝光比时进行长帧模式和WDR模式的切换。
  • 自动长帧模式切换阈值的曝光量是使用曝光行数计算的,exposure_info的曝光量是使用曝光时间计算的,计算方式不同,两者差了0x40*line_per500ms/500000倍。
  • Hi3516CV608不支持。

【相关数据类型及接口】

无

ot_isp_ae_attr

【说明】

定义自动曝光属性。

【定义】

typedef struct {
    /* base parameter */
    ot_isp_ae_range exp_time_range;
    ot_isp_ae_range a_gain_range;
    ot_isp_ae_range d_gain_range;
    ot_isp_ae_range ispd_gain_range;
    ot_isp_ae_range sys_gain_range;
    td_u32 gain_threshold;
    td_u8   speed;
    td_u16  black_speed_bias;
    td_u8   tolerance;
    td_u8   compensation;
    td_u16  ev_bias;
    ot_isp_ae_strategy ae_strategy_mode;
    td_u16  hist_ratio_slope;
    td_u8   max_hist_offset;
    ot_isp_ae_mode     ae_mode;
    ot_isp_antiflicker antiflicker;
    ot_isp_subflicker  subflicker;
    ot_isp_ae_delay    ae_delay_attr;
    td_bool manual_exp_value;
    td_u32  exp_value;
    ot_isp_fswdr_mode fswdr_mode;
    td_bool wdr_quick;
    td_u16  iso_cal_coef;
} ot_isp_ae_attr;

【成员】

成员名称

描述

exp_time_range

曝光时间范围,设置最大值和最小值,以微秒(us)为单位。

取值范围:[0x0, 0xFFFFFFFF],具体范围与sensor相关。

a_gain_range

Sensor模拟增益范围,设置最大值和最小值,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF],具体范围与sensor相关。

d_gain_range

Sensor数字增益范围,设置最大值和最小值,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF],具体范围与sensor相关。

ispd_gain_range

ISP数字增益范围,设置最大值和最小值,10bit小数精度。

取值范围:[0x400, 0x40000]

sys_gain_range

系统增益范围,设置最大值和最小值,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF],具体范围与sensor相关。

gain_threshold

自动降帧时的系统增益门限值,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF]

speed

自动曝光调整时的速度。

取值范围:[0x0, 0xFF],默认值为0x40。

black_speed_bias

画面由暗到亮AE调节速度的偏差值,该值越大,画面从暗到亮的速度越快。

取值范围:[0x0, 0xFFFF],默认值为0x90。

tolerance

自动曝光调整时对画面亮度的容忍偏差。

取值范围:[0x0, 0xFF],默认值为0x2。

compensation

自动曝光调整时的目标亮度。

取值范围:[0x0, 0xFF],线性默认值为0x40,wdr默认值0x20。

ev_bias

自动曝光调整时的目标亮度偏差值,10bit小数精度。

取值范围:[0x0, 0xFFFF],默认值为0x400。

ae_strategy_mode

自动曝光策略,高光优先或低光优先。

hist_ratio_slope

感兴趣区域的权重。

取值范围:[0x0, 0xFFFF],默认值为0x80。

max_hist_offset

感兴趣区域对统计平均值影响的最大程度。

取值范围:[0x0, 0xFF],默认值为0x10。

ae_mode

自动曝光模式,自动降帧模式或固定帧率模式。默认是固定帧率模式

antiflicker

抗闪属性设置。默认抗闪不使能。

subflicker

亚抗闪属性设置。默认亚抗闪不使能。

ae_delay_attr

延时属性设置。默认black_delay_frame=8,white_delay_frame=0。

manual_exp_value

手动曝光量使能,该值为TD_TRUE时,AE算法采用exp_value作为当前曝光量进行曝光时间和增益等的分配,为TD_FALSE时采用自动计算的曝光量进行分配。默认为TD_FALSE。

exp_value

手动曝光量值,等于曝光时间*系统增益,其中曝光时间的单位为微秒(us)。wdr时exp_value表示长帧曝光量。

取值范围:(0x0, 0xFFFFFFFF]

fswdr_mode

FSWDR运行模式。

默认为OT_ISP_FSWDR_NORMAL_MODE。

wdr_quick

WDR模式下,AE算法从稳定状态(亮度误差小于等于容忍偏差值tolerance)重新调整时,默认前50帧调整会进行时域滤波,以调整更加平滑。该值为TD_TRUE时,取消50帧时域滤波,使AE收敛速度更快。默认为TD_FALSE。

iso_cal_coef

ISO标定系数,用于保证拍照所需DCF信息中显示的ISO是标准的,8bit精度。

取值范围:[0x0, 0xFFFF],默认值为0x100。

【注意事项】

  • 自动模式下,更改手动曝光属性的值不会生效。
  • 自动曝光的最大最小时间及增益。

    可根据不同的场景对曝光时间及增益进行限定,如有高速运动物体场景可限定最大曝光时间值为较小值,这样可减轻运动物体拖影现象。

    注意:

    为了防止图像过曝区域颜色不饱和,ISP内部会根据sensor黑电平自动修正Isp_dgain值,因此即使限制Isp_dgain最大值为1024,Isp_dgain实际生效值仍会大于1024。

  • 自动曝光的系统增益

    非扩展路径下,若(sensor模拟增益最小值*sensor数字增益最小值*ISP数字增益最小值)小于系统增益最小值,则AE算法内部计算时最小增益会被限制到系统增益的最小值。若(sensor模拟增益最大值*sensor数字增益最大值*ISP数字增益最大值)大于系统增益最大值,则AE算法内部计算时最大增益会被限制到系统增益的最大值。推荐通过设置系统增益的最大、最小值进行增益限制,分别限制sensor模拟增益、sensor数字增益和ISP数字增益时,若把较高精度的ISP数字增益限制到1倍,容易导致闪烁。

    扩展路径下,采用系统增益的最大/最小值结合曝光时间的范围来限制曝光量的范围,sensor模拟增益、sensor数字增益及ISP数字增益不直接受系统增益的影响。实际上,AE算法内部利用系统增益来计算最大/最小曝光量,而并不是直接限制某项增益的值。比如说系统增益最大值限制为1倍,但sensor模拟增益的最小值限制为2倍,则实际生效的结果以sensor模拟增益的限制为准,sensor数字增益及ISP数字增益的限制也同理。手动模式下,系统增益不起作用,不对某项增益的值进行限制。

  • 自动降帧时的系统增益门限值

    在SLOW_SHUTTER模式下,当系统增益达到所设置的门限值时,系统将自动进入SLOW_SHUTTER模式。

    开启vi distribute group功能时,不支持设置自动降帧模式

  • speed用于设定自动曝光时的收敛速度,该值越大曝光的收敛速度越快,但也会导致收敛过程中出现反复震荡。

  • black_speed_bias用于设定画面由暗到亮AE调节速度的偏差值。默认speed下,画面从亮到暗的速度会快于画面从暗到亮的速度,若想双方向的AE调节速度差不多,可以调高black_speed_bias。
  • 亮度补偿属性compensation用于调节曝光的目标亮度。曝光亮度补偿值越大则图像亮度越高。
  • 曝光偏差属性ev_bias用于在特殊场景下对画面的目标亮度进行微调,也可认为是更高精度的亮度补偿值,通过调节该值来改变画面目标亮度,真实生效的AE目标亮度为 compensation * ev_bias /1024。compensation不变时,该值越大则图像亮度越高。
  • 曝光容忍偏差属性tolerance用于调节曝光对环境的灵敏度,曝光容忍偏差值越大则曝光越不敏感,且可能导致同一目标亮度值多次调节得到的亮度差异越大,所以该属性推荐不能设定过大。尤其当目标亮度较低时,tolerance较大,最终画面收敛亮度可能会有明显差异。通过改变Ev_bias对画面目标亮度进行微调时,若tolerance较大,过小的Ev_bias变化量可能会看不出调整效果。
  • 曝光策略属性ae_strategy_mode用于选择对高光优先或低光优先的曝光策略。高光优先意味着对高光敏感,尽量避免画面过曝。低光优先意味着对低光敏感,尽量看清楚暗处区域,不管画面是否过曝。默认的曝光策略是高光优先,用户可根据场景需要进行调整。
  • hist_ratio_slope用于设定感兴趣区域的权重。若是高光优先曝光模式,则该值设置的是高光区域的权重,该值越大,则意味着对高光区域越敏感。反之,若是低光优先模式,则该值设置的是低光区域的权重,该值越大,则意味着对暗处区域越敏感,建议hist_ratio_slope的值设置不要超过0x100。高光优先曝光模式下,如果该值过大,只要画面中有一小部分过曝区域,AE算法就会认为画面亮度远大于目标亮度,这样曝光量就会不断往下调,导致画面变得很黑,同时画面中的过曝区域也在快速变小,达到某个程度的话AE算法又会认为画面亮度比目标亮度小了,曝光量又会往上调,如此反复出现来回调的现象,看起来像是画面闪烁。类似的,在低光优先模式下,如果AE目标亮度设置得比较低,若画面中有黑色物体来回移动,对画面亮度也会有较大影响,此时调低曝光调整速度和提高容忍偏差tolerance能够缓解该问题。
  • 自动曝光时,可设定感兴趣区域对统计平均值影响的最大程度max_hist_offset。该值相当于对提高hist_ratio_slope时增加的权重做限制,若该值为0,无论hist_ratio_slope多大,也不会对高光或低光区域做特殊处理,此时的统计平均值就是原始值。通过合理设置该值,可以保证任何场景AE稳定后画面平均亮度都在一定范围内,在高光优先曝光模式下,如果该值设置较大,在对比度稍高一些的场景,如睛天室外场景,有天空有树木,则可能导致整体画面亮度偏低,因为此时优先保证了亮区天空的效果,通过限制该值从而限制对亮区的倾斜程度可以解决该问题。
  • 曝光策略切换时,最好同时更新hist_ratio_slope和max_hist_offset的值,否则这2个值会采用默认配置,效果可能与预期不符。
  • 在做强光抑制方案时,例如在RGBIR模式下,建议设置成高光优先曝光,通过降低AE目标亮度,同时适当设置hist_ratio_slope和max_hist_offset为较大值来抑制强光,暗区则可以通过使能DRC来看清楚。低光优先则可以用于实现非指定区域的背光补偿。
  • AE曝光控制类型为自动时,可设定曝光模式ae_mode。该值可设定为慢快门模式(SLOW_SHUTTER)或固定帧率模式。慢快门模式通常用于低照度场景下进行自动降帧,以减少画面噪声。
  • 抗闪属性结构体antiflicker可用于设定抗闪使能,抗闪频率和抗闪模式等属性。FSWDR模式下,长帧抗闪有效,在优先帧为短帧且增益分开配置时,长短帧抗闪都有效。由于随着曝光比的变化,短帧曝光时间的最大值会受到限制,建议FSWDR模式使用自动抗闪模式。

    注意:部分sensor WDR模式下只曝光一次,曝光时间只有短帧有效,因此抗闪及亚抗闪效果并不能达到预期。

  • 亚抗闪属性结构体subflicker可用于设定亚抗闪使能及抗闪程度属性。若有自动光圈,建议关闭亚抗闪功能。

  • AE曝光控制类型为自动时,可设定AE延时生效属性结构体ae_delay_attr。该值的合理设置可提高画面亮度的稳定性,防止快速运动物体经过导致画面亮度发生变化。低码率设置时可适当增加该值,以避免AE调节时出现块效应。
  • 用户可以通过将manual_exp_value置为TD_TRUE,手动设置曝光量exp_value来屏蔽AE算法的曝光量调整部分,只用到曝光量分配部分。exp_value的值会受到最大、最小曝光量的限制。最大、最小曝光量分别对应最大、最小曝光时间与增益的乘积。
  • WDR模式下,优先帧为长帧时,exp_time_range设置的是长帧的曝光时间范围,优先帧为短帧时,exp_time_range设置的是短帧的曝光时间范围。
  • FSWDR运行模式改变时,需要相应修改cmos.c中的以下回调函数:cmos_long_frame_mode_set,cmos_get_ae_default,cmos_fps_set,cmos_get_inttime_max,以保证长、短帧曝光时间在合理范围内。正常WDR和长帧模式切换时,会回调cmos_get_ae_default,更新曝光时间最大/最小值,增益最大/最小值,光圈最大/最小值和compensation等参数,同时,AE内部会将hist_ratio_slope和max_hist_offset更新为算法默认值。需要注意的是,此时曝光比相关设置不会更新,仍会保持上一次的值。另外,长帧模式打开时,DRC强度会逐渐收敛至Auto目标值。客户可以根据需要,在切换完成后调用MPI接口修改参数。

    注意:平滑切换的前提是切换前/后短帧曝光量与长帧曝光量相等。当曝光比较大时,由于正常WDR模式会限制增益,而长帧模式为了保证低照度效果会放开增益限制,可能会导致切换前/后短帧曝光量与长帧曝光量不等,这样切换就会有几帧突然之间变亮或者变暗,属于正常现象。若要避免这种现象,可以在切换完成之后再放开增益限制。

    • 长帧模式仅在行模式WDR下才有效,帧模式WDR把曝光比设置为1:1,关闭运动检测,即可达到与行模式WDR长帧模式一样的效果。建议非行模式WDR统一将fswdr_mode设置为OT_ISP_FSWDR_NORMAL_MODE。
    • 行模式WDR只曝光一次的sensor不支持长帧模式。

【相关数据类型及接口】

ss_mpi_isp_set_exposure_attr

ot_isp_me_attr

【说明】

定义手动曝光属性。

【定义】

typedef struct {
    ot_op_mode exp_time_op_type;
    ot_op_mode a_gain_op_type;
    ot_op_mode d_gain_op_type;
    ot_op_mode ispd_gain_op_type;
    td_u32 exp_time;
    td_u32 a_gain;
    td_u32 d_gain;
    td_u32 isp_d_gain;
} ot_isp_me_attr;

【成员】

成员名称

描述

exp_time_op_type

手动曝光时间使能,默认值为OT_OP_MODE_AUTO

a_gain_op_type

手动sensor模拟增益使能,默认值为OT_OP_MODE_AUTO

d_gain_op_type

手动sensor数字增益使能,默认值为OT_OP_MODE_AUTO

ispd_gain_op_type

手动ISP数字增益使能,默认值为OT_OP_MODE_AUTO

exp_time

手动曝光时间,以微秒(us)为单位,默认值为0x4000。

取值范围:[0x0, 0xFFFFFFFF],具体范围与sensor相关。

a_gain

手动sensor模拟增益,10bit小数精度,默认值为0x400。

取值范围:[0x400, 0xFFFFFFFF],具体范围与sensor相关。

d_gain

手动sensor数字增益,10bit小数精度,默认值为0x400。

取值范围:[0x400, 0xFFFFFFFF],具体范围与sensor相关。

isp_d_gain

手动ISP数字增益,10bit小数精度,默认值为0x400。

取值范围:[0x400, 0x40000],具体范围与sensor相关。

【注意事项】

  • 手动模式下,手动曝光时间和增益的值会受到自动模式下最大/最小曝光时间和增益的限制。
  • 手动曝光使能参数有效时,必须设置相应的手动曝光参数,若不设置,则采用系统默认值。
  • 增益单位为10bit小数精度的倍数,即1024代表1倍。
  • 若曝光参数设置超出最大(小)值,将使用sensor支持的最大(小)值代替。

【相关数据类型及接口】

ss_mpi_isp_set_exposure_attr

ot_isp_exposure_attr

【说明】

定义ISP曝光属性。

【定义】

typedef struct {
    td_bool    bypass;
    ot_op_mode op_type;
    td_u8     ae_run_interval;
    td_bool   hist_stat_adjust;
    td_bool   ae_route_ex_valid;
    ot_isp_me_attr   manual_attr;
    ot_isp_ae_attr   auto_attr;
    ot_isp_prior_frame prior_frame;
    td_bool ae_gain_sep_cfg;
    td_bool advance_ae;
} ot_isp_exposure_attr;

【成员】

成员名称

描述

bypass

AE模块bypass功能使能,默认为TD_FALSE。

op_type

自动曝光或手动曝光开关,默认为OT_OP_MODE_AUTO。

ae_run_interval

AE算法运行的间隔,取值范围:[1, 255]

  • 取值为1时表示每帧都运行AE算法;
  • 取值为2时表示每2帧运行1次AE算法,依此类推。

建议该值设置不要大于2,否则AE调节速度会受到影响。WDR模式时,该值建议设置为1,这样AE收敛会更加平滑。该值默认为1。

hist_stat_adjust

1024段直方图统计方式是否根据场景进行调整开关,默认为TD_TRUE。

ae_route_ex_valid

AE扩展分配路线是否生效开关,TD_TRUE时使用AE扩展分配路线,否则使用普通AE分配路线。默认为TD_FALSE。

manual_attr

手动曝光属性结构体。

auto_attr

自动曝光属性结构体。

prior_frame

WDR模式下曝光路线生效的优先帧, 线性模式下此参数需配置为LONG_FRAME。

ae_gain_sep_cfg

长短帧增益是否分开分配。

advance_ae

是否使能advance AE。

【注意事项】

  • AE bypass为TD_TRUE时,AE模块被bypass,任何AE配置都不会对图像亮度产生影响。ot_isp_ae_result保持为AE bypass前一帧的值。
  • SDK提供的AE主要基于全局1024段直方图信息进行亮度调整,正常场景1024段直方图只统计Gb或Gr分量。hist_stat_adjust为TD_TRUE时,若进入了大面积单色场景(如大面积红色或蓝色),AE算法会根据全局平均值信息对1024段直方图统计方式进行调整,把R分量或B分量也考虑进来,如此可以防止大面积红色或蓝色场景画面亮度偏高。hist_stat_adjust为TD_FALSE时,AE算法不会调整1024段直方图统计方式。红外场景建议将hist_stat_adjust设置为TD_FALSE。
  • WDR/线性模式切换时,ae_run_interval会重置为1,用户可以在切换完成后,根据需要修改该值。
  • ae_gain_sep_cfg仅在2to1WDR模式下配置生效,ae_gain_sep_cfg需要适配sensor驱动,适配方法参考已配置的sensor的cmos_gains_update中把长短帧gain值分2次配置的方法。
  • 手动模式不支持长短帧增益分开分配。
  • Advance AE目前可在正常FSWDR模式下生效(长帧模式不生效),使能advance_ae,可使图像暗区和亮区的曝光更加合理、准确,当场景发生亮暗比例变化时,图像亮暗区曝光更加稳定。

【相关数据类型及接口】

ot_isp_wdr_exposure_attr

【说明】

定义WDR模式下的曝光属性。

【定义】

typedef struct {  
    ot_op_mode  exp_ratio_type;
    td_u32 exp_ratio[OT_ISP_EXP_RATIO_NUM];
    td_u32 exp_ratio_max;
    td_u32 exp_ratio_min;
    td_u16 tolerance;
    td_u16 speed;
    td_u16 ratio_bias;
    td_u16 high_light_target;
    td_u16 exp_coef_min;
} ot_isp_wdr_exposure_attr;

【成员】

成员名称

描述

exp_ratio_type

仅在多帧合成WDR模式下有效。

OT_OP_MODE_AUTO:根据场景自动计算长短帧曝光比;

OT_OP_MODE_MANUAL:手动配置长短帧曝光比。

exp_ratio

仅在多帧合成WDR模式下有效。

  • 当exp_ratio_type为OT_OP_MODE_AUTO时,exp_ratio无效。
  • 当exp_ratio_type为OT_OP_MODE_MANUAL时,exp_ratio为可读写,表示多帧合成WDR相邻2帧曝光比期望值。其中exp_ratio[0]作为S/VS曝光比,exp_ratio[1]作为M/S曝光比,exp_ratio[2]作为L/M曝光比。

上述VS,S,M,L分别表示极短帧,短帧,中帧和长帧的曝光时间,2帧合成时只有VS和S;3帧合成时采用VS,S和M;4帧合成时采用VS,S,M和L。6bit小数精度,0x40表示曝光比为1倍。

Hi3519DV500 取值范围:[0x40, 0x4000]

Hi3516CV610 取值范围:[0x40, 0x7FF]

exp_ratio_max

仅在多帧合成WDR模式下有效。

  • 当exp_ratio_type为OT_OP_MODE_AUTO时,exp_ratio_max表示最长帧与最短帧曝光时间比值的最大值。即2帧合成时表示S/VS曝光比的最大值,3帧合成时表示M/VS曝光比的最大值,4帧合成时表示L/VS曝光比的最大值。
  • 当exp_ratio_type为OT_OP_MODE_MANUAL时,exp_ratio_max无效。

6bit小数精度,0x40表示曝光比为1倍。

Hi3519DV500 取值范围:[0x40, 0x4000]

Hi3516CV610 取值范围:[0x40, 0x7FF]

exp_ratio_min

仅在多帧合成WDR模式下有效。

  • 当exp_ratio_type为OT_OP_MODE_AUTO时,exp_ratio_min表示长帧曝光时间与短帧曝光时间比值的最小值。
  • 当exp_ratio_type为OT_OP_MODE_MANUAL时,exp_ratio_min无效。

格式为无符号6.6bit定点,0x40表示长帧曝光时间与短帧曝光时间的比值为1倍。默认值为0x40。

取值范围:[0x40, exp_ratio_max]

tolerance

曝光比容忍值,仅在多帧合成WDR模式下有效。

当exp_ratio_type为OT_OP_MODE_AUTO时,该值越大,表示场景动态范围变化在一定范围内时,曝光比保持不变。默认值为0xC。

取值范围:[0x0, 0xFF]

speed

自动曝光比调节速度,仅在多帧合成WDR模式下有效。

当exp_ratio_type为OT_OP_MODE_AUTO时,该值越大,自动曝光比调节速度越快。默认值为0x20。

取值范围:[0x0, 0xFF]

ratio_bias

曝光比偏差值,仅在多帧合成WDR模式下有效。

当exp_ratio_type为OT_OP_MODE_AUTO时,该值越大,自动曝光比越大。默认值为0x400,表示不对自动曝光比算法的计算结果进行调整。经过该值调整的曝光比会受到曝光比最大/最小值的限制。

取值范围:[0x0, 0xFFFF]

high_light_target

图像过曝程度的目标值,仅在使能Advance ae时有效。该值越大,图像过曝程度越大。默认值为0x30。

取值范围:[0x0, 0x400]

exp_coef_min

曝光系数最小值,仅在使能advance ae时有效。

10bit小数精度,0x400表示曝光系数最小值为1倍,默认值为0x400。

取值范围:[0x0, 0x400]

【注意事项】

  • 建议tolerance不要设置为太大的值,避免曝光比不能正确的反映场景动态范围变化。
  • 针对某些对短帧最大曝光时间有限制的sensor,曝光比较小时,长帧最大曝光时间较短,图像动态范围及噪声表现较差,导致自动曝光比计算不准确,此时建议限制最小曝光比,保证长帧最大曝光时间至少达到3ms。
  • 建议speed不要设置小于0x8,避免某些场景由于计算精度不足导致曝光比调节太慢甚至不调。speed过大可能导致曝光比变化太快,造成画面亮度出现振荡。
  • 建议手动模式下exp_ratio不要设置大于0x400。如果曝光比大于0x400,在较亮的超宽动态场景,适当调高曝光比会优化长帧图像噪声表现。但是在较暗或低宽动态场景,如果曝光比过大,由于短帧最大曝光时间会被压缩,导致图像噪声表现会变差,而且会出现明显的噪声不连续,运动表现也会变差。
  • 使能Advance ae,当曝光比达到设置的最大曝光比,图像过曝程度仍未达到目标值时,会适当降低AE亮度目标值,以换取图像整体过曝程度的降低。通过合理设置exp_coef_min,可使 AE亮度目标值最多可以下降到compensation * exp_coef_min/1024。
  • Hi3516CV608不支持。

【相关数据类型及接口】

ot_isp_hdr_exposure_attr

【说明】

定义HDR模式下的曝光属性。

【定义】

typedef struct {
    ot_op_mode  exp_hdr_lv_type;  
    td_u32 exp_hdr_lv; 
    td_u32 exp_hdr_lv_max; 
    td_u32 exp_hdr_lv_min; 
    td_u32 exp_hdr_lv_weight; 
} ot_isp_hdr_exposure_attr;

【成员】

成员名称

描述

exp_hdr_lv_type

仅在WDR-HDR模式下有效,在linear-HDR模式下不生效。

  • OT_OP_MODE_AUTO:根据场景自动计算曝光等级;
  • OT_OP_MODE_MANUAL:手动配置曝光等级。

exp_hdr_lv

仅在HDR模式下有效。

  • 当exp_hdr_lv_type为OT_OP_MODE_AUTO时,exp_hdr_lv为AE算法根据场景自动计算的曝光等级。
  • 当exp_hdr_lv_type为OT_OP_MODE_MANUAL时,exp_hdr_lv为手动配置的曝光等级,值越大,同样的场景,AE曝光量越大。6bit小数精度,0x40表示曝光等级为1倍。

取值范围:[0x40, 0x400]

exp_hdr_lv_max

仅在WDR-HDR模式下有效,在linear-HDR模式下不生效。

exp_hdr_lv_max表示曝光等级最大值。在exp_hdr_lv_type为OT_OP_MODE_AUTO或OT_OP_MODE_MANUAL时均生效。6bit小数精度,0x40表示曝光比为1倍。

取值范围:[0x40, 0x400]

exp_hdr_lv_min

仅在WDR-HDR模式下有效,在linear-HDR模式下不生效。

exp_hdr_lv_min表示曝光等级最小值。在exp_hdr_lv_type为OT_OP_MODE_AUTO或OT_OP_MODE_MANUAL时均生效。6bit小数精度,0x40表示曝光比为1倍。

取值范围:[0x40, exp_hdr_lv_max]

exp_hdr_lv_weight

曝光等级计算权重,仅在WDR-HDR模式下有效,在linear-HDR模式下不生效。

当exp_ratio_type为OT_OP_MODE_AUTO时,该值越大,曝光等级越大。默认值为0xA0。

取值范围:[0x0, 0x400]

【相关数据类型及接口】

【注意事项】

WDR-HDR模式是指前端ISP配置使用WDR多帧融合模式进行数据生成,linear-HDR模式是指前端ISP配置使用线性模式进行数据生成。

ot_isp_smart_exposure_attr

【说明】

定义智能模式下的曝光属性。

【定义】

typedef struct {
    td_bool enable;
    td_bool ir_mode;
    ot_op_mode   smart_exp_type; 
    td_u16  exp_coef; 
    td_u8   luma_target; 
    td_u16  exp_coef_max; 
    td_u16  exp_coef_min;
    td_u8   smart_interval; 
    td_u8   smart_speed; 
    td_u16  smart_delay_num;
} ot_isp_smart_exposure_attr;

【成员】

成员名称

描述

enable

智能AE是否使能,默认为TD_FALSE。

ir_mode

是否为红外模式,默认为TD_FALSE。

TD_TRUE为红外模式;

TD_FALSE为普通模式。

smart_exp_type

OT_OP_MODE_AUTO:根据目标检测结果自动调整曝光系数;

OT_OP_MODE_MANUAL:手动配置曝光系数。

exp_coef

基于原始曝光调整的曝光系数,值越大,图像整体亮度越高;值越小,图像整体亮度越低。

  • 当smart_exp_type为OT_OP_MODE_AUTO时,exp_coef为AE算法根据目标检测结果计算的曝光系数。
  • 当smart_exp_type为OT_OP_MODE_MANUAL时,exp_coef为手动配置的曝光系数。

10bit小数精度,0x400表示曝光系数为1倍。

取值范围:[0x0, 0xFFFF]

luma_target

人脸/人形目标亮度,此亮度为YUV图像中人脸/人形区域Y分量均值。

取值范围:[0x0, 0xFF]

exp_coef_max

智能曝光系数最大值。

  • 当smart_exp_type为OT_OP_MODE_AUTO时,exp_coef_max表示智能曝光系数最大值。
  • 当smart_exp_type为OT_OP_MODE_MANUAL时,exp_coef_max无效。

10bit小数精度,0x400表示曝光系数最大值为1倍。

取值范围:[0x0, 0xFFFF]

exp_coef_min

智能曝光系数最小值。

  • 当smart_exp_type为OT_OP_MODE_AUTO时,exp_coef_min表示智能曝光系数最小值。
  • 当smart_exp_type为OT_OP_MODE_MANUAL时,exp_coef_min无效。

10bit小数精度,0x400表示曝光系数最小值为1倍。

取值范围:[0x0, 0xFFFF]

smart_interval

智能AE运行间隔。

取值为1时表示每帧运行,取值为n时,表示每n帧运行一次。

取值范围:[0x1, 0xFF]

smart_speed

智能AE调整速度。

默认值为0x40,值越小,调整速度越慢;值越大,调整速度越快,也越容易出现震荡。

取值范围:[0x0, 0xFF]

smart_delay_num

智能AE延迟恢复帧数。

默认值为0xB4,值越小,人离开场景后的曝光恢复时间越短,值越大,人离开场景后的曝光恢复时间越长。

取值范围:[0x0, 0x400]

【注意事项】

  • 建议luma_target设置范围为[80,130],如果设置的值过于不合理,会导致曝光调整结果与智能检测结果相互影响,出现图像亮度振荡。
  • 建议exp_coef_max值不超过0x1000,否则在人脸很暗的场景亮区会出现大面积过曝,而损失过多亮区细节。建议exp_coef_min值不小于0x40,否则在人脸很亮的场景亮区会出现暗区过黑,而损失过多暗区细节。
  • 智能AE运行间隔smart_interval受到AE自身运行间隔ae_run_interval影响,如ae_run_interval为2,smart_interval为3,则智能AE间隔实际为两者乘积,每六帧运行一次。
  • 智能AE运行间隔smart_interval建议与智能检测结果保持一致,如当前Sensor帧率为25帧,智能检测结果帧率为8帧,则建议运行间隔为3。
  • ss_mpi_isp_set_smart_info接口调用需要和智能检测帧率保持一致,如智能检测结果帧率为8帧,则每秒调用8次ss_mpi_isp_set_smart_info。
  • 调整智能运行间隔smart_interval与智能调整速度smart_speed均可以调整收敛速度,当运行间隔较小,调整速度过大时,图像可能会出现亮度震荡,此时可适当降低运行速度或者增加间隔smart_interval。
  • 智能AE延迟恢复帧数smart_delay_num可以调整人离开场景后的曝光恢复时间,该值设置过小时在人形人脸信息出现漏检的情况可能会导致图像亮度震荡,另外,适当设置较大值可以避免人连续进出的场景下图像亮度反复调节。
  • 当人脸模型不可用,只有人形模型可用时,普通模式下计算的曝光系数不会低于1倍,红外模式下计算的曝光系数不会高于1倍。
  • AE是全局亮度调节算法,不能很好的处理亮度不均匀问题。例如人脸接收的光照不均匀一半亮一半暗的时候,AE只能保证整体人脸的亮度合适,但是可能存在暗区太暗亮区过曝的问题。

【相关数据类型及接口】

ot_isp_fast_face_ae_attr

【说明】

定义人脸快速收敛算法的曝光属性。

【定义】

typedef struct {
    td_bool enable;
    td_u8 face_tolerance;
    td_u8 face_comp;
    td_u8 stat_delay_num;
    td_u8 speed;
    td_u16 face_delay_num;
} ot_isp_fast_face_ae_attr;

【成员】

成员名称

描述

enable

人脸快速收敛算法是否使能,默认为TD_FALSE。

face_tolerance

人脸快速收敛算法调整时对人脸亮度的容忍偏差。

取值范围:[0x0, 0xFF], 默认值为20。

face_comp

人脸快速收敛算法调整时的人脸目标亮度。

取值范围:[0x0, 0xFF],默认值为80。

stat_delay_num

人脸快速收敛算法统计信息延迟帧数。

取值范围:[0x0, 0xA],默认值为3。

speed

人脸快速收敛算法调整的速度,最大速度为100。

取值范围:[0x0, 0x64],默认值为80。

face_delay_num

人脸快速收敛算法延迟恢复帧数。

默认值为0x1E,值越小,人脸离开场景后的曝光恢复时间越短,值越大,人脸离开场景后的曝光恢复时间越长。

取值范围:[0x0, 0x400]

【注意事项】

  • 由于快速人脸收敛算法调节导致曝光量变化较大可能引起后端模块闪烁。建议在使用该算法时将DRC、LDCI模块关闭。
  • 画面亮度出现震荡时建议将tolerance放大。
  • enable只有当该值与传入的人脸框信息中的enable同时使能时人脸快速收敛AE算法才能生效。
  • AE算法在配置sensor时一般会延后几帧生效,大多数sensor的延时都是3帧。该值与sensor驱动中的delay时间相对应。
  • 人脸快速收敛算法延迟恢复帧数face_delay_num可以调整人离开场景后的曝光恢复时间,该值设置过小时在人脸信息出现漏检的情况可能会导致图像亮度震荡,另外,适当设置较大值可以避免人连续进出的场景下图像亮度反复调节。

【相关数据类型及接口】

ot_isp_ae_route_node

【说明】

定义AE分配路线节点属性。

【定义】

typedef struct {
    td_u32  int_time;
    td_u32  sys_gain;
    ot_isp_iris_f_no iris_fno;
    td_u32  iris_fno_lin;
} ot_isp_ae_route_node;

【成员】

成员名称

描述

int_time

节点曝光时间,单位为微秒(us)。

取值范围:(0x0, 0xFFFFFFFF]

sys_gain

节点增益,包括sensor模拟增益,sensor数字增益和ISP数字增益,10bit精度。

取值范围:[0x400, 0xFFFFFFFF]

iris_fno

节点光圈F值大小,仅支持P-Iris,不支持DC-Iris。

取值范围:[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]

iris_fno_lin

节点光圈F值等效增益大小,仅支持P-Iris,不支持DC-Iris。

取值范围:[1, 1024]

【注意事项】

  • 节点的曝光量是曝光时间、增益和光圈的乘积,节点曝光量必须单调递增,即后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。在计算曝光量时,光圈F值要等效成一个增益,公式如下:等效增益FNO = 1 <<OT_ISP_IRIS_F_NO_XX_XX。由此可知F32.0对应增益1,F22.0对应增益2,F16.0对应增益4,以此类推,F1.0对应增益1024。
  • 可以通过设置结构体ot_isp_piris_attr中的fno_ex_valid来决定实际生效的AE route节点光圈值采用iris_fno或iris_fno_lin。fno_ex_valid为TD_TRUE时采用高精度的iris_fno_lin,默认采用iris_fno。iris_fno会受到ot_isp_piris_attr中max_iris_fno_target / min_iris_fno_target的限制,iris_fno_lin会受到ot_isp_piris_attr中max_iris_fno_target_linear / min_iris_fno_target_linear的限制。另外,iris_fno和iris_fno_lin还会受到ot_isp_ae_sensor_default中max_iris_fno / max_iris_fno的限制,所以对接P-Iris时要在cmos.c中给max_iris_fno / min_iris_fno赋合适的值。
  • 不支持设置等曝光量节点。
  • 为了保证曝光节点的曝光量,曝光节点的一个分量发生限制时,会对其他未达到最大值的分量进行调整,实际生效路径可能与设定路径不一致。为了防止曝光量溢出,如果光圈分量使能,则同一节点的曝光时间与增益的乘积最大值不能超过0x1FFFFFFFFFFFFF,如果光圈分量不使能,则同一节点的曝光时间与10bit精度系统增益的乘积最大值不能超过0x7FFFFFFFFFFFFFFF。
  • 如果相邻节点的曝光量增加,则应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如增益分量增加,那么该段路线的分配策略是增益优先。
  • 光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制。
  • 针对P-Iris,建议将第一个节点的曝光时间、增益和光圈F值都设置为相应的最小目标值,最后一个节点的曝光时间、增益和光圈F值都设置为相应的最大目标值。

【相关数据类型及接口】

ss_mpi_isp_set_ae_route_attr

ot_isp_ae_route

【说明】

定义AE曝光分配策略属性。

【定义】

typedef struct {
    td_u32 total_num;
    ot_isp_ae_route_node  route_node[OT_ISP_AE_ROUTE_MAX_NODES];
} ot_isp_ae_route;

【成员】

成员名称

描述

total_num

曝光分配路线节点数目,目前最大为16。

route_node [OT_ISP_AE_ROUTE_MAX_NODES]

曝光分配路线节点属性。

【注意事项】

  • 最大支持16个节点,每个节点有曝光时间、增益、光圈三个分量,增益包含sensor模拟增益、sensor数字增益、ISP数字增益。
  • 用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
  • 针对DC-Iris和手动光圈镜头,默认AE分配策略是曝光时间优先,其次分配增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。在DC_Iris调节时,曝光量调节并不会参考AE_ROUTE,因此实际生效的AE_ROUTE不会更新。
  • 针对P-Iris,默认AE分配策略是首先调节光圈,将光圈调至最大后调节曝光时间,最后再分配增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
  • 在线进行DC-Iris和P-Iris切换,AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置AE route。默认分配策略的AE route参数与切换时的AE曝光时间最小/最大值,增益最大/最小值和光圈分量最大/最小值相对应。注意:由于cmos.c也可以设置AE分配路线,若要在线进行DC-Iris和P-Iris切换,请不要在cmos.c中给iris_type赋值,这样AE算法设置的光圈类型就会传递到cmos.c中,此时回调cmos_get_ae_default或cmos_fps_set等函数,才能得到与光圈类型相匹配的AE route。

【相关数据类型及接口】

ss_mpi_isp_set_ae_route_attr

ot_isp_ae_route_ex_node

【说明】

定义AE扩展分配路线节点属性。

【定义】

typedef struct {
    td_u32  int_time; 
    td_u32  a_gain; 
    td_u32  d_gain; 
    td_u32  isp_d_gain; 
    ot_isp_iris_f_no  iris_fno;
    td_u32  iris_fno_lin; 
} ot_isp_ae_route_ex_node;

【成员】

成员名称

描述

int_time

节点曝光时间,单位为微秒(us)。

取值范围:(0x0, 0xFFFFFFFF]

a_gain

sensor模拟增益,10bit精度。

取值范围:[0x400, 0x3FFFFF]

d_gain

sensor数字增益,10bit精度。

取值范围:[0x400, 0x3FFFFF]

isp_d_gain

ISP数字增益,10bit精度。

取值范围:[0x400, 0x40000]

iris_fno

节点光圈F值大小,仅支持P-Iris,不支持DC-Iris。

取值范围:[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]

iris_fno_lin

节点光圈F值等效增益大小,仅支持P-Iris,不支持DC-Iris。

取值范围:[1, 1024]

【注意事项】

  • 节点的曝光量是曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈的乘积,节点曝光量必须单调递增,即后一个节点的曝光量大于或等于前一个节点的曝光量,第一个节点的曝光量最小,最后一个节点的曝光量最大。在计算曝光量时,光圈F值要等效成一个增益,公式如下:等效增益FNO = 1 << OT_ISP_IRIS_F_NO_XX_XX。由此可知F32.0对应增益1,F22.0对应增益2,F16.0对应增益4,以此类推,F1.0对应增益1024。
  • 可以通过设置结构体ot_isp_piris_attr中的fno_ex_valid来决定实际生效的扩展AE route节点光圈值采用iris_fno或iris_fno_lin。fno_ex_valid为TD_TRUE时采用高精度的iris_fno_lin,默认采用iris_fno。iris_fno会受到ot_isp_piris_attr中max_iris_fno_target/ min_iris_fno_target的限制,iris_fno_lin会受到ot_isp_piris_attr中max_iris_fno_target/ min_iris_fno_target的限制。另外,iris_fno和iris_fno_lin还会受到ot_isp_ae_sensor_default中max_iris_fno/ min_iris_fno的限制,所以对接P-Iris时要在cmos.c中给max_iris_fno/ min_iris_fno赋合适的值。
  • 不支持设置等曝光量节点。
  • 为了保证曝光节点的曝光量,曝光节点的一个分量发生限制时,会对其他未达到最大值的分量进行调整,实际生效路径可能与设定路径不一致。
  • 如果相邻节点的曝光量增加,则应该有一个分量增加,其他分量固定,增加的分量决定该段路线的分配策略。例如sensor模拟增益分量增加,那么该段路线的分配策略是sensor模拟增益优先。
  • 光圈分量仅支持P-Iris,不支持DC-Iris,因为DC-Iris无法精确控制。
  • 针对P-Iris,建议将第一个节点的曝光时间、增益和光圈F值都设置为相应的最小目标值,最后一个节点的曝光时间、增益和光圈F值都设置为相应的最大目标值。
  • 节点的曝光时间不能设置为0,也不能设置过小,导致以us为单位的曝光时间对应的曝光行数为0,否则可能产生异常。
  • 节点增益的范围相比非扩展AE route有所缩小。此外,为防止曝光量溢出,sensor模拟增益、sensor数字增益和ISP数字增益的乘积等效为的10bit精度系统增益不能大于0xFFFFFFFF。如果光圈分量使能,则同一节点的曝光时间与10bit精度系统增益的乘积最大值不能超过0x1FFFFFFFFFFFFF,如果光圈分量不使能,则同一节点的曝光时间与10bit精度系统增益的乘积最大值不能超过0x7FFFFFFFFFFFFFFF。
  • 若某段路线需要设置ISP数字增益优先,请注意不要把ISP数字增益用满,因为ISP数字增益还有弥补分配精度的作用,建议至少留下2倍ISP数字增益的余量,供弥补精度使用,即分配路线中节点的Isp_d_gain不要大于max_Isp_d_gain/2。
  • 开启增益分开配置功能时,曝光节点中的ISP数字增益在实际分配时可能有部分被分配到WDRGain。

【相关数据类型及接口】

ss_mpi_isp_set_ae_route_attr_ex

ot_isp_ae_route_ex

【说明】

定义AE曝光分配策略扩展属性。

【定义】

typedef struct {
    td_u32 total_num;
    ot_isp_ae_route_ex_node route_ex_node[OT_ISP_AE_ROUTE_EX_MAX_NODES];
} ot_isp_ae_route_ex;

【成员】

成员名称

描述

total_num

曝光扩展分配路线节点数目,目前最大为16。

route_ex_node

[OT_ISP_AE_ROUTE_EX_MAX_NODES]

曝光扩展分配路线节点属性。

【注意事项】

  • 最大支持16个节点,每个节点有曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益和光圈五个分量。
  • 用户可以根据不同的场景设置不同的路线,分配路线支持动态切换。
  • 针对DC-Iris和手动光圈镜头,默认AE扩展分配策略是曝光时间优先,再分配sensor模拟增益、sensor数字增益、最后分配ISP数字增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。在DC_Iris调节时,曝光量调节并不会参考AE_ROUTE_EX,因此实际生效的AE_ROUTE_EX不会更新。
  • 针对P-Iris,默认AE扩展分配策略是首先调节光圈,将光圈调至最大后调节曝光时间,最后再分配sensor模拟增益、sensor数字增益和ISP数字增益。如果当前曝光量不在用户设定的路线范围当中,按默认策略分配。
  • 在线进行DC-Iris和P-Iris切换,扩展AE route会重置为与光圈类型相匹配的默认分配策略,用户可以根据需要在切换光圈类型时自行设置扩展AE route。默认分配策略的AE route参数与切换时的AE曝光时间最小/最大值,增益最大/最小值和光圈分量最大/最小值相对应。注意:由于cmos.c也可以设置AE分配路线,若要在线进行DC-Iris和P-Iris切换,请不要在cmos.c中给iris_type赋值,这样AE算法设置的光圈类型就会传递到cmos.c中,此时回调cmos_get_ae_default或cmos_fps_set等函数,才能得到与光圈类型相匹配的扩展AE route。

【相关数据类型及接口】

ss_mpi_isp_set_ae_route_attr_ex

ot_isp_exp_info

【说明】

定义ISP曝光内部状态信息。

【定义】

typedef struct {
    td_u32  exp_time; 
    td_u32  short_exp_time;
    td_u32  median_exp_time; 
    td_u32  long_exp_time;
    td_u32  a_gain; 
    td_u32  d_gain; 
    td_u32  a_gain_sf; 
    td_u32  d_gain_sf; 
    td_u32  isp_d_gain; 
    td_u32  exposure;  
    td_bool exposure_is_max; 
    td_s16  hist_error; 
    td_u32  ae_hist1024_value[OT_ISP_HIST_NUM];
    td_u8  ave_lum;
    td_u32 lines_per500ms;
    td_u32 piris_fno; 
    td_u32 fps;
    td_u32 iso; 
    td_u32 isosf; 
    td_u32 iso_calibrate;
    td_u32 ref_exp_ratio;
    td_u16 wdr_exp_coef;
    td_u32 first_stable_time; 
    td_u32 quick_star_iso; 
    ot_isp_ae_route ae_route;
    ot_isp_ae_route_ex ae_route_ex;
    ot_isp_ae_route ae_route_sf;
    ot_isp_ae_route_ex ae_route_sf_ex; 
} ot_isp_exp_info;

【成员】

成员名称

描述

exp_time

当前曝光时间,单位为微秒(us)。

取值范围:[0x0, 0xFFFFFFFF]

short_exp_time

FSWDR模式下,表示4To1 WDR模式下短帧(S)曝光时间,2To1 WDR模式时表示长帧曝光时间,单位为微秒(us)。线性模式不用关注该值。

取值范围:[0x0, 0xFFFFFFFF]

median_exp_time

FSWDR模式下,表示4To1 WDR模式下中帧(M)曝光时间,3To1 WDR模式时表示长帧曝光时间,单位为微秒(us)。线性模式不用关注该值。

取值范围:[0x0, 0xFFFFFFFF]

long_exp_time

FSWDR模式下,表示4To1 WDR模式下的长帧曝光时间,单位为微秒(us)。

取值范围:[0x0, 0xFFFFFFFF]

a_gain

当前sensor模拟增益,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF]

d_gain

当前sensor数字增益,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF]

a_gain_sf

当前sensor短帧模拟增益,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF]

d_gain_sf

当前sensor短帧数字增益,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF]

isp_d_gain

当前ISP数字增益,10bit小数精度。

取值范围:[0x400, 0xFFFFFFFF]

exposure

当前曝光量,等于曝光时间与曝光增益的乘积,其中曝光时间的单位为微秒(us)。

取值范围:[0x0, 0xFFFFFFFF]

exposure_is_max

0:ISP未达到最大曝光水平;

1:ISP达到最大曝光水平。

hist_error

统计信息,AE的目标亮度值与实际值的差,该值为正表示当前期望的亮度信息大于实际的亮度信息,该值为负表示期望的亮度信息小于实际的亮度信息。

取值范围:[-0x8000, 0x7FFF]

ae_hist1024_value [OT_ISP_HIST_NUM]

全局1024段直方图统计信息

取值范围:[0x0, 0xFFFFFFFF]

ave_lum

平均亮度信息

取值范围:[0x0, 0xFF]

lines_per500ms

当前每500ms对应的曝光行数,可用于将曝光时间的单位由us转换成行数。

取值范围:[0x0, 0xFFFFFFFF]

piris_fno

当前P-Iris光圈F值对应的等效增益。

取值范围:[0x0, 0x400]

fps

实际图像帧率 * 100。

取值范围:[0x0, 0xFFFFFFFF]

iso

当前sensor模拟增益*sensor数字增益*ISP数字增益*100,其中增益的精度都为10bit。

取值范围:[0x64, 0xFFFFFFFF]

isosf

当前sensor短帧模拟增益*sensor短帧数字增益*ISP短帧数字增益*100,其中增益的精度都为10bit。

取值范围:[0x64, 0xFFFFFFFF]

iso_calibrate

标准ISO, 用于拍照DCF信息显示。

iso_calibrate = iso * 256 / iso_cal_coef。

取值范围:[0x0,0xFFFFFFFF]

ref_exp_ratio

参考曝光比,用于估计当前场景的动态范围,会受到ot_isp_wdr_exposure_attr中tolerance和speed等值的影响。

取值范围:[0x40, 0x4000]

wdr_exp_coef

基于原始亮度目标值调整的曝光系数,仅在使能advance ae时有效,值越小,图像整体亮度越低。AE实际亮度目标值为compensation * wdr_exp_coef /1024。

取值范围:[0x0, 0x400]

quick_star_iso

不带光敏AE启动快速收敛模式下,AE快速计算出当前亮度环境下,收敛完成后大致的ISO值,用户可根据此ISO值决定是否要打开IR CUT和IR LED。

取值范围:[0x64, 0xFFFFFFFF]

first_stable_time

首次AE收敛稳定的时间,单位为微秒(us)。

取值范围:[0x0, 0xFFFFFFFF]

ae_route

实际生效的AE route,各个节点中的曝光时间以us为单位,增益为10bit精度,光圈取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。光圈类型为DC-Iris时,节点光圈值不会对曝光量分配产生影响。

ae_route_ex

实际生效的扩展AE route,各个节点中的曝光时间以us为单位,增益为10bit精度,光圈取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。光圈类型为DC-Iris时,节点光圈值不会对曝光量分配产生影响。

ae_route_sf

实际生效的短帧AE route,各个节点中的曝光时间以us为单位,增益为10bit精度,光圈取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。光圈类型为DC-Iris时,节点光圈值不会对曝光量分配产生影响。

ae_route_sf_ex

实际生效的短帧扩展AE route,各个节点中的曝光时间以us为单位,增益为10bit精度,光圈取值范围为[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]。光圈类型为DC-Iris时,节点光圈值不会对曝光量分配产生影响。

【注意事项】

  • 曝光量的计算未考虑光圈状态,为曝光时间、sensor模拟增益、sensor数字增益、ISP数字增益4者乘积,其中曝光时间的单位为曝光行数,曝光增益为6bit小数精度。若该值的精度不足以满足需求,可以根据高精度的曝光时间(us)和增益(10bit小数精度)重新计算一个曝光量。
  • ISP是否达到最大曝光水平的计算未考虑光圈状态。如果当前曝光时间大于等于最大目标曝光时间,当前增益大于等于最大目标增益,那么就认为ISP达到最大曝光水平,否则就未达到最大曝光水平。
  • 图像平均亮度经过归一化处理,取值范围:[0, 255]
  • fps可用于查询自动降帧状态下的实际帧率。
  • iso和ref_exp_ratio都可作为FSWDR模式下切换到长帧模式的参考量。不过需要注意的是,若以iso作为参考量,需要考虑到曝光比对于切换阈值的影响,避免来回在长帧模式和正常WDR模式之间切换;若以ref_exp_ratio作为参考量,长帧模式下亮区可能是过曝的,ref_exp_ratio已不能正确表示场景动态范围,这会影响到长帧模式切换回正常WDR模式的判别。线性模式下ref_exp_ratio值可作为场景动态范围参考,当前场景动态范围越小,ref_exp_ratio越小;当前场景动态范围越大,ref_exp_ratio越大。
  • a_gain_sf、d_gain_sf、isosf在线性模式下默认为1024、1024、100,但从其他模式切换到线性模式时保留上一次的值不更新。
  • 当长短帧增益分开配置时,iso、isosf的结果还包含对应帧的WDRGain。
  • WDR模式下,优先帧为长帧时,exposure_is_max表示长帧是否达到最大曝光量,优先帧为短帧时,exposure_is_max表示短帧是否达到最大曝光量。
  • 在增益分开配置使能时,isp_d_gain显示为两帧中的最小值。
  • 参考曝光比更关注场景的亮暗对比,如果场景内有大片黑色或者白色区域算出来的曝光比会很大。
  • KOL场景会用first_stable_time来表示每次fast ae收敛的时间,由于ae是延时反馈系统,因此收敛后要多配置几帧让sensor生效该亮度(几帧取决于sensor的生效时间)。

【相关数据类型及接口】

ss_mpi_isp_query_exposure_info

ot_isp_prior_frame

【说明】

WDR模式下的优先帧。

【定义】

typedef enum {
    OT_ISP_LONG_FRAME      = 0,
    OT_ISP_SHORT_FRAME     = 1,
    OT_ISP_PRIOR_FRAME_BUTT
} ot_isp_prior_frame;

【成员】

成员名称

描述

OT_ISP_LONG_FRAME

优先帧为长帧。

OT_ISP_SHORT_FRAME

优先帧为短帧。

【注意事项】

  • 优先帧为长帧时,优先根据长帧的曝光路线设置长帧的曝光参数,其中2合1WDR模式下当增益分开配置时,短帧的曝光路线会根据长帧的曝光参数进行调整,优先帧为短帧时同理。默认优先帧为长帧。
  • 优先帧切换时,会回调cmos_get_ae_default,更新曝光时间最大/最小值,增益最大/最小值,光圈最大/最小值和AE compensation等参数,同时,AE内部会将hist_ratio_slope和max_hist_offset更新为算法默认值。客户可以根据需要,在切换完成后调用MPI接口修改参数。
  • 线性模式下优先帧设置无效。

【相关数据类型及接口】

无

AI

ot_isp_iris_status

【说明】

定义ISP光圈状态。

【定义】

typedef enum {
    OT_ISP_IRIS_KEEP  = 0,
    OT_ISP_IRIS_OPEN  = 1,
    OT_ISP_IRIS_CLOSE = 2,
    OT_ISP_IRIS_BUTT
} ot_isp_iris_status;

【成员】

成员名称

描述

OT_ISP_IRIS_KEEP

光圈保持当前状态。

OT_ISP_IRIS_OPEN

光圈全开。

OT_ISP_IRIS_CLOSE

光圈全关。

【注意事项】

该值设置为OT_ISP_IRIS_OPEN或OT_ISP_IRIS_CLOSE时,光圈处于全开或全关的状态,可用于测试AI电路和驱动是否正确。AI算法运行时,为保证其能够正常工作,需将该值设置为OT_ISP_IRIS_KEEP。

【相关数据类型及接口】

无

ot_isp_iris_type

【说明】

定义ISP光圈类型。

【定义】

typedef enum {
    OT_ISP_IRIS_TYPE_DC = 0,
    OT_ISP_IRIS_TYPE_P,
    OT_ISP_IRIS_TYPE_BUTT,
} ot_isp_iris_type;

【成员】

成员名称

描述

OT_ISP_IRIS_TYPE_DC

DC-Iris光圈。

OT_ISP_IRIS_TYPE_P

P-Iris光圈。

【注意事项】

  • 必须设置正确的光圈类型,AI算法才能正常工作。
  • 若对接的是手动光圈镜头,可将该值设置为OT_ISP_IRIS_TYPE_DC,建议此时关闭AI使能。
  • 由DC-Iris切换至P-Iris,需提前设置好P-Iris镜头相关参数,并且将光圈状态设置为OT_ISP_IRIS_KEEP,再进行切换。

【相关数据类型及接口】

无

ot_isp_iris_f_no

【说明】

定义ISP光圈F值。

【定义】

typedef enum {
    OT_ISP_IRIS_F_NO_32_0 = 0,
    OT_ISP_IRIS_F_NO_22_0,
    OT_ISP_IRIS_F_NO_16_0,
    OT_ISP_IRIS_F_NO_11_0,
    OT_ISP_IRIS_F_NO_8_0,
    OT_ISP_IRIS_F_NO_5_6,
    OT_ISP_IRIS_F_NO_4_0,
    OT_ISP_IRIS_F_NO_2_8,
    OT_ISP_IRIS_F_NO_2_0,
    OT_ISP_IRIS_F_NO_1_4,
    OT_ISP_IRIS_F_NO_1_0,
    OT_ISP_IRIS_F_NO_BUTT,
} ot_isp_iris_f_no;

【成员】

成员名称

描述

等效增益

OT_ISP_IRIS_F_NO_32_0

光圈F32.0。

1

OT_ISP_IRIS_F_NO_22_0

光圈F22.0。

2

OT_ISP_IRIS_F_NO_16_0

光圈F16.0。

4

OT_ISP_IRIS_F_NO_11_0

光圈F11.0。

8

OT_ISP_IRIS_F_NO_8_0

光圈F8.0。

16

OT_ISP_IRIS_F_NO_5_6

光圈F5.6。

32

OT_ISP_IRIS_F_NO_4_0

光圈F4.0。

64

OT_ISP_IRIS_F_NO_2_8

光圈F2.8。

128

OT_ISP_IRIS_F_NO_2_0

光圈F2.0。

256

OT_ISP_IRIS_F_NO_1_4

光圈F1.4。

512

OT_ISP_IRIS_F_NO_1_0

光圈F1.0。

1024

【注意事项】

针对P-Iris,AE算法根据分配路线计算曝光量时,光圈F值要等效成一个增益,公式如下:等效增益FNO = 1 << OT_ISP_IRIS_F_NO_XX_XX。由此可知F32.0对应增益1,F22.0对应增益2,F16.0对应增益4,以此类推,F1.0对应增益1024。

【相关数据类型及接口】

无

ot_isp_mi_attr

【说明】

定义手动光圈属性。

【定义】

typedef struct {
    td_u32  hold_value;
    ot_isp_iris_f_no  iris_fno;
} ot_isp_mi_attr;

【成员】

成员名称

描述

hold_value

AI校正值,用于DC-Iris的调试。

取值范围:[0x0, 0x3E8]

iris_fno

手动光圈大小,根据光圈F值进行区分,仅支持P-Iris,不支持DC-Iris。

【注意事项】

  • 对接DC-Iris镜头时,若ot_isp_iris_status设置为OT_ISP_IRIS_KEEP,手动光圈使能,hold_value可用于DC-Iris的调试,此时PWM的占空比即为hold_value。
  • 对接P-Iris镜头时,若ot_isp_iris_status设置为OT_ISP_IRIS_KEEP,手动光圈使能,iris_fno可用于P-Iris的调试,此时会控制P-Iris步进电机走到光圈F值与iris_fno最接近的位置。自动曝光模式下,P-Iris手动光圈不生效,此时若要固定光圈为某个F值,可以将max_iris_fnomax_iris_fno_target/ min_iris_fnomin_iris_fno_target设置为相同值来实现。

【相关数据类型及接口】

无

ot_isp_dciris_attr

【说明】

定义DC-Iris AI算法属性。

【定义】

typedef struct {
    td_s32 kp; 
    td_s32 ki;
    td_s32 kd;
    td_u32 min_pwm_duty; 
    td_u32 max_pwm_duty; 
    td_u32 open_pwm_duty; 
} ot_isp_dciris_attr;

【成员】

成员名称

描述

kp

比例增益,用于调节光圈的开关速度,该值越大光圈打开和关闭的速度越快。该值过小光线剧烈变化收敛过程中容易出现振荡,该值过大容易出现超调,也会导致振荡。该值的合理设置与电路特性和镜头相关。建议值为7000。

取值范围:[0, 100000]

ki

积分增益,用于调节光圈的开关速度,该值越大光圈打开和关闭的速度越快。该值较小时,碰到强光收敛后画面会稳定在一个比较低的亮度上;该值较大时可能会导致强光场景光圈无法关闭。该值的合理设置与电路特性和镜头相关。建议值为100,该值一般不需要修改。

取值范围:[0, 1000]

kd

微分增益,用于限制光线剧烈变化时光圈的开关速度,该值越大光线剧烈变化时光圈打开和关闭的速度越慢。该值过大对于瞬间变化的亮度过于敏感,会导致场景亮度快速变化时画面出现振荡。该值的合理设置与电路特性和镜头相关。建议值为3000。

取值范围:[0, 100000]

min_pwm_duty

最小PWM占空比。该值越小过曝时光圈关闭速度越快,但容易导致光圈来回震荡。该值的合理设置与电路特性和镜头相关。建议值为250。

取值范围:[0, 1000]

max_pwm_duty

最大PWM占空比。该值越大画面全黑时光圈打开速度越快,该值过小则可能导致退出光圈控制区域时光圈仍未达到最大,造成画面噪声严重。该值的合理设置与电路特性和镜头相关。建议值为950。

取值范围:[0, 1000]

open_pwm_duty

光圈打开时的PWM占空比。当画面亮度稳定并且PWM占空比大于该值一段时间后,退出光圈控制区域。所以该值不能太小,否则容易导致光圈未达到最大就退出了光圈控制区域,造成画面噪声严重。该值的合理设置与电路特性和镜头相关。建议值为800。

取值范围:[0, 1000]

【注意事项】

  • 当光圈关闭出现震荡时,一般意味着光圈关闭速度太快了,可以通过适当减小kp和增大min_pwm_duty来解决。
  • open_pwm_duty的取值要求在min_pwm_duty和max_pwm_duty之间,必须确保该值能将光圈较快的打开。

【相关数据类型及接口】

ot_isp_piris_attr

【说明】

定义P-Iris 属性。

【定义】

typedef struct {
    td_bool step_fno_table_change;
    td_bool zero_is_max;
    td_u16  total_step;
    td_u16  step_count;
    td_u16 step_fno_table[OT_ISP_AI_MAX_STEP_FNO_NUM];
    ot_isp_iris_f_no  max_iris_fno_target;
    ot_isp_iris_f_no  min_iris_fno_target;
    td_bool fno_ex_valid;
    td_u32  max_iris_fno_target_linear;
    td_u32  min_iris_fno_target_linear;
} ot_isp_piris_attr;

【成员】

成员名称

描述

step_fno_table_change

P-Iris步进电机位置与光圈F值映射表是否更新标志。该值为TD_TRUE时会更新P-Iris步进电机位置与F值映射表,为TD_FALSE时不更新。

zero_is_max

P-Iris步进电机Step 0是否对应最大光圈位置标志,取值与P-Iris镜头相关。该值为TD_TRUE时表示步进电机处于位置0时,光圈打开至最大,为TD_FALSE时表示步进电机处于位置0时光圈关闭。

total_step

P-Iris步进电机的总步数,具体大小与P-Iris镜头相关。

取值范围:[1, 1024]

step_count

P-Iris步进电机的可用步数,具体大小与P-Iris镜头相关。

取值范围:[1, 1024]

step_fno_table

P-Iris步进电机位置与F值映射表,具体数据与P-Iris镜头相关。

取值范围:[1, 1024]

max_iris_fno_target

最大光圈目标值,可用于控制AE分配路线,实际生效光圈大小与P-Iris镜头相关。

取值范围:[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]

min_iris_fno_target

最小光圈目标值,可用于控制AE分配路线,实际生效光圈大小与P-Iris镜头相关。

取值范围:[OT_ISP_IRIS_F_NO_32_0, OT_ISP_IRIS_F_NO_1_0]

fno_ex_valid

对接P-Iris时,AE分配路线是否采用更高精度的光圈F值等效增益标志。该值为TD_TRUE时表示AE分配路线采用高精度的光圈F值等效增益。默认为TD_FALSE。

max_iris_fno_target_linear

最大光圈F值等效增益目标值,可用于控制AE分配路线,实际生效光圈大小与P-Iris镜头相关。

取值范围:[1, 1024]

min_iris_fno_target_linear

最小光圈F值等效增益目标值,可用于控制AE分配路线,实际生效光圈大小与P-Iris镜头相关。

取值范围:[1, 1024]

【注意事项】

  • 在线更换P-Iris镜头时,可以通过MPI设置该结构体,将新镜头的参数传递给AE算法和P-Iris驱动。
  • step_fno_table_change为只写寄存器,通过MPI获取该参数的值始终为TD_FALSE。
  • total_step表示P-Iris步进电机的总步数,可用于标定光圈的起始位置。step_count表示P-Iris步进电机的可用步数,一般小于total_step,因为靠近光圈关闭端的位置在将光圈孔径转换为F值时误差较大,光圈调节过程中容易出现振荡,所以通常不会利用光圈关闭端附近的那些位置。当前最多支持1024步的P-Iris镜头,若P-Iris镜头的精度很高,可调节步数超过1024,建议舍去光圈关闭端附近的那些位置。
  • P-Iris步进电机位置与光圈F值映射表step_fno_table一般根据镜头原厂提供的步进电机位置与光圈孔径对应关系制作。由于P-Iris的控制通过AE分配路线进行,这就要求光圈F值与曝光时间和增益有较好的线性关系,因此映射表需要较高的精度。这里用1024表示F1.0,512表示F1.4,以此类推,1表示F32.0。制作映射表时,可以根据最大光圈孔径对应的实际F值来规定映射表的最大值,也可以不用管光圈达到最大时的实际F值是多少,统一将最大光圈孔径映射为1024。同一款镜头处于不同焦距时,step_fno_table可能需要修改。
  • 以某款P-Iris镜头为例说明与镜头相关的参数该如何设置。Tabell 1中步进电机位置与孔径面积对应关系是镜头原厂提供的。该款镜头步进电机总步数为93,步进电机位置为0时,光圈孔径面积最大,标称最大相对孔径为F1.4,据此规定映射表F值最大值为512。规定好最大值后,就可以计算出其他孔径面积对应的F值,因为孔径面积与F值成线性关系。比如说步进电机位置1对应的孔径面积为48.835,得到F值为(48.835/49.366)*512=506,以此类推,可以得到所有有效步进电机位置对应的F值。由下表可以看到,当镜头靠近关闭端时,孔径面积很小,与最大孔径面积相差上万倍,映射表F值精度已不足以表现出孔径面积的变化,得到的F值都为0。实际上,哪怕提高映射表精度,由于镜头关闭端附近标称孔径面积与实际孔径面积一般相差较大,得到的F值也是不正确的,建议不要使用,否则在光圈调节过程中容易出现振荡。对于该款镜头,建议制作映射表时只取前62步,因此得到镜头相关的参数如Tabell 2所示。
  • 步进电机位置与光圈F值映射表step_fno_table的前step_count个元素才是有效的,会被AE算法计算时用到,需要保证数组座标小于step_count时,值单调递增,当数组座标为(step_count-1)时,达到光圈最大F值。通过MPI设置step_fno_table时,只有前step_count个元素才会被写入寄存器保存;通过MPI获取step_fno_table时,只有前step_count个元素才会读出有效数值,其他值为0。
  • 光圈类型为P-Iris时,AE算法计算最大/最小曝光量会参考max_iris_fno_target/min_iris_fno_target(若fno_ex_valid为true,则参考max_iris_fno_target_linear/min_iris_fno_target_linear)的值,因此这几个值要与step_fno_table的值相匹配,即最大/最小值都在step_fno_table有效数据范围内。
  • 在手动配置DCF光圈相关信息时,需要关闭AI。如果需要配置的最大及实际光圈值为ot_isp_iris_f_no中定义的10个标准值,配置max_iris_fno_target为最大光圈值,配置min_iris_fno_target为实际光圈值即可。如果光圈不为10个标准值,则需要配置fno_ex_valid为TD_TRUE,以F32.0等效增益为1倍为基数计算实际光圈及最大光圈等效增益,并配置max_iris_fno_target_linear为最大光圈等效增益,配置min_iris_fno_target_linear为实际光圈等效增益。如果AI使能,则根据实际光圈生效的大小计算光圈值,并更新DCF信息。光圈最小可支持到F32.0。
  • 当P-Iris步进电机0为最大光圈位置时,更改step_count,会影响它的最小值生效的大小。

表 1 P-Iris步进电机位置与F值映射表

步进电机位置

孔径面积

映射表F值

步进电机位置

孔径面积

映射表F值

步进电机位置

孔径面积

映射表F值

0

49.366

512

35

20.07

208

70

0.136

1

1

48.835

506

36

19.241

200

71

0.095

1

2

48.234

500

37

18.42

191

72

0.067

1

3

47.571

493

38

17.609

183

73

0.045

0

4

46.856

486

39

16.808

174

74

0.028

0

5

46.11

478

40

16.017

166

75

0.016

0

6

45.324

470

41

15.237

158

76

0.008

0

7

44.511

462

42

14.469

150

77

0.004

0

8

43.674

453

43

13.788

143

78

0.003

0

9

42.822

444

44

12.972

135

79

0.003

0

10

41.963

435

45

12.254

127

80

0.002

0

11

41.099

426

46

11.541

120

81

0.002

0

12

40.231

417

47

10.843

112

82

0.001

0

13

39.357

408

48

10.162

105

83

0.001

0

14

38.478

399

49

9.497

98

84

0.001

0

15

37.608

390

50

8.851

92

85

close

0

16

36.721

381

51

8.222

85

86

close

0

17

35.832

372

52

7.611

79

87

close

0

18

34.94

362

53

7.018

73

88

close

0

19

34.047

353

54

6.443

67

89

close

0

20

33.153

344

55

5.893

61

90

close

0

21

32.259

335

56

5.354

56

91

close

0

22

31.365

325

57

4.832

50

92

close

0

23

30.473

316

58

4.329

45

93

M-stop

0

24

29.582

307

59

3.843

40

-

-

-

25

28.706

298

60

3.376

35

-

-

-

26

27.82

289

61

2.926

30

-

-

-

27

26.937

279

62

2.494

26

-

-

-

28

26.059

270

63

2.08

22

-

-

-

29

25.184

261

64

1.684

17

-

-

-

30

24.315

252

65

1.305

14

-

-

-

31

23.451

243

66

0.949

10

-

-

-

32

22.593

234

67

0.607

6

-

-

-

33

21.741

225

68

0.374

4

-

-

-

34

20.896

217

69

0.225

2

-

-

-

表 2 P-Iris镜头相关参数

参数名

参数值

备注

zero_is_max

TD_TRUE

步进电机位置0对应光圈最大孔径,因此该值为TD_TRUE

total_step

93

步进电机总步数为93

step_count

62

步进电机可用步数为62

step_fno_table

{30,35,40,45,50,56,61,67,73,79,85,92,98,105,112,120,127,135,143,150,158,166,174,183,191,200,208,217,225,234,243,252,261,270,279,289,298,307,316,325,335,344,353,362,372,381,390,399,408,417,426,435,444,453,462,470,478,486,493,500,506,512}

根据表1,取步进电机前62步对应的F值,按照从小到大的排列顺序,制作映射表。AE算法计算时,只会用到step_fno_table数组中的前step_count个元素。当数组座标小于step_count时,值必须保证是单调递增的。当数组座标为(step_count-1)时,达到光圈最大F值512。

max_iris_fno_target

OT_ISP_IRIS_F_NO_1_4

映射表最大值512对应F1.4

min_iris_fno_target

OT_ISP_IRIS_F_NO_5_6

映射表最小值30接近对应F5.6

fno_ex_valid

TD_FALSE

默认不采用高精度的光圈F值等效增益

max_iris_fno_target_linear

512

取step_fno_table有效数据范围内的最大值512

min_iris_fno_target_linear

30

取step_fno_table有效数据范围内的最小值30

【相关数据类型及接口】

ot_isp_iris_attr

【说明】

定义ISP光圈属性。

【定义】

typedef struct {
    td_bool enable;
    ot_op_mode     op_type;
    ot_isp_iris_type   iris_type;
    ot_isp_iris_status iris_status;
    ot_isp_mi_attr     mi_attr;
} ot_isp_iris_attr;

【成员】

成员名称

描述

enable

自动光圈使能。

op_type

自动光圈或手动光圈模式选择。

iris_type

光圈类型,DC-Iris或P-Iris。

iris_status

光圈状态。

mi_attr

手动光圈属性设置结构体。

【注意事项】

  • 进行AI算法测试前,建议确认AI电路特性是否符合录像机要求。
  • 针对DC-Iris镜头,AI算法会根据画面亮度,调节PWM占空比对光圈进行控制。当曝光时间和增益达到最小目标值之后,会进入光圈控制区域。当光圈控制能满足目标亮度的要求时,AE直接返回,保持曝光时间和增益不变。当画面亮度稳定且PWM占空比维持在打开值一段时间后,AI算法会认为光圈已经打开至最大,退出光圈控制区,将控制权交还给AE。处于光圈控制区时,更改AE算法参数,如最大/最小曝光时间、最大/最小增益和抗闪等需要即时生效的参数,AE会即时响应,根据新设定的参数和环境亮度,AI算法重新决定是否要进入光圈控制区。由于进入光圈控制区域和退出光圈控制区域需要短暂时间,针对手动光圈镜头建议关闭AI功能,否则AE的调节速度会受到一点影响。针对DC-Iris镜头建议一直打开AI功能,随意开关AI容易导致光圈控制出现异常。针对某些长焦的DC-Iris镜头,默认参数可能会导致光圈打开/关闭速度过快,此时可以调节相关参数来解决,详见ot_isp_dciris_attr部分描述。
  • 针对P-Iris镜头,光圈控制通过AE分配路线进行。P-Iris对接重点在于正确设置镜头相关参数和合理设置AE分配路线,详见ot_isp_piris_attr和ss_mpi_isp_set_ae_route_attr部分描述,才能保证P-Iris正常工作。由于不同P-Iris的驱动方式可能会有差别,用户可以自行修改P-Iris驱动以适配不同镜头。
  • 关闭AI功能,对于DC-Iris镜头,光圈会打开到最大;对于P-Iris镜头,光圈会打开到最大光圈目标值对应步进电机位置,但此时曝光分配仍会参考AE路线,可能导致画面亮度异常,因此对接P-Iris镜头时,若不想使能AI,为保证曝光正常,需要把光圈类型切换至OT_ISP_IRIS_TYPE_DC。
  • 由DC-Iris切换至P-Iris,需提前设置好P-Iris镜头相关参数,并且将光圈状态设置为OT_ISP_IRIS_KEEP,再进行切换。
  • 由于P-Iris在使能后需要一段时间才能完成初始化,需要等P-Iris硬件完成初始化后才能由P-Iris切回DC-Iris光圈,否则可能出现亮度异常。

Hi3516CV610配置:

  • 利用Demo板或Ref板进行DC-Iris测试时,load ko时要配置以下多个寄存器,用于配置管脚复用和时钟:bspmm 0x11130054 0x1627,bspmm 0x11014598 0x0010。
  • 利用Demo板或Ref板进行P-Iris测试时,load ko时要配置以下多个寄存器,用于配置管脚复用和时钟:bspmm 0x17940070 0x1420;bspmm 0x17940074 0x1030;bspmm 0x17940078 0x1030;bspmm 0x1794007c 0x1030;并配置GPIO-10对应管脚为输出模式:bspmm 0x1109a400 0xf。

Hi3519DV500配置:

  • 利用Demo板或Ref板进行DC-Iris测试时,load ko时要配置以下多个寄存器,用于配置管脚复用和时钟:bspmm 0x10260058 0x1615,bspmm 0x11014598 0x0010。
  • 利用Demo板或Ref板进行P-Iris测试时,load ko时要配置以下多个寄存器,用于配置管脚复用和时钟:bspmm 0x1026005c 0x1001;bspmm 0x10260064 0x1411;bspmm 0x10260060 0x1001;bspmm 0x10260068 0x1001;并配置GPIO-5和GPIO-4对应管脚为输出模式:bspmm 0x11095400 0x1;bspmm 0x11094400 0xf0。

注意:

采用SDK提供的AE库时,AE_init会打开一次默认的PWM0信号,若客户需要采用PWM0做其他处理,需要指定AI对应的PWM Number为其他值,Hi3519DV500 demo板中使用的pwm2的通道0作为输入,Hi3516CV610 demo板使用pwm1的通道7作为输入。

【相关数据类型及接口】

ot_isp_exp_conv_param

【说明】

定义不同帧率等曝光量转换相关曝光参数属性。

【定义】

typedef struct {
    td_u32 tar_fps;
    td_u32 tar_isp_dgain; /* 10 bit */
    ot_isp_exp_param_reg time_reg[10];
    ot_isp_exp_param_reg again_reg[10];
    ot_isp_exp_param_reg dgain_reg[10];
} ot_isp_exp_conv_param;

【成员】

成员名称

描述

tar_fps

输入参数,等曝光量转换目标帧率 * 100。

取值范围:[0x0, 0xFFFFFFFF]

tar_isp_dgain

等曝光量转换后的ISP数字增益,精度10bit。

time_reg [10]

等曝光量转换后的Sensor曝光时间的寄存器值和寄存器地址。其成员变量reg_addr为Sensor寄存器的地址,reg_value为寄存器的值。最大可转换输出10个寄存器值和地址。

again_reg [10]

等曝光量转换后的Sensor 模拟增益的寄存器值和寄存器地址。其成员变量reg_addr为Sensor寄存器的地址,reg_value为寄存器的值。最大可转换输出10个寄存器值和地址。

dgain_reg [10]

等曝光量转换后的Sensor 数字增益的寄存器值和寄存器地址。其成员变量reg_addr为Sensor寄存器的地址,reg_value为寄存器的值。最大可转换输出10个寄存器值和地址。

【注意事项】

无。

【相关数据类型及接口】

ot_isp_exp_param_reg

【说明】

定义寄存器状态。

【定义】

typedef struct {
    td_u32 reg_addr;
    td_u32 reg_value;
} ot_isp_exp_param_reg;

【成员】

成员名称

描述

reg_addr

寄存器的地址。

reg_value

寄存器的值。

【注意事项】

无。

【相关数据类型及接口】

ot_isp_exp_conv_param

AWB

概述

色温随可见光的光谱成分变化而变化,在低色温光源下,白色物体偏红,在高色温光源下,白色物体偏蓝。人眼可根据大脑的记忆判断,识别物体的真实颜色,AWB算法的功能是降低外界光源对物体真实颜色的影响,使得我们采集的颜色信息转变为在理想日光光源下的无偏色信息。

重要概念

  • 色温:色温是按绝对黑体来定义的,光源的辐射在可见区和绝对黑体的辐射完全相同时,此时黑体的温度就称此光源的色温。
  • 白平衡:在不同色温的光源下,白色在传感器中的响应会偏蓝或偏红。白平衡算法通过调整R, G, B三个颜色通道的强度,使白色真实呈现。

功能描述

AWB模块由硬件的WB信息统计模块及AWB策略控制算法firmware两部分组成。ISP的WB信息统计模块判断sensor输出的每个像素是否满足用户设定的白点条件,计算所有满足条件的像素的R、G、B三个颜色通道平均值。

支持将图像分成M*N(M行N列)区域,统计每个区域的R、G、B均值以及参与统计的白点个数。

支持输出整幅图像的R、G、B均值以及参与统计的白点个数。

AWB工作原理如图1所示。

图 1 AWB工作原理图

API参考

AWB库接口

所有AWB库接口都只是针对SDK提供的AWB库,如果客户自己实现AWB库,不需要关注这些接口,且无法使用这些接口。

ss_mpi_awb_register

【描述】

向ISP注册AWB库。

【语法】

td_s32 ss_mpi_awb_register(ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *awb_lib);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号。

输入

*awb_lib

AWB算法库结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

  • 该接口调用了ISP库提供的AWB注册回调接口ss_mpi_isp_awb_lib_reg_callback,以实现向ISP库注册的功能。
  • 用户调用此接口完成AWB库向ISP库注册。
  • AWB库可以注册多个实例。
  • 此接口不支持多进程操作。
  • 不允许向同一pipe重复注册AWB库。

【举例】

无

【相关主题】

ss_mpi_isp_awb_lib_reg_callback

ss_mpi_awb_unregister

【描述】

向ISP注销AWB库。

【语法】

td_s32 ss_mpi_awb_unregister (ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *awb_lib);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号。

输入

*awb_lib

AWB算法库结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

  • 该接口调用了ISP库提供的AWB反注册回调接口ss_mpi_isp_awb_lib_unreg_callback,以实现AWB向ISP库反注册的功能。
  • 用户调用此接口完成AWB库向ISP库反注册。
  • 此接口不支持多进程操作。

【举例】

无

【相关主题】

ss_mpi_isp_awb_lib_unreg_callback

ss_mpi_awb_sensor_reg_callback

【描述】

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

【语法】

td_s32 ss_mpi_awb_sensor_reg_callback (ot_vi_pipe vi_pipe, ot_isp_3a_alg_lib *awb_lib, ot_isp_sns_attr_info *sns_attr_info, ot_isp_awb_sensor_register * awb_sns_register);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号。

输入

*awb_lib

AWB算法库结构体指针。

输入

*sns_attr_info

向AWB注册的sensor的属性。

输入

*awb_sns_register

sensor注册结构体指针。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

  • sns_id是sensor库中自定义的值,主要用于校对向ISP注册的sensor和向3A注册的sensor是否为同一个sensor。
  • AWB通过sensor注册的一系列回调接口,获取差异化的初始化参数,并控制sensor。
  • 此接口不支持多进程操作。

图 1 AWB库 与sensor库间的接口

【举例】

ot_isp_3a_alg_lib awb_lib;
ot_isp_awb_sensor_register  awb_register;
ot_isp_sns_attr_info    sns_attr_info;
ot_isp_awb_sensor_exp_func *exp_funcs = &awb_register.sns_exp;
memset(exp_funcs, 0, sizeof(ot_isp_awb_sensor_exp_func));
exp_funcs-> pfn_cmos_get_awb_default = cmos_get_awb_default;
ot_vi_pipe vi_pipe = 0;
awb_lib.id = 0;
sns_attr_info. sns_id = HY_S0603_ID;
strcpy(awb_lib. lib_name, OT_AWB_LIB_NAME);
ret = ss_mpi_awb_sensor_reg_callback(vi_pipe, &awb_lib, &sns_attr_info, &awb_register);
if (ret) {
    printf("sensor register callback function to awb lib failed!\n");
    return ret;
}

【相关主题】

无

ss_mpi_awb_sensor_unreg_callback

【描述】

AWB库提供的sensor注消的回调接口。

【语法】

td_s32 ss_mpi_awb_sensor_unreg_callback (ot_vi_pipe vi_pipe, const ot_isp_3a_alg_lib *awb_lib, ot_sensor_id sns_id);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号

输入

*awb_lib

AWB算法库结构体指针

输入

sns_id

向AWB注册的sensor的Id。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_isp.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

此接口不支持多进程操作。

【相关主题】

无

AWB控制模块

ss_mpi_isp_set_wb_attr

【描述】

设置白平衡属性。

【语法】

td_s32 ss_mpi_isp_set_wb_attr(ot_vi_pipe vi_pipe, const ot_isp_wb_attr * wb_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号

输入

*wb_attr

白平衡的参数属性

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

  • 白平衡控制类型为自动时,AWB算法自动调节白平衡系数。
  • 白平衡控制类型为手动时,AWB算法失效,需自行设定Rgain、Ggain、Bgain。
  • 环境色温、照度会影响白点的分布范围,SDK提供的AWB算法在运行过程中,会根据环境参数自动刷新AWB Byaer域统计信息的白点参数。用户希望在AWB算法运行时修改AWB统计参数,需要调用ss_mpi_isp_set_wb_attr接口,关闭统计参数自动刷新功能。用户关闭统计参数自动刷新功能,到ISP收到配置并响应,有2帧的延时。因此,用户设置后需要等待2帧时间再修改AWB统计参数。

【举例】

无

【相关主题】

ss_mpi_isp_get_wb_attr

ss_mpi_isp_get_wb_attr

【描述】

获取白平衡属性。

【语法】

td_s32 ss_mpi_isp_get_wb_attr (ot_vi_pipe vi_pipe, ot_isp_wb_attr *wb_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号。

输入

*wb_attr

白平衡的参数属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_wb_attr

ss_mpi_isp_set_awb_attr_ex

【描述】

设置自动白平衡扩展属性。

【语法】

td_s32 ss_mpi_isp_set_awb_attr_ex (ot_vi_pipe vi_pipe, const ot_isp_awb_attr_ex *awb_attr_ex);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号。

输入

*awb_attr_ex

自动白平衡扩展属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

当ss_mpi_isp_set_wb_attr接口成员wb_attr. auto_attr. alg_type为 OT_ISP_AWB_ALG_ADVANCE时,此接口才有效。

【举例】

无

【相关主题】

ss_mpi_isp_get_awb_attr_ex

ss_mpi_isp_get_awb_attr_ex

【描述】

获取自动白平衡扩展属性。

【语法】

td_s32 ss_mpi_isp_get_awb_attr_ex (ot_vi_pipe vi_pipe, ot_isp_awb_attr_ex *awb_attr_ex);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号。

输入

*awb_attr_ex

自动白平衡扩展属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_awb_attr_ex

ss_mpi_isp_query_wb_info

【描述】

获取当前白平衡增益系数,检测色温,饱和度值,颜色校正矩阵系数等信息。

【语法】

td_s32 ss_mpi_isp_query_wb_info(ot_vi_pipe vi_pipe, ot_isp_wb_info *wb_info);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号。

输入

*wb_info

颜色相关状态参数。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

若用户使用非 SDK AWB算法,则该接口需要自己实现并且需要同步修改PQTOOLS的xml文件,具体修改方式请参考《图像质量调试工具使用指南》第2.1.3.7小节。

【举例】

无

【相关主题】

无

ss_mpi_isp_cal_gain_by_temp

【描述】

计算特定色温下的白平衡增益系数。

【语法】

td_s32 ss_mpi_isp_cal_gain_by_temp(ot_vi_pipe vi_pipe, const ot_isp_wb_attr *wb_attr, td_u16 color_temp, td_s16 shift, td_u16 *awb_gain);

【参数】

参数名称

描述

输入/输出

vi_pipe

vi_pipe号。

输入

*wb_attr

白平衡的参数属性。需要用到ot_isp_awb_attr中的static_wb,curve_para两组标定参数。

输入

color_temp

色温值,单位为Kelvin。

取值范围:[1500, 15000]

输入

shift

白点与Planckian曲线的位置和距离。

取值范围:[-64, 64]

输入

*awb_gain

预设色温下的R, Gr, Gb, B四个通道增益。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

  • 白平衡标定参数决定预设色温增益计算的准确性,因此,在调用该接口前,必须完成标定,且标定参数配置到ISP。用户先通过ss_mpi_isp_set_wb_attr接口设置标定结果,再调用ss_mpi_isp_cal_gain_by_temp接口计算预设色温的增益,过程中不能再修改标定结果。
  • ss_mpi_isp_cal_gain_by_temp功能基于AWB标定参数实现,因此,该接口仅对ot_isp_wb_attr结构体的标定参数static_wb,curve_para 做有效范围检查,不对其他参数做约束。
  • shift参数决定光源点与Planckian曲线的位置关系,shift为负数时,光源点位于Planckian曲线左侧,计算的白平衡增益在预设色温下会稍微偏红;shift为正数时,光源点位于Planckian曲线右侧,计算的白平衡增益在预设色温下会稍微偏绿。

【举例】

无

【相关主题】

ss_mpi_isp_get_wb_attr

数据类型

Register

OT_ISP_CCM_MATRIX_NUM

【说明】

定义AWB可配置的CCM矩阵组数。

【定义】

#define OT_ISP_CCM_MATRIX_NUM                     7

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_AWB_CURVE_PARA_NUM

【说明】

定义AWB标定的Planck曲线参数个数。

【定义】

#define OT_ISP_AWB_CURVE_PARA_NUM                        6

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_AWB_ZONE_ORIG_ROW

【说明】

定义AWB水平方向分区间数目。

【定义】

#define OT_ISP_AWB_ZONE_ORIG_ROW        32

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_AWB_ZONE_ORIG_COLUMN

【说明】

定义AWB垂直方向分区间数目。

【定义】

#define OT_ISP_AWB_ZONE_ORIG_COLUMN        32

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_AWB_ZONE_NUM

【说明】

定义AWB分区间数目。

【定义】

#define OT_ISP_AWB_ZONE_NUM  (OT_ISP_AWB_ZONE_ORIG_ROW * OT_ISP_AWB_ZONE_ORIG_COLUMN)

【注意事项】

无。

【相关数据类型及接口】

OT_ISP_AWB_ZONE_STITCH_MAX

【说明】

定义拼接模式下AWB分区间数目最大值。

【定义】

#define OT_ISP_AWB_ZONE_STITCH_MAX  (OT_ISP_AWB_ZONE_NUM * OT_ISP_MAX_STITCH_NUM)

【注意事项】

无。

【相关数据类型及接口】

ot_isp_wb_stitch_stats

OT_ISP_AWB_LUM_HIST_NUM

【说明】

定义AWB的亮度分组数目。

【定义】

#define OT_ISP_AWB_LUM_HIST_NUM                          6

【注意事项】

无。

【相关数据类型及接口】

ot_isp_awb_lum_histgram_attr

OT_ISP_AWB_LS_NUM

【说明】

定义AWB的独立光源点数目。

【定义】

#define OT_ISP_AWB_LS_NUM                                4

【注意事项】

无。

【相关数据类型及接口】

ot_isp_awb_attr_ex

OT_ISP_AWB_MULTI_CT_NUM

【说明】

定义AWB的色温分组数目。

【定义】

#define OT_ISP_AWB_MULTI_CT_NUM                          8

【注意事项】

无。

【相关数据类型及接口】

ot_isp_awb_attr_ex

ot_isp_awb_sensor_register

【说明】

定义sensor注册结构体。

【定义】

typedef struct {
    ot_isp_awb_sensor_exp_func sns_exp;
} ot_isp_awb_sensor_register;

【成员】

成员名称

描述

sns_exp

sensor注册的回调函数结构体。

【注意事项】

封装的目的是为了扩展。

【相关数据类型及接口】

ot_isp_awb_sensor_exp_func

ot_isp_awb_sensor_exp_func

【说明】

定义sensor回调函数结构体。

【定义】

typedef struct {
    td_s32 (*pfn_cmos_get_awb_default)(ot_vi_pipe vi_pipe, ot_isp_awb_sensor_default *awb_sns_dft);
} ot_isp_awb_sensor_exp_func;

【成员】

成员名称

描述

vi_pipe

vi_pipe号。

pfn_cmos_get_awb_default

获取AWB算法库的初始值的回调函数指针。

【注意事项】

无

【相关数据类型及接口】

ot_isp_sns_register

ot_isp_awb_sensor_default

【说明】

定义AWB算法库的初始化参数结构体。

【定义】

typedef struct {
    td_u16  wb_ref_temp;
    td_u16  gain_offset[OT_ISP_BAYER_CHN_NUM];
    td_s32  wb_para[OT_ISP_AWB_CURVE_PARA_NUM];
    td_u16  golden_rgain;
    td_u16  golden_bgain;
    td_u16  sample_rgain;
    td_u16  sample_bgain;
    ot_isp_awb_agc_table agc_tbl;
    ot_isp_awb_ccm ccm;
    ot_isp_color_sector sector; /* Not support for Hi3519DV500 */
    td_u16    init_rgain;
    td_u16    init_ggain;
    td_u16    init_bgain;
    td_u8     awb_run_interval;
    td_u16    init_ccm[OT_ISP_CCM_MATRIX_SIZE];
} ot_isp_awb_sensor_default;

【成员】

成员名称

子成员名称

描述

wb_ref_temp

-

静态白平衡校正色温,取值范围:[0, 0xFFFF]

gain_offset

-

静态白平衡的R、Gr、Gb、B颜色通道的增益,取值范围:[0, 0xFFFF]

wb_para

-

校正工具给出的白平衡参数,取值范围:[0, 0xFFFFFFFF]

golden_rgain

-

Golden样机在线标定得到的G/R值。

golden_bgain

-

Golden样机在线标定得到的G/B值。

sample_rgain

-

当前样机在线标定得到的G/R值。

sample_bgain

-

当前样机在线标定得到的G/B值。

agc_tbl

valid

该结构体的数据是否有效,取值范围:[0, 1]

saturation [-]

根据增益动态调节饱和度的插值数组,取值范围:[0, 255]

ccm

ccm_tab_num

当前配置的CCM的组数。

取值范围:[3, 7]

ccm_tab [ -]

不同色温下的颜色校正矩阵和对应的色温值。

sector

valid

该结构体的数据是否有效,取值范围:[0, 1]。Hi3519DV500不支持。

color_tab [-]

不同色温下的颜色分区调节参数。Hi3519DV500不支持。

init_rgain

-

ISP启动时R通道白平衡增益初始值。

init_ggain

-

ISP启动时G通道白平衡增益初始值。

init_bgain

-

ISP启动时B通道白平衡增益初始值。

awb_run_interval

-

ISP启动时AWB工作频率。

取值范围:[0x1, 0xFF]

init_ccm

-

ISP启动时CCM初始值。

【注意事项】

参考色温即静态白平衡校正的环境色温,需要提供色度计测量的实际值。

【相关数据类型及接口】

ot_isp_sns_exp_func

ot_isp_awb_agc_table

【说明】

定义饱和度初始化参数结构体。

【定义】

typedef struct {
    td_bool valid;
    td_u8  saturation[OT_ISP_AUTO_ISO_NUM];
} ot_isp_awb_agc_table;

【成员】

成员名称

描述

valid

该结构体的数据是否有效,取值为0或1。

saturation[OT_ISP_AUTO_ISO_NUM]

根据增益动态调节饱和度的插值数组,取值范围:[0, 255]

【注意事项】

saturation 为非单调递减序列。

【相关数据类型及接口】

ot_isp_awb_sensor_default

ot_isp_awb_ccm_tab

【说明】

定义不同色温下自动颜色校正矩阵系数。

【定义】

typedef struct {
    td_u16 color_temp;
    td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE];
} ot_isp_awb_ccm_tab;

【成员】

成员名称

描述

color_temp

当前配置的CCM对应的色温。

取值范围:[2000, 10000]

ccm[OT_ISP_CCM_MATRIX_SIZE]

不同色温下的颜色校正矩阵,8bit小数精度。Bit [15]是符号位,0表示正数,1表示负数,例如0x8010表示-16。Bit[12],Bit[13],Bit[14]是无效的,即正数从0x0000到0x0FFF,负数从0x8000到0x8FFF,是CCM的合理参数。

取值范围:[0x0, 0xFFFF]

【注意事项】

不同色温下的自动颜色校正矩阵,应满足灰色数据不变的约束条件,即矩阵中每行参数的和为0x100。请通过ot_isp_wb_info查询当前生效的颜色校正矩阵的值,确认每行参数的和为0x100。

【相关数据类型及接口】

ot_isp_awb_ccm

ot_isp_awb_ccm

【说明】

定义CCM颜色校正矩阵属性。

【定义】

typedef struct {
    td_u16  ccm_tab_num;

    ot_isp_awb_ccm_tab ccm_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_awb_ccm;

【成员】

成员名称

描述

ccm_tab_num

当前配置的CCM的组数。

取值范围:[3, 7]

ccm_tab[OT_ISP_CCM_MATRIX_NUM]

不同色温下的颜色校正矩阵和对应的色温值。

【注意事项】

如果选择三组CCM,推荐高色温CCM在D50光源标定,中色温CCM在TL84光源标定,低色温CCM在A光源标定。

【相关数据类型及接口】

ot_isp_color_sector_tab

【说明】

定义不同色温下自动颜色分区调节参数。

【定义】

typedef struct {
    td_u16 hue_shift[OT_ISP_COLOR_SECTOR_NUM];  /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
    td_u16 sat_shift[OT_ISP_COLOR_SECTOR_NUM];  /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
} ot_isp_color_sector_tab; /* Not support for Hi3519DV500 */

【成员】

成员名称

描述

hue_shift[OT_ISP_COLOR_SECTOR_NUM]

颜色分区调节色调参数。取值范围:[0, 40]。Hi3519DV500不支持。

sat_shift[OT_ISP_COLOR_SECTOR_NUM]

颜色分区调节饱和度参数。取值范围:[0, 40]。Hi3519DV500不支持。

【注意事项】

无

【相关数据类型及接口】

ot_isp_color_sector

ot_isp_color_sector

【说明】

定义CCM颜色分区调节属性。

【定义】

typedef struct {
    td_bool valid;

    ot_isp_color_sector_tab color_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_color_sector; /* Not support for Hi3519DV500 */

【成员】

成员名称

描述

valid

该结构体的数据是否有效,取值范围:[0, 1]。Hi3519DV500不支持。

color_tab[OT_ISP_CCM_MATRIX_NUM]

不同色温下的颜色分区调节参数。Hi3519DV500不支持。

【注意事项】

无

【相关数据类型及接口】

ot_isp_awb_sensor_default

AWB

ot_isp_awb_attr

【说明】

定义ISP自动白平衡属性。

【定义】

typedef struct {
    td_bool enable;
    td_u16 ref_color_temp;
    td_u16 static_wb[OT_ISP_BAYER_CHN_NUM];
    td_s32 curve_para[OT_ISP_AWB_CURVE_PARA_NUM];
    ot_isp_awb_alg_type       alg_type;
    td_u8  rg_strength;
    td_u8  bg_strength;
    td_u16 speed;
    td_u16 zone_sel;
    td_u16 high_color_temp;
    td_u16 low_color_temp;
    ot_isp_awb_ct_limit_attr ct_limit;
    td_bool shift_limit_en;
    td_u8  shift_limit;
    td_bool gain_norm_en;
    td_bool natural_cast_en;
    ot_isp_awb_cbcr_track_attr cb_cr_track;
    ot_isp_awb_lum_histgram_attr luma_hist;
    td_bool awb_zone_wt_en;
    td_u8  zone_wt[OT_ISP_AWB_ZONE_NUM];
} ot_isp_awb_attr;

【成员】

成员名称

描述

enable

自动白平衡使能,默认TD_TRUE。

ref_color_temp

校正静态白平衡系数的光源色温值。

推荐选用5000K附近光源进行静态白平衡校正。

static_wb[OT_ISP_BAYER_CHN_NUM]

静态白平衡系数。

取值范围:[0x0, 0xFFF]

curve_para[OT_ISP_AWB_CURVE_PARA_NUM]

校准曲线的系数。

取值范围:curve_para [3]!=0; curve_para [4]=128。

alg_type

自动白平衡算法类型选择。

取值范围:OT_ISP_AWB_ALG_LOWCOST、OT_ISP_AWB_ALG_ADVANCE、OT_ISP_ALG_NATURA。

rg_strength

自动白平衡R通道校准强度。

取值范围:[0x0, 0xFF]

bg_strength

自动白平衡B通道校准强度。

取值范围:[0x0, 0xFF]

speed

自动白平衡算法收敛速度。

取值范围:[0x0, 0xFFF]

zone_sel

自动白平衡算法全局或分区域计算的选择,取值范围:[0, 255]

high_color_temp

自动白平衡算法的色温上限。

取值范围:[0x1, 0xFFFF],推荐范围:[8500, 10000]

low_color_temp

自动白平衡算法的色温下限。

取值范围:[0x0, high_color_temp)

ct_limit

白平衡算法环境色温超过预设色温范围后,增益计算模式及手动增益值设定。

shift_limit_en

自动白平衡算法的将超出白点范围的增益映射回白点范围内的开关。

shift_limit

室内场景或室内外检测关闭时,自动白平衡的白点范围参数。

取值范围:[0x0, 0xFF]

gain_norm_en

自动白平衡算法的增益归一化的开关。

natural_cast_en

低色温下AWB风格喜好开关。

cb_cr_track

Bayer域统计信息与ISO的联动参数。

luma_hist

白平衡的亮度直方图统计参数。

awb_zone_wt_en

白平衡的分块权重使能开关,默认TD_FALSE。

zone_wt[OT_ISP_AWB_ZONE_NUM]

白平衡的1024分块权重表,取值范围:[0x0, 0xFF]

【差异说明】

无

【注意事项】

  • enable为TD_TRUE时,AWB正常工作,RGB通道增益系数由AWB根据环境色温计算;enable为TD_FALSE时,AWB不工作,RGB通道增益系数固定,为校正的静态白平衡系数。
  • ref_color_temp、static_wb、curve_para是用户通过校正工具得到的AWB参数,是AWB准确的前提。更换光学器件后,建议重新校正这三组参数。ref_color_temp是进行静态白平衡校正光源的真实色温,推荐在D50光源下做静态白平衡校正。curve_para[0],curve_para[1],curve_para[2]三个参数确定Planckian曲线,curve_para[3],curve_para[4],curve_para[5]三个参数确定色温曲线,curve_para[4]取值固定为128。
  • 自动白平衡通过curve_para等标定参数计算环境色温。在[2500K, 10000K]范围内,色温计算准确度较高,超出以上范围后,色温计算误差较大。
  • 自动白平衡R/B通道校准强度,一般情况不建议调整。

    可通过调整R/B通道校准强度使AWB校准偏强或者偏弱,0x80表示标准强度。建议rg_strength、bg_strength两个参数取相同值,且小于等于0x80。在低色温场景,AWB结果Rgain小于静态白平衡系数Rgain,AWB结果Bgain大于静态白平衡系数Bgain时,校准强度小于0x80时减弱这个趋势,让图像偏红,大于0x80时增强这个趋势,让图像偏蓝;在高色温场景,AWB结果Rgain大于静态白平衡系数Rgain,AWB结果Bgain小于静态白平衡系数Bgain时,校准强度小于0x80时减弱这个趋势,让图像偏蓝,大于0x80时增强这个趋势,让图像偏红。

  • speed控制AWB增益的收敛速度。speed越大,切换光源时,AWB收敛的速度越快,但帧间的波动幅度也变大;speed越小,切换光源时,AWB收敛的速度越慢,但帧间的波动幅度变小,稳定性提高。

  • zone_sel参数为0或255时,采用了近似灰度世界的算法;zone_sel为其他值时,AWB算法会对所有统计块进行分类筛选,提高AWB精度。
  • 自动白平衡算法的色温上限/下限,以Kelvin为单位。

    AWB算法支持的最高/最低色温。若实际场景中的色温大于色温上限或小于色温下限,则AWB不能完全恢复,图像会偏向光源色,低色温下偏黄,高色温下偏蓝。

    注意:色温计算在高、低色温段误差较大,设置色温上限小于1000K时,可能出现随参数值递增或递减,颜色表现不平滑的现象。

  • shift_limit_en决定AWB增益是否向Planckian曲线做映射。shift_limit控制白色块的范围,取值较小时,对光源的支持范围较窄,精度较高;取值较大时,支持更多的光源,精度降低。shift_limit_en仅控制AWB增益是否向Planckian曲线做映射,无论shift_limit_en打开或关闭,shift_limit取值的改变都会影响AWB结果。校正静态白平衡系数的光源色温值,要求在AWB算法设置的色温上下限范围内。

    • shift_limit_en使能时,iso大于6400,场景灰点距离色温曲线比较远,shift大于64时,会更多的将AWB增益向Planckian曲线做映射,即采用色温曲线上对应色温的Rgain和Bgain作为最终AWB增益。主要用于人造光源场景达到保留光源色的效果。
    • shift_limit_en关闭时,AWB增益通过图像统计信息得到,远离色温曲线的光源的场景会更灰一些。
  • gain_norm_en使能,对RGB通道增益进行限制,可以改善低色温、低照度场景的信噪比。

  • natural_cast_en使能,低色温下AWB保留光源色,图像颜色更自然。
  • 权重表与AWB统计分块的对应顺序如下:

    • 非拼接模式下,AWB统计信息分块个数是32x32,zone_wt[0]对应第一行第一列,zone_wt[1]对应第一行第二列,zone_wt[31]对应第一行第32列,zone_wt[32]对应第二行第一列,依次类推。
    • 不支持拼接模式下配置AWB统计信息权重。
  • 特定应用产品,客户使能awb_zone_wt_en后,可通过设置权重表改变每个区域的权重,优化AWB表现。在shading较严重时,可加大中心区域的权重,保证中间区域AWB准确还原,降低shading对AWB的影响。在行车记录仪应用,感兴趣区域一般在画面的中心偏下区域,可加大此区域的权重,降低天空、树木等区域对AWB的干扰。

【相关数据类型及接口】

ot_isp_awb_cbcr_track_attr

【说明】

定义Bayer域统计信息的联动参数。

【定义】

typedef struct {
    td_bool enable;
    td_u16  cr_max[OT_ISP_AUTO_ISO_NUM];
    td_u16  cr_min[OT_ISP_AUTO_ISO_NUM];
    td_u16  cb_max[OT_ISP_AUTO_ISO_NUM];
    td_u16  cb_min[OT_ISP_AUTO_ISO_NUM];
} ot_isp_awb_cbcr_track_attr;

【成员】

成员名称

描述

enable

Bayer域统计信息参数与环境照度、色温的联动使能开关。

cr_max[OT_ISP_AUTO_ISO_NUM]

不同照度下的cr_max取值,取值范围:[0x0, 0xFFF]

cr_min[OT_ISP_AUTO_ISO_NUM]

不同照度下的cr_min取值,取值范围:[0x0, cr_max]

cb_max[OT_ISP_AUTO_ISO_NUM]

不同照度下的cb_max取值,取值范围:[0x0, 0xFFF]

cb_min[OT_ISP_AUTO_ISO_NUM]

不同照度下的cb_min取值,取值范围:[0x0, cb_max]

【注意事项】

  • 统计参数联动使能后,AWB算法会根据环境照度、色温、用户设置的 cr_max数组等实时计算cr_max、cr_min、cb_max和cb_min四个参数,并配置相应的逻辑寄存器,此时用户通过PQ Tools设置以上四个统计参数不生效。
  • 统计参数联动使能,AWB算法计算的cr_max等统计参数在根据ISO插值的基础上还和环境色温相关。低色温时,白点范围较宽;中高色温时,白点范围较窄。
  • 用户手动配置cr_max、cr_min、cb_max、cb_min四个参数时,需要先关闭联动功能。
  • cr_max[0]、cr_min[0]、cb_max[0]、cb_min[0]的取值可在AWB参数标定时确定。用户确定了支持的色温范围后,捕获高低色温的RAW图片,计算白色区域的R/G、B/G值。cr_max[0]和cb_min[0]分别对应低色温的R/G、B/G;cr_min[0]和cb_max[0]分别对应高色温的R/G、B/G。推荐用户设置的Cr、Cb范围稍大于RAW图统计的R/G、B/G取值范围。
  • AWB算法计算的cr_max等统计参数在根据ISO插值的时候,会基于cr_max[0]、cr_min[0]、cb_max[0]、cb_min[0]的值。所以不同ISO下的取值设定应以ISO100的值为基础,单调递增或递减。
  • 建议在低色温(钠灯)环境标定cr_max、cb_min数组。用户统计不同照度下白色区域的R/G、B/G值,设置cr_max、cb_min数组。推荐用户设置的Cr、Cb范围稍大于RAW图片统计的R/G、B/G取值范围。
  • 因低照度下环境色温多在5000K以下,cr_min、cb_max两个数组的取值可设为常数。
  • 当AWB统计信息配置在DRC后的时候,ot_isp_awb_cbcr_track_attr参数不生效,cr_min、cb_min固定为128,cr_max、cb_max固定为512。
  • 大面积单色或cr_max与cr_min(cb_max与cb_min同理)范围较小时,统计信息可能出现0值。

表 1 cr_max [16]在不同的增益情况下的设置值(仅供参考)

cr_max

Again*Dgain*ISPDgain(倍数)

设置值

cr_max [0]

1

0x150

cr_max [1]

2

0x150

cr_max [2]

4

0x150

cr_max [3]

8

0x160

cr_max [4]

16

0x170

cr_max [5]

32

0x180

cr_max [6]

64

0x190

cr_max [7]

128

0x1A0

cr_max [8]

256

0x1B0

cr_max [9]

512

0x1C0

cr_max [10]

1024

0x1D0

cr_max [11]

2048

0x1E0

cr_max [12]

4096

0x1F0

cr_max [13]

8192

0x1F0

cr_max [14]

16384

0x1F0

cr_max [15]

32768

0x1F0

表 2 cr_min [16]在不同的增益情况下的设置值(仅供参考)

cr_min

Again*Dgain*ISPDgain(倍数)

设置值

cr_min [0]

1

0x30

cr_min [1]

2

0x30

cr_min [2]

4

0x30

cr_min [3]

8

0x30

cr_min [4]

16

0x30

cr_min [5]

32

0x2C

cr_min [6]

64

0x2A

cr_min [7]

128

0x28

cr_min [8]

256

0x26

cr_min [9]

512

0x24

cr_min [10]

1024

0x22

cr_min [11]

2048

0x20

cr_min [12]

4096

0x1F

cr_min [13]

8192

0x1E

cr_min [14]

16384

0x1D

cr_min [15]

32768

0x1C

表 3 cb_max [16]在不同的增益情况下的设置值(仅供参考)

cb_max

Again*Dgain*ISPDgain(倍数)

设置值

cb_max [0]

1

0x130

cb_max [1]

2

0x130

cb_max [2]

4

0x130

cb_max [3]

8

0x130

cb_max [4]

16

0x140

cb_max [5]

32

0x150

cb_max [6]

64

0x160

cb_max [7]

128

0x170

cb_max [8]

256

0x180

cb_max [9]

512

0x190

cb_max [10]

1024

0x1A0

cb_max [11]

2048

0x1B0

cb_max [12]

4096

0x1B0

cb_max [13]

8192

0x1B0

cb_max [14]

16384

0x1B0

cb_max [15]

32768

0x1B0

表 4 cb_min [16]在不同的增益情况下的设置值(仅供参考)

cb_min

Again*Dgain*ISPDgain(倍数)

设置值

cb_min [0]

1

0x30

cb_min [1]

2

0x30

cb_min [2]

4

0x30

cb_min [3]

8

0x30

cb_min [4]

16

0x30

cb_min [5]

32

0x2C

cb_min [6]

64

0x2A

cb_min [7]

128

0x28

cb_min [8]

256

0x26

cb_min [9]

512

0x24

cb_min [10]

1024

0x22

cb_min [11]

2048

0x20

cb_min [12]

4096

0x1F

cb_min [13]

8192

0x1E

cb_min [14]

16384

0x1D

cb_min [15]

32768

0x1C

【相关数据类型及接口】

ot_isp_awb_attr

ot_isp_awb_lum_histgram_attr

【说明】

定义白平衡的亮度直方图统计参数。

【定义】

typedef struct {
    td_bool enable;
    ot_op_mode   op_type;
    td_u8   hist_thresh[OT_ISP_AWB_LUM_HIST_NUM];
    td_u16  hist_wt[OT_ISP_AWB_LUM_HIST_NUM];
} ot_isp_awb_lum_histgram_attr;

【成员】

成员名称

描述

enable

亮度是否影响分块的权重。

op_type

自动模式下,AWB算法对分块统计结果做亮度直方图统计,自动分配亮度权重。手动模式下,用户设置亮度直方图的门限和权重。

hist_thresh[OT_ISP_AWB_LUM_HIST_NUM]

用户设置亮度直方图的门限,仅手动模式有效。

hist_wt[OT_ISP_AWB_LUM_HIST_NUM]

用户设置亮度直方图的权重,自动模式和手动模式下均有效。8bit小数精度。

【注意事项】

  • hist_thresh[0]固定为0,hist_thresh[5]固定为0xFF。hist_thresh应单调递增,即hist_thresh[i]大于或等于hist_thresh[i-1]。
  • hist_wt参数用来设置hist_thresh 的权重。对应用户可通过hist_wt设置实现亮区优先、暗区优先。

【相关数据类型及接口】

ot_isp_awb_attr

ot_isp_awb_alg_type

【说明】

定义白平衡的算法类型属性。

【定义】

typedef enum {
    OT_ISP_AWB_ALG_LOWCOST = 0,
    OT_ISP_AWB_ALG_ADVANCE = 1,
    OT_ISP_AWB_ALG_NATURA  = 2,
    OT_ISP_AWB_ALG_BUTT
} ot_isp_awb_alg_type;

【成员】

成员名称

描述

OT_ISP_AWB_ALG_LOWCOST

改进的灰度世界算法,根据统计信息自动计算区间权重的AWB算法。

OT_ISP_AWB_ALG_ADVANCE

对统计信息分类,再次筛选白色块的AWB算法。

OT_ISP_AWB_ALG_NATURA

针对室外自然光源应用,优化大面积单色表现。

OT_ISP_AWB_ALG_BUTT

无效。

【注意事项】

  • OT_ISP_AWB_ALG_LOWCOST CPU占用低,AWB不同照度的稳定性较好,对光源的适应性稍好。
  • OT_ISP_AWB_ALG_ADVANCE CPU占用高,高低色温的极低照度情况下,保留轻微光源色;提高了大面积纯色场景(室外大面积绿色、室内大面积肤色等)AWB算法准确度。
  • OT_ISP_AWB_ALG_NATURA 推荐无人机、运动DV等主要在自然光源应用的设备选择该配置。优化大面积绿色、土地等场景表现,提升快速运动时的颜色稳定性。

【相关数据类型及接口】

ot_isp_awb_attr

ot_isp_awb_ct_limit_attr

【说明】

定义白平衡的增益范围限制属性。

【定义】

typedef struct {
    td_bool enable;
    ot_op_mode   op_type;
    td_u16 high_rg_limit;
    td_u16 high_bg_limit;
    td_u16 low_rg_limit;
    td_u16 low_bg_limit;
} ot_isp_awb_ct_limit_attr;

【成员】

成员名称

描述

enable

白平衡的增益范围限制开关。

op_type

自动或手动设定白平衡的增益限制。

high_rg_limit

手动模式下用户设定高色温下的最大R增益,8bit小数精度,取值范围:[0x0, 0xFFF]

high_bg_limit

手动模式下用户设定高色温下的最小B增益,8bit小数精度,取值范围:[0x0, 0xFFF]

low_rg_limit

手动模式下用户设定低色温下的最小R增益,8bit小数精度,

取值范围:[0x0, high_rg_limit)

low_bg_limit

手动模式下用户设定低色温下的最大B增益,8bit小数精度,

取值范围:(high_bg_limit, 0xFFF]

【注意事项】

  • ot_isp_awb_ct_limit_attr结构体定义环境色温超过用户设定的色温范围时,AWB应采取的动作。AWB检测到环境色温超过用户设置的上下限时,相关参数才会生效。
  • 支持自动模式和手动模式选择。自动模式下,AWB根据用户校正的色温曲线计算色温上下限色温的AWB增益,以限制R, B通道增益;手动模式下,高色温时,AWB调用high_rg_limit、high_bg_limit参数限制R, B通道增益,低色温时,AWB调用low_rg_limit、low_bg_limit参数限制R,B通道增益。
  • 建议用户在进行AWB色温曲线校正时,确定了AWB工作的色温范围后,再确定high_rg_limit、high_bg_limit、low_rg_limit、low_bg_limit四个参数取值。Rg对应Planckian曲线的横坐标值,Bg对应Planckian曲线的纵坐标值。

【相关数据类型及接口】

ot_isp_awb_attr

ot_isp_mwb_attr

【说明】

定义ISP手动白平衡属性。

【定义】

typedef struct {
    td_u16 r_gain;
    td_u16 gr_gain;
    td_u16 gb_gain;
    td_u16 b_gain;
} ot_isp_mwb_attr;

【成员】

成员名称

描述

r_gain

手动白平衡红色通道增益,8bit小数精度。

取值范围:[0x0,0xFFF]

gr_gain

手动白平衡绿色通道增益,8bit小数精度。

取值范围:[0x0,0xFFF]

gb_gain

手动白平衡绿色通道增益,8bit小数精度。

取值范围:[0x0,0xFFF]

b_gain

手动白平衡蓝色通道增益,8bit小数精度。

取值范围:[0x0,0xFFF]

【注意事项】

无

【相关数据类型及接口】

ot_isp_wb_attr

ot_isp_wb_attr

【说明】

定义白平衡属性。

【定义】

typedef struct {
    td_bool bypass;
    td_u8  awb_run_interval;
    ot_op_mode   op_type;
    ot_isp_mwb_attr  manual_attr;
    ot_isp_awb_attr  auto_attr;
    ot_isp_awb_alg   alg_type;
} ot_isp_wb_attr;

【成员】

成员名称

描述

bypass

白平衡模块Bypass使能,默认值TD_FALSE。

awb_run_interval

白平衡模块工作频率。取值范围:[0x1, 0xFF]

op_type

自动白平衡和手动白平衡切换。

manual_attr

手动白平衡参数。

auto_attr

自动白平衡参数。

alg_type

GW AWB或SpecAWB(机器学习)算法类型选择。

【注意事项】

  • bypass 为TD_TRUE时,WB的其它参数设置不生效,RGB通道增益系数固定为0x100。
  • awb_run_interval默认为2,表示每2帧运行一次AWB。客户可根据业务需求降低AWB的运行频率。
  • Hi3519DV500仅支持GW AWB。

【相关数据类型及接口】

ot_isp_awb_multi_ls_type

【说明】

定义混合光源下的AWB策略。

【定义】

typedef enum {
    OT_ISP_AWB_MULTI_LS_SAT = 0,
    OT_ISP_AWB_MULTI_LS_CCM = 1,
    OT_ISP_AWB_MULTI_LS_BUTT
} ot_isp_awb_multi_ls_type; 

【成员】

成员名称

描述

OT_ISP_AWB_MULTI_LS_SAT

混合光源下自动调整饱和度。

OT_ISP_AWB_MULTI_LS_CCM

混合光源下自动调整CCM。

OT_ISP_AWB_MULTI_LS_BUTT

无效。

【注意事项】

  • OT_ISP_AWB_MULTI_LS_CCM对图像饱和度损失较少,但会改变颜色的色调。
  • OT_ISP_AWB_MULTI_LS_SAT方式降低图像整体饱和度,改善混合光源下的偏色程度。

【相关数据类型及接口】

ot_isp_awb_attr

ot_isp_awb_scene_mode_status

【说明】

定义AWB室内外状态。

【定义】

typedef enum {
    OT_ISP_AWB_SCENE_MODE_INDOOR  = 0,
    OT_ISP_AWB_SCENE_MODE_OUTDOOR = 1,
    OT_ISP_AWB_SCENE_MODE_BUTT
} ot_isp_awb_scene_mode_status;

【成员】

成员名称

描述

OT_ISP_AWB_SCENE_MODE_INDOOR

室内模式。

OT_ISP_AWB_SCENE_MODE_OUTDOOR

室外模式。

OT_ISP_AWB_SCENE_MODE_BUTT

无效。

【注意事项】

无

【相关数据类型及接口】

ot_isp_awb_in_out_attr

ot_isp_awb_attr_ex

【说明】

定义自动白平衡扩展属性。

【定义】

typedef struct {
    td_u8  tolerance;
    td_u8  zone_radius;
    td_u16 curve_l_limit;
    td_u16 curve_r_limit;
    td_bool  extra_light_en;
    ot_isp_awb_extra_light_source_info  light_info[OT_ISP_AWB_LS_NUM];
    ot_isp_awb_in_out_attr  in_or_out;
    td_bool multi_light_source_en;
    ot_isp_awb_multi_ls_type multi_ls_type;
    td_u16  multi_ls_scaler;
    td_u16  multi_ct_bin[OT_ISP_AWB_MULTI_CT_NUM];
    td_u16  multi_ct_wt[OT_ISP_AWB_MULTI_CT_NUM];
    td_bool fine_tun_en;
    td_u8   fine_tun_strength;
} ot_isp_awb_attr_ex;

【成员】

成员名称

描述

tolerance

自动白平衡调整的偏差范围,检测误差在门限范围内时,AWB不动作。

zone_radius

自动白平衡统计中对像素分类时用的距离范围。该值越小,AWB精度越高,但会降低AWB算法稳定性。

curve_l_limit

自动白平衡色温曲线的左边界限。取值范围:[0x0, 0x100]

curve_r_limit

自动白平衡色温曲线的右边界限。取值范围:[0x100, 0xFFF]

extra_light_en

自动白平衡计算时是否考虑色温曲线外的独立光源点。

light_info[OT_ISP_AWB_LS_NUM]

色温曲线外的独立光源点的信息, 最多可以添加4个。

in_or_out

自动白平衡对场景做室内外判断的参数。

multi_light_source_en

自动白平衡检测当前场景是否为混合光源,根据混合光源程度调整饱和度或CCM。

multi_ls_type

混合光源调整策略选择,支持调整饱和度或CCM。

multi_ls_scaler

混合光源下,饱和度或CCM最大调整幅度。实际调整幅度还和场景混合光源程度有关。

取值范围:[0x0, 0x100]

multi_ct_bin[OT_ISP_AWB_MULTI_CT_NUM]

混合光源下的色温分段参数。

取值范围:要求为单调递增序列。

multi_ct_wt[OT_ISP_AWB_MULTI_CT_NUM]

混合光源下的色温权重参数。

取值范围:[0x0, 0x400]

fine_tun_en

自动白平衡特殊色检测开关,包括肤色检测等。

fine_tun_strength

肤色、蓝色等单色检测的强度。仅在fine_tun_en使能时有效。取值范围:[0x0, 0xFF]

图 1 色温曲线的参数示意

图 2 混合光源场景色温权重设置示例说明(n为色温分段点个数)

【注意事项】

  • tolerance是AWB的灵敏度参数。该值为0时,AWB系数实时更新,CPU占用较高;该值较大时,AWB在检测到环境色温变化时再更新AWB系数,CPU占用较低,但在环境色温微调时,AWB可能出现轻微的偏色。推荐室外应用时tolerance置为0,室内应用时置为2。
  • zone_radius是选择光源环境白色块的色差半径。zone_radius越大,白色块的限制条件越宽,找到的白色块较多,稳定性稍好,精度稍低;zone_radius越小,白色块的限制条件越严格,找到的白色块较少,AWB精度更高。在混合光源的应用场景,推荐zone_radius比普通场景稍大。
  • curve_l_limit取值<=0x100, curve_r_limit取值>=0x100。curve_l_limit和curve_r_limit两个参数用来排除颜色块。如Bild 1所示,curve_l_limit排除了左侧的阴影区域,curve_r_limit排除了右侧的阴影区域。
  • AWB算法支持在色温曲线外,再增加独立光源点信息,提升特殊光源下的AWB表现。
  • multi_light_source_en使能后,AWB算法判断场景是否混合光源,在混合光源场景,自动降低饱和度或调整CCM,以减弱偏色程度。最大调整幅度由multi_ls_scaler决定。调整CCM方式会改变色调。
  • multi_ls_type= OT_ISP_AWB_MULTI_LS_SAT时,调整饱和度来改善混合光源场景的偏色。multi_ls_scaler/0x100表示饱和度增益系数的下限。multi_ls_scaler=0xC0,表示饱和度的增益系数下限是0xC0/0x100 = 0.75,图像饱和度的波动范围是[0.75, 1.0]( 1.0表示关闭multi_light_source_en功能的图像饱和度); multi_ls_scaler=0x0,表示饱和度的增益系数下限是0x0/0x100 =0,图像饱和度的波动范围是[0, 1],在混合光源下图像可能变黑白。multi_ls_scaler取值越小,图像饱和度的波动范围越大,颜色稳定性下降。
  • multi_ls_type= OT_ISP_AWB_MULTI_LS_CCM时,调整CCM来改善混合光源场景的偏色。multi_ls_scaler/0x100表示CCM的调整幅度,取值越大,图像饱和度越低。multi_ls_scaler=0xC0,表示CCM的最大调整幅度为0xC0; multi_ls_scaler=0x0,表示CCM的最大调整幅度为0,等效于multi_light_source_en=0。
  • multi_ct_bin、multi_ct_wt两组参数的合理配置,可以改善混合光源高色温或低色温区域颜色表现。AWB配置为OT_ISP_AWB_ALG_LOWCOST、OT_ISP_AWB_ALG_ADVANCE时,在非混合光源场景,这2组参数配置不生效。AWB配置为OT_ISP_AWB_ALG_NATURA 时,这2组参数在非混合光源场景也有效,客户可通过色温权重参数调整图像风格偏冷或偏暖。Bild 2说明色温和权重配置的映射关系。
  • 如果混合光源场景希望使能色温权重来改善AWB表现,但不做饱和度或CCM调解,可配置如下:multi_light_source_en=TD_TRUE,multi_ls_type=OT_ISP_AWB_MULTI_LS_SAT,multi_ls_scaler=0x100。
  • fine_tun_en打开,AWB会自动检测肤色等特殊色,改善肤色场景AWB表现,提高AWB精度。但可能在蓝色背景+3500K光源时发生误判,导致图像轻微偏黄。在有黄色土地的场景,或者低色温光源的场景,算法检测到肤色和没有检测到肤色的AWB结果不同,会导致视频中出现AWB结果的震荡,不稳定,如果发生这种情况,需要将fine_tun_en关闭。
  • fine_tun_strength调整肤色检测的强度,取值越大,肤色场景AWB表现越好,但肤色误判时的副作用越明显。推荐采用默认值0x80。

【相关数据类型及接口】

ot_isp_awb_extra_light_source_info

【说明】

定义独立光源点的信息。

【定义】

typedef struct {
    td_u16 white_r_gain;
    td_u16 white_b_gain;
    td_u16 exp_quant;
    td_u8  light_status;
    td_u8  radius;
} ot_isp_awb_extra_light_source_info;

【成员】

成员名称

描述

white_r_gain

增加或删除区域的中心Cr坐标,8bit小数精度。

取值范围:[0x0, 0xFFF]

white_b_gain

增加或删除区域的中心Cb坐标,8bit小数精度。

取值范围:[0x0, 0xFFF]

exp_quant

对外界环境亮度做判断,暂不支持,不需要配置。

light_status

光源点状态。

0:不使能;

1:增加光源点;

2:删除干扰色。

radius

增加或删除区域的半径。

取值范围:[0x0, 0xFF]

【注意事项】

  • 独立光源点实现以下功能:用户设定CbCr坐标的某个区域,指定该区域为特殊光源下的白色表现,增加为独立光源点;或指定该区域为特定光源下的干扰色,进行删除。
  • 通过light_status参数的设置实现功能选择。light_status设置为1时,在用户校正的Planckian曲线外,增加特殊光源点,以优化该光源下颜色表现,不影响设备在其它光源下的表现;light_status设置为2时,支持用户删除特定光源的某个干扰色(肤色、绿色、蓝天等)。
  • 建议删除干扰色仅用来优化特定环境的颜色表现,否则会影响其它光源的表现。在CbCr坐标,5500K光源下的肤色与3500K光源的白色重合度很高,在5500K环境删除肤色的干扰,会导致3500K光源下偏色。
  • white_r_gain、white_b_gain的取值。在该光源下捕获ColorChecker Raw数据,通过Calibration Tool Static WB选项校准得到的Rgain、Bgain即white_r_gain、white_b_gain坐标值。删除干扰色,可选择干扰色区域进行静态白平衡校正,来确定white_r_gain、white_b_gain坐标值。
  • radius取值由用户设置,增加光源点,建议取值在[0x8, 0x10]范围内,删除干扰色,尽量避免[white_r_gain、white_b_gain]为中心,radius为半径的圆形区域与Planckian曲线重合。增加光源点或删除干扰色,设置radius半径太大时(覆盖场景内大多数统计块),会导致功能失效,甚至起反作用。
  • 当前支持定义最多4个光源色,4个相互独立。4个光源点需要避免交集,特别需要避免以下情况:CbCr坐标的单个点,既指定为增加的独立光源点,又指定为删除的干扰色。

【相关数据类型及接口】

ot_isp_awb_attr_ex

ot_isp_awb_in_out_attr

【说明】

定义对场景做室内外判断的参数。

【定义】

typedef struct {
    td_bool enable;
    ot_op_mode   op_type;
    ot_isp_awb_scene_mode_status scene_status;
    td_u32 out_thresh;
    td_u16 low_start;
    td_u16 low_stop;
    td_u16 high_start;
    td_u16 high_stop;
    td_bool green_enhance_en;
    td_u8   out_shift_limit;
} ot_isp_awb_in_out_attr;

【成员】

成员名称

描述

enable

对场景做室内外判断开关。

op_type

对场景做室内外判断类型(自动或手动)。

scene_status

手动模式下,用户输入室内外状态信息。

out_thresh

室内外场景判定设置的阈值,以单位为us的曝光时间,小于该阈值则认为是室外。

low_start

判断为室外场景时,将位于低色温范围内的像素权重调低,低色温区起始值,建议5000K。

low_stop

判断为室外场景时,将位于低色温范围内的像素权重调低,低色温区终止值,建议4500K。

取值范围:(0, low_start)

high_start

判断为室外场景时,将位于高色温范围内的像素权重调低,高色温区起始值,建议6500K。

取值范围:(low_start, 0xFFFF]

high_stop

判断为室外场景时,将位于高色温范围内的像素权重调低,高色温区终止值,建议8000K。

取值范围:(high_start, 0xFFFF]

green_enhance_en

判断为室外场景时,在绿色植物场景下是否对绿色通道增强。

out_shift_limit

判断为室外场景时,AWB算法的白点范围限制shift= out_shift_limit。

取值范围:[0x0, 0xFF]

【注意事项】

  • out_thresh需要根据sensor的感光特性进行调整。等效曝光时间=曝光时间*模拟增益*数字增益*ISP数字增益。当等效曝光时间大于out_thresh的1.2倍时,认为当前环境为室内,AWB运行时会使用与室内相关的参数。
  • 用户调用自己的AE库,且室内外判断类型为自动时,请务必将当前曝光时间和ISO传递给AWB库。
  • 设置色温范围的low_start、low_stop、high_start、high_stop等 4个参数,和sensor校正相关,建议用户针对sensor做微调。四个参数的取值范围要求:low_stop<low_start<high_start<high_stop。如果设置的室外色温范围[low_start, high_start]较宽,室外的大面积纯色场景颜色表现可能会稍差;如果设置的室外色温范围[low_start, high_start]较窄,在日落前等高低色温场景,AWB不能完全恢复,低色温下稍微偏黄,高色温下稍微偏蓝。
  • AWB校正参数调整后,low_start、low_stop、high_start、high_stop等 4个参数要再次进行调整,以达到最佳效果。
  • shift取值影响AWB算法表现。普通场景shift_limit、out_shift_limit两个参数的取值大小对AWB结果影响不大。特殊光源、大面积单色场景,shift_limit、out_shift_limit两个参数的取值大小对AWB结果影响较大。
    • 两个Shift参数取值较小时,单色表现好,但特殊光源下容易偏色;
    • 两个shift参数取值较大时,AWB表现稳定性好,但大面积绿色、黄色等场景可能偏色。

图 1 室外色温范围参数的意义

【相关数据类型及接口】

ot_isp_awb_attr_ex

ot_isp_wb_info

【说明】

定义白平衡,饱和度,颜色校正信息。

【定义】

typedef struct {
    td_u16 r_gain;
    td_u16 gr_gain;
    td_u16 gb_gain;
    td_u16 b_gain;
    td_u16 saturation;
    td_u16 color_temp;
    td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE]; 
    td_u16 ls0_ct;
    td_u16 ls1_ct;
    td_u16 ls0_area;
    td_u16 ls1_area;
    td_u8  multi_degree;
    td_u16 active_shift;
    td_u32 first_stable_time;
    ot_isp_awb_scene_mode_status scene_status;
    td_s16 bv;
} ot_isp_wb_info;

【成员】

成员名称

描述

r_gain

当前R通道增益值,8bit小数精度。

gr_gain

当前Gr通道增益值,8bit小数精度。

gb_gain

当前Gb通道增益值,8bit小数精度。

b_gain

当前B通道增益值,8bit小数精度。

saturation

当前饱和度值,有效范围:[0, 255]

color_temp

当前色温值。

ccm[OT_ISP_CCM_MATRIX_SIZE]

当前颜色校正矩阵值,8bit小数精度。bit 15是符号位,0表示正数,1表示负数,例如0x8010表示-16。

ls0_ct

混合光源场景,主光源色温。

ls1_ct

混合光源场景,次要光源色温。

ls0_area

混合光源场景,主光源面积。取值范围:[0x0, 0xFF]

ls1_area

混合光源场景,次要光源面积。取值范围:[0x0, 0xFF]

multi_degree

当前场景是混合光源的概率。

first_stable_time

首次AWB收敛稳定的时间,以帧为计数单位。

active_shift

当前场景最终生效的白点范围限制shift值。取值范围:[0x0, 0xFF]

scene_status

室内外检测结果。

bv

当前环境bv值。

【注意事项】

  • multi_degree 非0时,表示场景是混合光源。该值越大,场景为混合光源的概率越大。
  • ls0_ct、ls1_ct、ls0_area、ls1_area等查询结果仅在 multi_degree非0时有效。
  • 混合光源检测仅在室内场景打开,AWB判断为室外场景后,逐渐减弱混合光源检测的强度,以避免饱和度降低。
  • 混合光源概率说明:主光源和次要光源的亮度、色温差等条件影响混合光源的概率计算。检测到场景内存在主光源和次要光源两种光源后,主光源和次要光源的色温差异越大、亮度差异越小,混合光源概率越大。
  • ls0_area和ls1_area之和有可能大于白平衡分区个数,原因是部分区域可能受到两种光源的影响,算法不将重叠区域严格识别,会叠加到主光源、次要光源。
  • Hi3519DV500/Hi3516CV610不支持bv值输出,查询结果固定为0。
  • first_stable_time是AWB首次收敛稳定后所对应的帧数,非0表示AWB已稳定。ISP系统启动后,1-64帧AWB固定每帧执行一次,以加速AWB收敛。

【相关数据类型及接口】

无

CCM

概述

sensor对光谱的响应,在RGB各分量上与人眼对光谱的响应通常是有偏差的,通常通过一个色彩校正矩阵校正光谱响应的交叉效应和响应强度,使前端捕获的图片与人眼视觉在色彩上保持一致。

重要概念

  • 色彩还原:通常通过一个色彩校正矩阵校正光谱响应的交叉效应和响应强度,使ISP处理后的图片与人眼视觉在色彩上保持一致。
  • 饱和度:也称色彩的纯度。取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。

功能描述

离线校准工具Calibration Tool支持3x3 Color Correction Matrix的预校正。在ISP运行时,FW根据当前的光照强度,调整饱和度,实现CCM(Color Correction Matrix)矩阵系数的动态调整。CCM矩阵如图1所示。

图 1 CCM矩阵

API参考

饱和度、色调和CCM接口只是针对SDK提供的AWB库,如果客户自己实现AWB库,不需要关注这些接口,且无法使用这些接口。

ss_mpi_isp_set_saturation_attr

【描述】

设置颜色饱和度属性。

【语法】

td_s32 ss_mpi_isp_set_saturation_attr (ot_vi_pipe vi_pipe, const ot_isp_saturation_attr *sat_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号

输入

sat_attr

颜色饱和度属性。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_saturation_attr

ss_mpi_isp_get_saturation_attr

【描述】

获取颜色饱和度属性。

【语法】

td_s32 ss_mpi_isp_get_saturation_attr (ot_vi_pipe vi_pipe, ot_isp_saturation_attr *sat_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号

输入

sat_attr

颜色饱和度属性。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_saturation_attr

ss_mpi_isp_set_ccm_attr

【描述】

设置颜色矩阵。

【语法】

td_s32 ss_mpi_isp_set_ccm_attr (ot_vi_pipe vi_pipe, const ot_isp_color_matrix_attr *ccm_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号

输入

ccm_attr

颜色矩阵。

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

  • 颜色校正矩阵的数据格式,应与校正工具提供的保持一致。
  • 可根据当前色温,设置不同的CCM,从而在高低色温下都达到较好的颜色还原。
  • 该MPI支持最大七个最小三个不同色温下的色彩还原矩阵,要按照色温递减的方式配置CCM,即0-6组CCM矩阵由高色温到低色温。典型的三组CCM为D50,TL84,A三个光源下的CCM。典型的五组CCM为10K,D65,D50,TL84,A五个光源下的CCM。前一组的色温值与后一组的色温值需符合如下规则:Tpre * (100 – 6.25) > Tpost * (100 + 6.25)。
  • 手动模式下,ISP系统生效的CCM即用户手动配置的CCM,有利于CCM精调,因此建议在手动模式下校正不同色温光源下的CCM矩阵,得到多组CCM矩阵后再通过MPI写入,验证多个光源下的CCM组和效果。手动CCM模式下,饱和度调整有效。在特定光源下做CCM精调时,需要先确认饱和度是否期望值。

【举例】

无

【相关主题】

ss_mpi_isp_get_ccm_attr

ss_mpi_isp_get_ccm_attr

【描述】

获取颜色矩阵。

【语法】

td_s32 ss_mpi_isp_get_ccm_attr (ot_vi_pipe vi_pipe, ot_isp_color_matrix_attr *ccm_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号

输入

ccm_attr

颜色矩阵。

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_ccm_attr

ss_mpi_isp_set_color_sector_attr

【描述】

设置颜色分区调节属性。

【语法】

td_s32 ss_mpi_isp_set_color_sector_attr (ot_vi_pipe vi_pipe, ot_isp_color_sector_attr *sector_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号

输入

sector_attr

颜色分区调节参数

输入

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_get_color_sector_attr

ss_mpi_isp_get_color_sector_attr

【描述】

获取颜色分区调节属性。

【语法】

td_s32 ss_mpi_isp_get_color_sector_attr (ot_vi_pipe vi_pipe, ot_isp_color_sector_attr *sector_attr);

【参数】

参数名称

描述

输入/输出

vi_pipe

Vi PIPE号

输入

sector_attr

颜色分区调节参数

输出

【返回值】

返回值

描述

0

成功。

非0

失败,其值为错误码。

【需求】

  • 头文件:ot_common_awb.h、ss_mpi_awb.h
  • 库文件:libot_mpi_isp.a、libss_mpi_isp.a、libss_mpi_awb.a

【注意】

无

【举例】

无

【相关主题】

ss_mpi_isp_set_color_sector_attr

数据类型

OT_ISP_COLOR_SECTOR_NUM

【说明】

定义颜色分区调节的区域组数。

【定义】

#define OT_ISP_COLOR_SECTOR_NUM                   6  /* not support for Hi3519DV500 */

【注意事项】

无

【相关数据类型及接口】

ot_isp_color_sector_param

ot_isp_color_sector_manual

ot_isp_saturation_attr

【说明】

定义ISP颜色饱和度属性。

【定义】

typedef struct {
   ot_op_mode op_type;
   ot_isp_saturation_manual manual_attr;
   ot_isp_saturation_auto   auto_attr;
} ot_isp_saturation_attr;

【成员】

成员名称

描述

op_type

设置饱和度类型(手动或自动)。

manual_attr

手动饱和度参数。

auto_attr

自动饱和度参数。

【注意事项】

  • 设置饱和度功能分为自动和手动:

    • op_type为OT_OP_MODE_AUTO,使用自动饱和度调节功能。

      此时饱和度值会根据系统增益自动调节,饱和度与系统增益的关系请参见成员变量sat的描述。

      在自动饱和度模式下,系统最终的饱和度由系统增益对应的sat [16]变量,AWB控制的混合光源下自动调节饱和度multi_ls_scaler,极低照度下CCM Bypass功能iso_act_en ,高、低色温下CCM Bypass功能temp_act_en,几个因素共同决定。

    • op_type为OT_OP_MODE_MANUAL,使用手动饱和度调节功能。

      此时变量sat无效。

      在手动饱和度模式下,系统最终的饱和度由用户完全控制。

  • 调节饱和度参数不能保证图像亮度不改变,在目标饱和度相对标准值128偏离较大时,会在改变饱和度的同时伴随有亮度的改变。

【相关数据类型及接口】

ot_isp_saturation_manual

【说明】

定义手动饱和度属性。

【定义】

typedef struct {
    td_u8 saturation;           /* RW; Range: [0, 0xFF]; Format:8.0; set the manual saturation of CCM */
} ot_isp_saturation_manual;

【成员】

成员名称

描述

saturation

手动饱和度值。

取值范围:[0x0, 0xFF]

【注意事项】

当调节CCM的saturation等参数观察颜色变化,觉得变化较慢时,需要注意3DNR的tfs参数是否调节到12以下。tfs设置12以上的时候会有比较强的帧间延时,导致有CCM参数响应不及时的感觉。

【相关数据类型及接口】

ot_isp_saturation_auto

ot_isp_saturation_auto

【说明】

定义自动饱和度属性。

【定义】

typedef struct {
    td_u8 sat[OT_ISP_AUTO_ISO_NUM];           /* RW; Range: [0x0, 0xFF]; should be decreased with increasing ISO */
} ot_isp_saturation_auto;

【成员】

成员名称

描述

sat[OT_ISP_AUTO_ISO_NUM]

自动饱和度值。

推荐配置为递减序列。

表 1 sat在不同的增益情况下的推荐设置值

sat

Again*Dgain*ISPDgain(倍数)

推荐设置值

sat [0]

1

0x74

sat [1]

2

0x74

sat [2]

4

0x70

sat [3]

8

0x6b

sat [4]

16

0x64

sat [5]

32

0x5b

sat [6]

64

0x52

sat [7]

128

0x44

sat [8]

256

0x3b

sat [9]

512

0x38

sat [10]

1024

0x38

sat [11]

2048

0x38

sat [12]

4096

0x38

sat [13]

8192

0x38

sat [14]

16384

0x38

sat [15]

32768

0x38

【注意事项】

无

【相关数据类型及接口】

ot_isp_saturation_manual

ot_isp_color_matrix_attr

【说明】

定义ISP颜色矩阵属性。

【定义】

typedef struct {
   ot_op_mode op_type;
   ot_isp_color_matrix_manual manual_attr;
   ot_isp_color_matrix_auto   auto_attr;
} ot_isp_color_matrix_attr;

【成员】

成员名称

描述

op_type

颜色校正矩阵类型(手动或自动)。

manual_attr

手动颜色校正矩阵。

auto_attr

自动颜色校正矩阵。

【注意事项】

无

【相关数据类型及接口】

ot_isp_color_matrix_auto

【说明】

定义自动颜色校正矩阵属性。

【定义】

typedef struct {
    td_bool iso_act_en;    /* RW; Range: [0, 1]; Format:1.0; if enabled, CCM will bypass in low light */
    td_bool temp_act_en;   /* RW; Range: [0, 1]; Format:1.0; if enabled, CCM will bypass when color temperature is larger than 8000K or less than 2500K */
    td_u16  ccm_tab_num;  /* RW; Range: [0x3, 0x7]; Format:16.0; The number of CCM matrixes */

    ot_isp_color_matrix_param  ccm_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_color_matrix_auto;

【成员】

成员名称

描述

iso_act_en

是否使能低照度下CCM Bypass功能。

取值范围:[0,1]

temp_act_en

是否使能高、低色温下CCM Bypass功能。

取值范围:[0,1]

ccm_tab_num

当前配置的CCM的组数。

取值范围:[3,7]

ccm_tab[OT_ISP_CCM_MATRIX_NUM]

不同色温下的颜色校正矩阵和对应的色温值。

【注意事项】

  • 当ot_isp_saturation_attr中的op_type 为 OT_OP_MODE_AUTO,使用自动饱和度调节功能时,iso_act_en 和 temp_act_en功能生效。当op_type为OT_OP_MODE_MANUAL,使用手动饱和度调节功能时,iso_act_en 和temp_act_en功能不生效。
  • iso_act_en 功能指的是极低照度下(ISO大于12800)逐渐Bypass CCM,将由饱和度数组sat控制得到的CCM矩阵逐渐调向接近单位阵,这时CCM的实际饱和度会和饱和度数组中设定的不一致。用户关闭该功能后,极低照度下,饱和度数组仍生效。
  • temp_act_en功能指的是在高色温(大于8000K)和低色温场景(小于2500K),AWB可能未完全恢复,此时采用高饱和度CCM矩阵,会加剧AWB的偏色程度。比如钠灯场景,AWB校正后白色区域蓝色稍有不足,采用高饱和度CCM矩阵,白色区域的蓝色分量可能为0,图像整体偏黄。使能temp_act_en,在高低色温下逐渐BypassCCM,将由饱和度数组sat控制得到的CCM矩阵逐渐调向接近单位阵,优化类似场景颜色表现。
  • 颜色校正矩阵的数据格式,应与校正工具提供的保持一致。

【相关数据类型及接口】

ot_isp_color_matrix_param

【说明】

定义不同色温下自动颜色校正矩阵系数。

【定义】

typedef struct {
    td_u16 color_temp;           /* RW; Range: [500, 30000]; Format:16.0; the current color temperature */
    td_u16 ccm[OT_ISP_CCM_MATRIX_SIZE]; /* RW; Range: [0x0, 0xFFFF]; Format:8.8;CCM matrixes for different color temperature */
} ot_isp_color_matrix_param;

【成员】

成员名称

描述

color_temp

当前配置的CCM对应的色温。按照色温递减的方式配置CCM,即0-6组CCM矩阵由高色温到低色温。

取值范围:[500, 30000]

ccm[OT_ISP_CCM_MATRIX_SIZE]

不同色温下的颜色校正矩阵,8bit小数精度。bit 15是符号位,0表示正数,1表示负数,例如0x8010表示-16。bit12,13,14是无效的,即正数从0x0000到0x0FFF,负数从0x8000到0x8FFF,是CCM的合理参数。

取值范围:[0x0, 0xFFFF]

【注意事项】

  • 颜色校正矩阵的数据格式,应与校正工具提供的保持一致。
  • 当饱和度为自动的时候,实际生效的CCM参数和AWB算法反馈的当前色温值,自动饱和度参数有关。当饱和度为手动的时候,实际生效的CCM参数和AWB算法反馈的当前色温值有关。
  • 不同色温下的自动颜色校正矩阵,应满足灰色数据不变的约束条件,即矩阵中每行参数的和为0x100。请通过ot_isp_wb_info查询当前生效的颜色校正矩阵的值,确认每行参数的和为0x100。
  • 在调高饱和度时,如果需要配置的CCM值超过了最大正值0x0FFF或最小负值0x8FFF,会将CCM参数限制在合理范围内再配置。在这组异常的CCM参数下,图像中饱和度高的颜色可能会发生亮度变暗的现象,建议通过ot_isp_wb_info查询当前生效的CCM值,确认生效的值未发生clip。

【相关数据类型及接口】

ot_isp_color_matrix_auto

ot_isp_color_matrix_manual

【说明】

定义手动颜色校正矩阵属性。

【定义】

typedef struct {
    td_bool sat_en;               /* RW; Range: [0, 1]; Format:1.0;
                                  If bSatEn=1, the active CCM = SatMatrix * ManualMatrix, else the active CCM =  ManualMatrix */
    td_u16  ccm[OT_ISP_CCM_MATRIX_SIZE]; /* RW; Range: [0x0, 0xFFFF]; Format:8.8; Manul CCM matrix, */
} ot_isp_color_matrix_manual;

【成员】

成员名称

描述

sat_en

手动CCM模式下,饱和度是否生效。

取值范围:[0,1]

ccm[OT_ISP_CCM_MATRIX_SIZE]

手动颜色校正矩阵,8bit小数精度。bit 15是符号位,0表示正数,1表示负数,例如0x8010表示-16。

取值范围:[0x0, 0xFFFF]

【注意事项】

  • 手动CCM模式下,用户可通过sat_en参数选择饱和度是否生效。

    • sat_en = 1,生效的CCM = Manual CCM * Saturation CCM,用户可用该功能确定不同照度下的饱和度数组;
    • sat_en = 0,生效的CCM = Manual CCM。
  • sat_en = 1,生效的CCM会自动修正,保持每行参数的和为0x100。sat_en = 0,生效的CCM为手动设定参数值。

【相关数据类型及接口】

ot_isp_color_matrix_auto

ot_isp_color_sector_attr

【说明】

定义颜色分区调节属性。

【定义】

typedef struct {
    td_bool enable;            /* RW; Range: [0, 1]; Format:1.0; If enabled, sector on */
    ot_isp_color_sector_manual manual_attr;
    ot_isp_color_sector_auto   auto_attr;
} ot_isp_color_sector_attr; 

【成员】

成员名称

描述

enable

颜色分区调节使能。不使能时使用原CCM矩阵功能。

manual_attr

手动颜色分区调节。

auto_attr

自动颜色分区调节。

【注意事项】

Hi3519DV500不支持。

【相关数据类型及接口】

ot_isp_color_sector_auto

【说明】

定义自动颜色校正矩阵属性。

【定义】

typedef struct {
    ot_isp_color_sector_param color_tab[OT_ISP_CCM_MATRIX_NUM];
} ot_isp_color_sector_auto;

【成员】

成员名称

描述

color_tab[OT_ISP_CCM_MATRIX_NUM]

多组不同色温下的颜色分区调节参数,对应CCM分组。

【注意事项】

Hi3519DV500 不支持。

【相关数据类型及接口】

ot_isp_color_sector_param

【说明】

定义不同色温下自动颜色分区调节参数。

【定义】

typedef struct {
    td_u8 hue_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
    td_u8 sat_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
} ot_isp_color_sector_param; /* Not support for Hi3519DV500 */

【成员】

成员名称

描述

hue_shift[OT_ISP_COLOR_SECTOR_NUM]

颜色分区调节色调参数。

取值范围:[0, 40]

sat_shift[OT_ISP_COLOR_SECTOR_NUM]

颜色分区调节饱和度参数。

取值范围:[0, 40]

【注意事项】

  • 色调调节和饱和度调节20为不调节。对应当前的各组色温下的自动CCM参数设置。
  • 色调调节大于20为顺时针色调偏移,小于20为逆时针色调偏移。
  • 饱和度调节大于20为增加饱和度,小于20为减少饱和度。
  • 色调调节和饱和度调节分区对应为:红色,肤色,黄色,绿色,蓝色,紫色。
  • Hi3519DV500 不支持。

【相关数据类型及接口】

ot_isp_color_sector_auto

ot_isp_color_sector_manual

【说明】

定义手动颜色分区调节参数。

【定义】

typedef struct {
    td_u8 hue_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
    td_u8 sat_shift[OT_ISP_COLOR_SECTOR_NUM]; /* RW; Range: [0x0, 0x28]; Format:8.0;CCM */
} ot_isp_color_sector_manual; /* Not support for Hi3519DV500 */

【成员】

成员名称

描述

hue_shift[OT_ISP_COLOR_SECTOR_NUM]

颜色分区调节色调参数。

取值范围:[0, 40]

sat_shift[OT_ISP_COLOR_SECTOR_NUM]

颜色分区调节饱和度参数。

取值范围:[0, 40]

【注意事项】

  • 色调调节和饱和度调节20为不调节。对应当前的手动CCM参数设置。
  • Hi3519DV500 不支持。

【相关数据类型及接口】

ot_isp_color_sector_attr