7.3.5 ISP图像系统
概述
AE
AE算法通过分析直方图进行操作,以计算相对于校准中设置的AE target的新EV值。AE target由算法动态控制,以确保正确曝光低动态范围场景和高动态范围场景。例如,在低动态范围场景中,AE target将基于AE_LDR_Target(18%灰度目标)。对于高动态范围场景,该算法将动态修改AE target,保证亮区不会过曝。本地色调映射引擎(Iridix)将确保阴影被显示并正确曝光。HDR目标值需要根据 Sensor的动态范围校准,Iridix引擎来还原低亮区域的内容 。
重要概念
曝光时间:图像传感器内部积累电荷的时间,是pixel从开始曝光到电量被读出的这段时间,决定了sensor受光时间的长短,曝光时间可以以行长为单位。
曝光增益:对sensor 的输出电荷的总的放大系数,一般有数字增益和模拟增益,模拟增益引入的噪声会稍小,所以一般优先用模拟增益。
基本原理
AE算法通过分析直方图统计并结合校准的AE目标值来得到新的EV(exposure value)值。为了兼顾低动态场景和高动态场景都能准确曝光,算法会动态的调整AE目标值。
AWB
AWB模块负责实现色彩稳定,因为图像传感器对中性色调的响应取决于场景光照情况,不具有人眼的不同光照色温下的色彩恒定性,使得这些在白色和灰色等中性色调中最为明显。因此白平衡模块就需要将人眼看来白色的物体进行色彩的还原,使其在照片上也呈现为白色。AWB算法处理范围广泛的照明条件和光谱,以避免不良的偏色。
重要概念
色温:具有一定表面温度的黑体(blackbody)的辐射光的光谱特性。
颜色恒常性:在照度条件发生变化时,人们对物体表面颜色的知觉趋于稳定的心理倾向。
基本原理
白平衡各通道校正由AWB统计信息和算法基于静态校正结果完成的。该校正结果不会在帧数据 中更新,而是作为配置的一部分在下一帧更新。
Demosaic
Demosaic单元负责从覆盖有颜色过滤器阵列(CFA)的图像传感器输出的(空间欠采样)颜色样本中重建出全彩色图像。此外,该模块提供了对图像的高级控制锐化。
数码相机传感器元件本身只能记录落在它们上面光线的强度,无法区 分不同的颜色,因此仅产生灰度图像。要捕获颜色信息,必须在每个像素传感器上放置滤镜,它仅允许特定颜色的光通过。使用的滤镜必须能够重建——每个像素具有红色,绿色和蓝色(RGB)值的全彩色图像。这种彩色滤光片阵列最常见的类型称为“拜耳阵列”,之所以这么称呼,是因为滤镜安排每2x2像素组以RGGB方式排列。
所有像素的一半是绿色(G),四分之一是红色(R)和蓝色(B)。与蓝色同一行中的绿色单元格标记为Gb,与红色同一行中的绿色单元格标记为Gr。模式可以以R,Gr,Gb或B中的任何一个开头。
彩色滤光片的这种布置实质上导致了色彩信息空间欠采样,去马赛克单元负责从这种不完整色彩信息中重建全彩色图像(每个像素含R、G、B三色信息)。
该模块由许多滤波器组成,这些滤波器根据内插的亮度通道重建色度通道。它还考虑了信号相关的传感器噪声(基于较早确定的噪声轮廓),以保持边缘的清晰度和区域均匀的平滑度,同时插补缺失的像素分量。也因此,缺失像素分量的插值包含了传感器的噪声。内置的锐化最大程度地减少了高频噪声的放大。
Sharpen
通常称之为后端锐化,此模块旨在与Demosaic模块的Sharpen协同作用。Demosaic模块的锐化是在RGB域控制锐化,用于达到要求分辨率,但过度锐化会导致伪像和看起来不自然的纹理。
暗区使用配置寄存器:luma thresh low 以及 luma slope low;
亮区使用配置寄存器:luma thresh high 以及 luma slope high。 下图显示了这四个参数对于sharpen效果的影响:
Gamma
该模块对输出Gamma进行编码,通常设置为匹配BT.709或sRGB Gamma曲线。
此模块分别为三个(R,G,B)颜色通道中的每一个应用Gamma LUT。
在典型配置中,LUT具有129个均匀间隔的节点,标记为0…128,硬件在这些节点之间应用线性插值。
每个数据值都是16位无符号数,因此可以预计Gamma [0] = 0和Gamma [128] = 0xFFFF,其他127个值定义Gamma校正曲线。
注意:
自适应对比度增强由Iridix模块动态执行。应根据所需输出的Gamma特性对LUT进行静态修改。同时Gamma会影响 AE、 CCM、 Iridix模块,因此Gamma变动时需要重新验证这几个模块。
Iridix
Iridix®使用本地色调映射进行动态范围压缩(DRC),尝试从HDR场景中可见性低的区域恢复细节,而又不影响全局图像。 总体而言,通过增加相对于场景内容的增益,增加了可用于本地区域的色调范围。
CNR
CNR模块通过对周边色度均值智能估计的方式进行α-混合来矫正YUV空间中每个pixel的颜色,从而降低图像中的色度噪声。在此过程中,该模块会保持图像的强度信息完整,仅处理其色度部分。
该模块内部按YUV域处理,会先将RGB图像转换为YUV域,并根据颜色部分进一步细分,分别处理U和V通道,然后再将YUV转换回RGB域。
注意:此YUV不会直接输出, CNR后面模块会把RGB转换成YUV输出到IPU或DDR
对U和V的处理是将高斯核应用于相应段的每个U和V通道,并通过相应的偏移或斜率参数进行配置。为了最大程度地减少硬件实现或减少大内核的行数,垂直高斯滤波被新兴的递归滤波器代替。
另外,为了进一步减小面积,在处理之前先对色彩通道进行下采样,然后在输出阶段进行上采样。输出的U通道和V通道分别是经过处理的U通道和V通道与原始U通道和V通道的混合,这些通道由增量偏移或斜率参数配置。然后将已处理的U和V以及未处理的Y转换回RGB域。
CCM
大多数情况下,标准颜色无法提供最佳图像质量。根据应用程序或客户喜好,CCM模块可以对颜色进行校正和调整。该模块更改图像的色度值以匹配标准色彩空间的色度值。
通过捕获该模块对输入的 {R,G,B}
或 {R,G,B,Ir}
像素值应用线性颜色校正。计算系数矩阵如图所示:
In1、In2、In3和In4是输入(分别是R、G、B和Ir),A11到A34是可配置的矩阵系数。系数为s4.8数字格式的13位值,其中Msbit(12bits)为符号位。负值的MSbit(12bits)设置为1。
注意:如果CFA模式是RGGB,则Ir系数和Ir信道偏移必须设置为零。
Sinter
Sinter®是一种先进的空间降噪模块,结合了一组算法来抑制传感器噪声,该滤波器作用于RAW数据域空间,在保持纹理和细节的同时,可有效降低图像中的人眼感知到的噪声,使得处理得到的图像更自然。
通过使用外部生成的sensor Noise Profile LUT可以简化该模块的使用。正确配置了LUT表之后,可通过较少的一组寄存器来控制模块。大多数情况下,仅需要修改Sinter的阈值以调整噪声滤波器的强度。
Sinter:Thresh Long和Sinter:Thresh Short寄存器分别对应于长曝光和短曝光,用于WDR模式。当曝光比例为1或WDR模式禁止时,Sinter:Thresh Long和Sinter:Thresh Short应该被设置为相同的值。阈值是在标准校正过程中使用以各种ISO值捕获的图像确定的,并通过系统增益进行调制。如果图像是使用frame-switching创建的,则应根据曝光比相应地设置这些值。
Temper
该模块是运动自适应时间降噪滤波器。通过在当前帧中检测到的局部运动程度设置的递归级别来将当前帧与先前历史帧进行递归平均。滤波器工作在RAW域,并且需要两帧外部存储,数据位宽是视频位宽+4位。
注意:在WDR模式下,视频位宽会更大。
可以增加或减少Recursion_Limit来调整递归的深度,反过来会影响进行递归平均操作的有效帧数。增大此参数将导致较小的递归深度、较小的降噪效果以及最小的运动伪影。
当Recursion_Limit设置为 0 时,最多16帧可以被平均。
当Recursion_Limit设置为 0xf 时,不对帧进行平均,这等同于禁止Temper。
Temper的阈值用于调节Temper噪声滤波器的强度。该模块的性能由外部生成的sensor Noise Profile LUT来保证。参考数据通过DMA存储在DDR中,有2个读DMA和2个写DMA管理参考数据的存储。
Mesh Shading
由于镜头光学折射不均匀,导致画面出现中心亮四周暗的现象。网格着色校正为非线性着色失真提供了进一步的校正,并微调径向着色校正所产生的效果。
该模块使用最大64x 64区域的网格对图像应用网格着色校正。网格校正有3页(R/G/B)的校正表,4种不同模式:
设置 Mesh Alpha Mode = 0
设置 Mesh Alpha Mode = 1
设置 Mesh Alpha Mode = 2
设置 Mesh Alpha Mode = 3
Radial Shading
与mesh shading相对应,径向阴影也是一种校正 Lens Shading 校正方法。利用透镜阴影的径向性质,可以校正偏心和椭圆形阴影效果。
径向着色系数存储在类型为32位的4x129条目LUT中,系数采用x.12格式,其中低12位为小数。对于每个颜色平面,从中心到外边缘存储系数。
Color Space Conversion
此模块将输入的 {R,G,B}
像素值转换为 {Y,U,V}
值,并使用标准3x3矩阵乘法和向量偏移。如果转换未激活,则ISP输出RGB格式的像素。
如果需要,可以对参数进行修改,以提供不同的转换。以BT.709为例进行说明,公式如下所示:
则calibration中RGB2YUV_CONVERSION中对应的参数如公式所示:
其中,若Coefft11 (Coefft12, Coefft13, Coefft21, Coefft22, Coefft23, Coefft31, Coefft32, Coefft33) 参数为正,clibration中参数为Coefft11*256取整;若该参数为负,则calibraiton中参数为(|Coefft11*256|+1<<15)取整。calibration 中参数为Coefft01(Coefft02, Coefft01)*1024取整。
统计信息
3A统计信息包含AWB,AE和AF。
AWB模块收集的统计信息用来给软件做白平衡,它累积区域级R/G和B/G统计信息,也收集全帧统计信息。
AE自动曝光统计信息用于调整传感器曝光,这是通过收集5-bin、1024-bin直方图完成的。
AF模块计算图像中的统计清晰度值。软件使用此值/统计信息来调整镜头,使其在感兴趣区域(ROI)上具有最佳聚焦。该模块计算区域和整个图像的边缘值。
ISP为各统计模块提供可编程的标记点。
AWB统计信息
AWB有全局和区域统计信息。
全局统计信息:整幅图像的R/G和B/G均值及有效统计点个数。
区域统计信息:最大支持图像的33x33分块,每个分块输出R/G,B/G的均值以及有效统计点个数。
AWB_stats_mode寄存器可用来配置均值的类别:R/G,B/G还是G/R,G/B。
通过寄存器配置,可限定有效像素:
Cb_Ref_Min/Max,Cr_Ref_Min/Max这4个值限定了R/G,B/G的最大值和最小值。
另外,可通过Cb_Ref_Low/High,Cr_Ref_Low/High来限定更小的R/G,B/G范围。
全局统计信息:由三个寄存器AWB RG,AWB BG,SUM来存储;
区域统计信息:
AE统计信息
在应用黑电平、白平衡和ISP增益之后收集自动曝光(AE)统计信息。包含两种直方图类型:
5-bin局部和全局直方图;
1024-bin全局直方图;
5-bin直方图
使用可调整的直方图bin边界,为每个区域和整个图像生成5-bin标准化直方图。Statistics_Hist_Thresh[i][j]用来定义i bin,j bin间的强度阈值。
Statistics_Hist[i] 提供i bin的全局归一化像素数,总和归一化为0xFFFF。
不提供中间bin的直方图,但可通过软件来计算得到:
包含Histx数据的内部表提供了每个区域的直方图的归一化值,如下表中mxn区域所示。区域的顺序是从图像的左上角开始的栅格顺序。对于每个区域,直方图数据的总和被标准化为0xFFFF。
最多支持
33x33分块。
1024-bin直方图
为整个图像构建全局1024-bin直方图。全局直方图可设置区域权重,但未标准化,ISP Firmware会执行统计数据的标准化。
AF统计信息
自动对焦统计信息由感兴趣区域(ROI)或区域的、标准化的全图像多方向对比度指标组成。CPU使用此对比度度 量来确定镜头的位置,以实现最佳聚焦。
AF 统计模块的清晰度评价函数计算像素点四个方向的对比度,计算示意如下图所示,
需要注意的是,AF统计模块不支持修改清晰度评价函数的系数。用户可修改kernel改变清晰度计算的像素点位置来适配不同的场景。AF统计模块不同kernel下清晰度计算方式如下图所示。
对于AF模块,可以通过软件配置区域。模块为每个像素计算区域对比度度量,并在整个区域内进行累积。对于每个像素,沿4个方向计算对比度。除此之外,还可以使用内核选择配置参数来控制对角线的角度方向,如上表所示。为了改善在弱光和低通成像情况下的响应,所计算的对比度为四级(四次对比度总和)。
这些区域度量标准不会在硬件中加权,但是软件可以在计算后应用基于区域的权重。
下图表明当AF对比度指标达到最高点时可以实现最佳对焦:
AF度量数据计算
区域累积对比度度量标准以16b尾数和5b指数的浮点格式存储。除了对比度指标外,我们还在该区域上累积平方图像和四次图像数据,如下图所示I2值是指图1所示四个方向像素的差值的平方和,I4是图1四个方向像素差的四次方和,E4是4个kernel下像素差四次方和累加,如图2,16b Mantissa存的是底数,5b Exponent存的是指数,Register1和Register2合起来64bit使用,用户不需要自己直接去计算,可以直接使用HB_ISP_GetMeteringData拿到cv值。
每个区域累积的统计信息如下表所示:
AF区域数据以如下形式存储:
除了区域统计,AF还累积归一化的四次边沿和,它存储在一个32位寄存器中。
Auto Level统计信息
iridix模块提供的1024bin统计数据。
平均亮度和平均亮度方差统计信息
ISP提供YUV域的区域亮度平均值的统计信息和区域 亮度平均值的方差。该模块始终使用32x16的固定区域大小(水平x垂直),此统计模块提供可用结果所需的最小帧分辨率为512x256。这些统计信息存储在512个位置的SRAM中,每个位置包含每个区域的10位(LSB)平均值信息和12位(MSB)亮度平均值信息的方差。其存储方法为10bits reserved + 12bits亮度方差 + 10bits 亮度平均值。
功能描述
交互数据
算法库与ISP Firmware交互框图
MEM中的内容有两部分,一是提供给算法库的数据,二是算法库给ISP Driver传入的值,ISP Driver中如AWB收到算法配置的值会更新到ISP寄存器空间;
-
这是一个上下文(对应一路sensor)的情况,多个sensor多套数据结构;
-
黄颜色块是可替换部分,Algo Lib需要几个回调接口,见“API参考”一节;另外需要一些输入输出的数据,见“数据结构”一节;
-
Sensor Driver包含了常用的sensor增益、曝光配置方法,一般情况不需要修改;
算法库与ISP Firmware交互数据
Module | ISP Fw -> 算法库 | 算法库 -> ISP Fw |
---|---|---|
AE | stats_data[ISP_FULL_HISTOGRAM_SIZE] | ae_exposure |
histogram_sum | ae_exposure_ratio | |
hist4[33 * 33] | frame_id | |
AWB | stats_data[MAX_AWB_ZONES] | awb_red_gain |
curr_AWB_ZONES | awb_green_even_gain | |
awb_green_odd_gain | ||
awb_blue_gain | ||
temperature_detected | ||
p_high | ||
light_source_candidate | ||
awb_warming[3] | ||
mix_light_contrast | ||
frame_id | ||
AF | stats_data[AF_ZONES_COUNT_MAX][2] | frame_to_skip |
zones_horiz | af_position | |
zones_vert | af_last_sharp | |
frame_num | ||
skip_cur_frame | ||
zoom_step_info | ||
Gamma | stats_data[ISP_FULL_HISTOGRAM_SIZE] | gamma_gain |
fullhist_sum | gamma_offset | |
frame_id | ||
Iridix | N/A(using AE statistics data from AE algorithm) | strength_target |
iridix_dark_enh | ||
iridix_global_DG | ||
iridix_contrast | ||
frame_id |
开发说明
ISP Firmware有两部分,分用户空间和内核空间。内核空间Firmware随系统启动而初始化,用户空间Firmware(内含默认3A算法)由HB_VIN_StartPipe接口启动,Firmware启动过程中会优先选择外部3A算法,如果未注册外部3A算法,那么启动默认3A算法。每一类算法都会有对应的两个输入参数——统计数据(stats)、输入参数(input),和一个输出参数——输出参数(output)。在每帧统计数据Ready后ISP Firmware会调用proc_func回调,并传入两个输入参数,proc_func是实际的算法实现,算法计算后要填充好输出参数,ISP Firmware会把输出参数应用到Sensor或ISP硬件。
AE算法注册
AE向ISP Firmware注册回调函数:
From | 用户需要实现 | To |
---|---|---|
AELIB | init_func | ISP Firmware |
proc_func | ||
deinit_func |
接口说明:
回调函数 | 说明 |
---|---|
init_func | 算法初始化函数 |
proc_func | 实际算法实现,如target、exposure计算。ISP Firmware在每帧AE统计数据Ready时会调用该函数。proc_func传入参数和需要传出的参数见结构体描述 |
deinit_func | 算法去初始化函数 |
AWB算法注册
AWB向ISP Firmware注册回调函数:
From | 用户需要实现 | To |
---|---|---|
AWBLIB | init_func | ISP Firmware |
proc_func | ||
deinit_func |
接口说明:
回调函数 | 说明 |
---|---|
init_func | 算法初始化函数 |
proc_func | 实际算法实现, ISP Firmware在每帧AWB统计数据Ready时会调用该函数。proc_func传入参数和需要传出的参数见结构体描述 |
deinit_func | 算法去初始化函数 |
AF算法注册
AF向ISP Firmware注册回调函数:
From | 用户需要实现 | To |
---|---|---|
AFLIB | init_func | ISP Firmware |
proc_func | ||
deinit_func |
接口说明:
回调函数 | 说明 |
---|---|
init_func | 算法初始化函数 |
proc_func | 实际算法实现, ISP Firmware在每帧AF统计数据Ready时会调用该函数。proc_func传入参数和需要传出的参数见结构体描述 |
deinit_func | 算法去初始化函数 |
算法注册举例
以AWB算法为例:
ISP_AWB_FUNC_S stAwbFunc = {
.init_func = awb_init_func,
.proc_func = awb_proc_func,
.deinit_func = awb_deinit_func,
};
HB_ISP_AWBLibRegCallback(0, "libawb.so", &stAwbFunc);
void *awb_init_func(uint32_t ctx_id)
{
pr_info("ctx id is %d", ctx_id);
return NULL;
}
int32_t awb_proc_func(void *awb_ctx, awb_stats_data_t *stats, awb_input_data_t *input, awb_output_data_t *output)
{
awb_acamera_core_obj_t *p_awb_core_obj = (awb_acamera_core_obj_t *)awb_ctx;
awb_acamera_input_t *p_acamera_input = (awb_acamera_input_t *)input->acamera_input;
awb_calibration_data_t *p_cali_data = &( p_acamera_input->cali_data );
awb_acamera_output_t *p_acamera_output = (awb_acamera_output_t *)output->acamera_output;
//具体算法实现,传入input、统计数据进行计算
awb_calc_avg_weighted_gr_gb_mesh( p_awb_core_obj, stats, input );
awb_detect_light_source( p_awb_core_obj );
awb_calculate_warming_effect( p_awb_core_obj, p_cali_data );
//计算结果赋值给输出参数
p_acamera_output->rg_coef = p_awb_core_obj->rg_coef;
p_acamera_output->bg_coef = p_awb_core_obj->bg_coef;
p_acamera_output->temperature_detected = p_awb_core_obj->temperature_detected;
p_acamera_output->p_high = p_awb_core_obj->p_high;
p_acamera_output->light_source_candidate = p_awb_core_obj->light_source_candidate;
memcpy( p_acamera_output->awb_warming, p_awb_core_obj->awb_warming, sizeof( p_acamera_output->awb_warming ) );
p_acamera_output->awb_converged = p_awb_core_obj->awb_converged;
return 0;
}
int32_t awb_deinit_func(void *awb_ctx)
{
pr_info("done");
return 0;
}
API参考
HB_ISP_SetFWState/HB_ISP_GetFWState
【函数声明】
int HB_ISP_SetFWState(uint8_t pipeId, const ISP_FW_STATE_E enState);
int HB_ISP_GetFWState(uint8_t pipeId, ISP_FW_STATE_E *penState);
【功能描述】
设置/获取ISP Firmware的状态。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
penState | ISP Firmware状态 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetRegister/HB_ISP_GetRegister
【函数声明】
int HB_ISP_SetRegister(uint8_t pipeId, uint32_t u32Addr, uint32_t u32Value);
int HB_ISP_GetRegister(uint8_t pipeId, uint32_t u32Addr, uint32_t *pu32Value);
【功能描述】
设置/获取ISP寄存器。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
u32Addr | ISP寄存器地址 | 输入 |
u32Value | 要设置的值 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetModuleControl/ HB_ISP_GetModuleControl
【函数声明】
int HB_ISP_SetModuleControl(uint8_t pipeId, const ISP_MODULE_CTRL_U *punModCtrl);
int HB_ISP_GetModuleControl(uint8_t pipeId, ISP_MODULE_CTRL_U *punModCtrl);
【功能描述】
设置/获取ISP内部各模块的bypass情况。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
punModCtrl | ISP 内部各模块bypass控制 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SwitchScence
【函数声明】
int HB_ISP_SwitchScence(uint8_t pipeId, const char *cname);
【功能描述】
设置calibration库。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
cname | Calibration库的路径 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_StartI2CBus/HB_ISP_StopI2CBus
【函数声明】
int HB_ISP_StartI2CBus(uint8_t pipeId);
void HB_ISP_StopI2CBus(uint8_t pipeId);
【功能描述】
启动、停止写I2C线程。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】StartI2Cbus前需要HB_ISP_GetSetInit初始化和sensor初始化。
【参考代码】
HB_ISP_SendI2CData
【函数声明】
int HB_ISP_SendI2CData(ISP_I2C_DATA_S data);
【功能描述】
写I2C数据。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
data | 要发送的data信息 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
在使用前要调用HB_ISP_StartI2CBus接口启动写I2C线程。
【参考代码】
HB_ISP_AELibRegCallback
【函数声明】
int HB_ISP_AELibRegCallback(uint8_t pipeId, char *name,
ISP_AE_FUNC_S *pstAeFunc);
【功能描述】
注册AE算法库。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
name | 库名字,固定拷贝20字符长度 | 输入 预留项,可缺省 |
pstAeFunc | AE算法回调函数指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
HB_VIN_StartPipe会启动ISP算法,需要在调用HB_VIN_StartPipe函数前进行算法注册。
【参考 代码】见算法注册举例
HB_ISP_AWBLibRegCallback
【函数声明】
int HB_ISP_AWBLibRegCallback(uint8_t pipeId, char *name,
ISP_AWB_FUNC_S *pstAWBFunc);
【功能描述】
注册AWB算法库。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
name | 库名字,固定拷贝20字符长度 | 输入 预留项,可缺省 |
pstAWBFunc | AWB算法回调函数指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
HB_VIN_StartPipe会启动ISP算法,需要在调用HB_VIN_StartPipe函数前进行算法注册。
【参考代码】见算法注册举例
HB_ISP_AFLibRegCallback
【函数声明】
int HB_ISP_AFLibRegCallback(uint8_t pipeId, char *name,
ISP_AF_FUNC_S *pstAFFunc);
【功能描述】
注册AF算法库。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
name | 库名字,固定拷 贝20字符长度 | 输入 预留项,可缺省 |
pstAFFunc | AF算法回调函数指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
HB_VIN_StartPipe会启动ISP算法,需要在调用HB_VIN_StartPipe函数前进行算法注册。
【参考代码】见算法注册举例
HB_ISP_AELibUnRegCallback
【函数声明】
int HB_ISP_AELibUnRegCallback(uint8_t pipeId);
【功能描述】
去注册AE算法库。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_AWBLibUnRegCallback
【函数声明】
int HB_ISP_AWBLibUnRegCallback(uint8_t pipeId);
【功能描述】
去注册AWB算法库。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_AFLibUnRegCallback
【函数声明】
int HB_ISP_AFLibUnRegCallback(uint8_t pipeId);
【功能描述】
去注册AF算法库。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
注意:
-
如果使用默认3A算法,不需要关注该章节的接口。
-
不含Zoom和光圈控制算法,用户可自己实现,给出输出参数,以修改ISP Firmware做适配。
HB_ISP_GetSetInit/HB_ISP_GetSetExit
【函数声明】
int HB_ISP_GetSetInit(void);
int HB_ISP_GetSetExit(void);
【功能描述】
获取/设置参数前的初始化。
【参数描述】无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
同一个进程里调用一次即可,在调用所有Get/Set类接口前,首先要调用HB_ISP_GetSetInit进行初始化。
【参考代码】
HB_ISP_SetAeAttr/HB_ISP_GetAeAttr
【函数声明】
int HB_ISP_SetAeAttr(uint8_t pipeId, const ISP_AE_ATTR_S *pstAeAttr);
int HB_ISP_GetAeAttr(uint8_t pipeId, ISP_AE_ATTR_S *pstAeAttr);
【功能描述】
设置AE算法属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAeAttr | 指向AE参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
set只针对manual模式,get时传不同模式 获取对应模式的值。
【参考代码】
HB_ISP_SetAfAttr/HB_ISP_GetAfAttr
【函数声明】
int HB_ISP_SetAfAttr(uint8_t pipeId, ISP_AF_ATTR_S *pstAfAttr);
int HB_ISP_GetAfAttr(uint8_t pipeId, ISP_AF_ATTR_S *pstAfAttr);
【功能描述】
设置AF-ZOOM属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAfAttr | 指向AF参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetAwbAttr/HB_ISP_GetAwbAttr
【函数声明】
int HB_ISP_SetAwbAttr(uint8_t pipeId, const
ISP_AWB_ATTR_S *pstAwbAttr);
int HB_ISP_GetAwbAttr(uint8_t pipeId, ISP_AWB_ATTR_S *pstAwbAttr);
【功能描述】
设置AWB算法属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAwbAttr | 指向AWB参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
set只针对manual模式,get时传不同模式获取对应模式的值。
【参考代码】
HB_ISP_SetBlackLevelAttr/HB_ISP_GetBlackLevelAttr
【函数声明】
int HB_ISP_SetBlackLevelAttr(uint8_t pipeId, const
ISP_BLACK_LEVEL_ATTR_S *pstBlackLevelAttr);
int HB_ISP_GetBlackLevelAttr(uint8_t pipeId,
ISP_BLACK_LEVEL_ATTR_S *pstBlackLevelAttr);
【功能描述】
设置黑电平属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstBlackLevelAttr | 指向黑电平参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
set只针对manual模式,get时传不同模式获取对应模式的值。
auto模式下,black_level 值为calibraiton参数BLACK_LEVEL_B/BLACK_LEVEL_GB/BLACK_LEVEL_GR/BLACK_LEVEL_R根据当前曝光gain插值得到。
manual模式下,用户可设置black_level 值。
【参考代码】
HB_ISP_SetDemosaicAttr/HB_ISP_GetDemosaicAttr
【函数声明】
int HB_ISP_SetDemosaicAttr(uint8_t pipeId, const
ISP_DEMOSAIC_ATTR_S *pstDemosaicAttr);
int HB_ISP_GetDemosaicAttr(uint8_t pipeId,
ISP_DEMOSAIC_ATTR_S *pstDemosaicAttr);
【功能描述】
设置解马赛克模块属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstDemosaicAttr | 指向解马赛克参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetSharpenAttr/HB_ISP_GetSharpenAttr
【函数声明】
int HB_ISP_SetSharpenAttr(uint8_t pipeId, const
ISP_SHARPEN_ATTR_S *pstSharpenAttr);
int HB_ISP_GetSharpenAttr(uint8_t pipeId,
ISP_SHARPEN_ATTR_S *pstSharpenAttr);
【功能描述】
设置锐化属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstSharpenAttr | 指向锐化参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetGammaAttr/HB_ISP_GetGammaAttr
【函数声明】
int HB_ISP_SetGammaAttr(uint8_t pipeId, const
ISP_GAMMA_ATTR_S *pstGammaAttr);
int HB_ISP_GetGammaAttr(uint8_t pipeId,
ISP_GAMMA_ATTR_S *pstGammaAttr);
【功能描述】
设置Gamma属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstGammaAttr | 指向Gamma参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetIridixAttr/HB_ISP_GetIridixAttr
【函数声明】
int HB_ISP_SetIridixAttr(uint8_t pipeId, const ISP_IRIDIX_ATTR_S *pstIridixAttr);
int HB_ISP_GetIridixAttr(uint8_t pipeId,
ISP_IRIDIX_ATTR_S *pstIridixAttr);
【功能描述】
设置Iridix模块属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstIridixAttr | 指 向Iridix参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetIridixStrengthLevel/HB_ISP_GetIridixStrengthLevel
【函数声明】
int HB_ISP_SetIridixStrengthLevel(uint8_t pipeId, uint16_t level);
int HB_ISP_GetIridixStrengthLevel(uint8_t pipeId, uint16_t *level);
【功能描述】
设置Iridix强度等级。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
level | 强度等级,范围 [0, 255] | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetCnrAttr/HB_ISP_GetCnrAttr
【函数声明】
int HB_ISP_SetCnrAttr(uint8_t pipeId, const ISP_CNR_ATTR_S *pstCnrAttr);
int HB_ISP_GetCnrAttr(uint8_t pipeId, ISP_CNR_ATTR_S *pstCnrAttr);
【功能描述】
设置色度降噪模块属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstCnrAttr | 指向色度降噪参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetSinterAttr/HB_ISP_GetSinterAttr
【函数声明】
int HB_ISP_SetSinterAttr(uint8_t pipeId, const ISP_SINTER_ATTR_S *pstSinterAttr);
int HB_ISP_GetSinterAttr(uint8_t pipeId,
ISP_SINTER_ATTR_S *pstSinterAttr);
【功能描述】
设置空域降噪模块属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstSinterAttr | 指向空域降噪参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetTemperAttr/HB_ISP_GetTemperAttr
【函数声明】
int HB_ISP_SetTemperAttr(uint8_t pipeId, const
ISP_TEMPER_ATTR_S *pstTemperAttr);
int HB_ISP_GetTemperAttr(uint8_t pipeId,
ISP_TEMPER_ATTR_S *pstTemperAttr);
【功能描述】
设置时域降噪模块属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstTemperAttr | 指向时域降噪参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetMeshShadingAttr/HB_ISP_GetMeshShadingAttr
【函数声明】
int HB_ISP_SetMeshShadingAttr(uint8_t pipeId, const
MESH_SHADING_ATTR_S *pstMeshShadingAttr);
int HB_ISP_GetMeshShadingAttr(uint8_t pipeId,
MESH_SHADING_ATTR_S *pstMeshShadingAttr);
【功能描述】
设置Mesh Shading模块属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstMeshShadingAttr | 指向MeshShading参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetMeshShadingLUT/HB_ISP_GetMeshShadingLUT
【函数声明】
int HB_ISP_SetMeshShadingLUT(uint8_t pipeId, const
MESH_SHADING_LUT_S *pstMeshShadingLUT);
int HB_ISP_GetMeshShadingLUT(uint8_t pipeId, MESH_SHADING_LUT_S *pstMeshShadingLUT);
【功能描述】
设置Mesh Shading模块LUT表。
【 参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstMeshShadingLUT | 指向MeshShading LUT表的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetRadialShadingAttr/HB_ISP_GetRadialShadingAttr
【函数声明】
int HB_ISP_SetRadialShadingAttr(uint8_t pipeId, const
RADIAL_SHADING_ATTR_S *pstRadialShadingAttr);
int HB_ISP_GetRadialShadingAttr(uint8_t pipeId,
RADIAL_SHADING_ATTR_S *pstRadialShadingAttr);
【功能描述】
设置Radial Shading模块属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstRadialShadingAttr | 指向Radial Shading参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetRadialShadingLUT/HB_ISP_GetRadialShadingLUT
【函数声明】
int HB_ISP_SetRadialShadingLUT(uint8_t pipeId, const
RADIAL_SHADING_LUT_S *pstRadialShadingLUT);
int HB_ISP_GetRadialShadingLUT(uint8_t pipeId,
RADIAL_SHADING_LUT_S *pstRadialShadingLUT);
【功能描述】
设置Radial Shading模块LUT表。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstRadialShadingLUT | 指向Radial Shading LUT表的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetCSCAttr/HB_ISP_GetCSCAttr
【函数声明】
int HB_ISP_SetCSCAttr(uint8_t pipeId, const
ISP_CSC_ATTR_S *pstCSCAttr);
int HB_ISP_GetCSCAttr(uint8_t pipeId, ISP_CSC_ATTR_S *pstCSCAttr);
【功能描述】
设置颜色空间转换模块的属性。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstCSCAttr | 指向CSC属性的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetSceneModesAttr/HB_ISP_GetSceneModesAttr
【函数声明】
int HB_ISP_SetSceneModesAttr(uint8_t pipeId, const
ISP_SCENE_MODES_ATTR_S *pstSceneModesAttr);
int HB_ISP_GetSceneModesAttr(uint8_t pipeId,
ISP_SCENE_MODES_ATTR_S *pstSceneModesAttr);
【功能描述】
设置场景模式。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstSceneModesAttr | 指向场景模式参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetAwbZoneInfo/HB_ISP_GetAwbZoneInfo
【函数声明】
int HB_ISP_GetAwbZoneInfo(uint8_t pipeId, ISP_ZONE_ATTR_S *awbZoneInfo);
int HB_ISP_SetAwbZoneInfo(uint8_t pipeId, ISP_ZONE_ATTR_S awbZoneInfo);
【功能描述】
获取/设置AWB zones信息。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
awbZoneInfo | 指向AWB zones 信息的指针(获取时); AWB zones 信息数据结构(设置时); | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】无
【参考代码】无
HB_ISP_SetAfZoneInfo/HB_ISP_GetAfZoneInfo
【函数声明】
int HB_ISP_GetAfZoneInfo(uint8_t pipeId, ISP_ZONE_ATTR_S *afZoneInfo);
int HB_ISP_SetAfZoneInfo(uint8_t pipeId, ISP_ZONE_ATTR_S *afZoneInfo);
【功能描述】
获取/设置AF zones信息。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
afZoneInfo | 指向AF zones 信息的指针(获取时); AF zones 信息数据结构(设置时); | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】无
【参考代码】无
HB_ISP_SetAe5binZoneInfo/HB_ISP_GetAe5binZoneInfo
【函数声明】
int HB_ISP_GetAe5binZoneInfo(uint8_t pipeId,
ISP_ZONE_ATTR_S *ae5binZoneInfo);
int HB_ISP_SetAe5binZoneInfo(uint8_t pipeId,
ISP_ZONE_ATTR_S ae5binZoneInfo);
【功能描述】
获取/设置AE 5bin zones信息。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
ae5binZoneInfo | 指向AE 5bin zones 信息的指针(获取时); AE 5BIN zones 信息数据结构(设置时); | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】
HB_ISP_SetAfKernelInfo/HB_ISP_GetAfKernelInfo
【函数声明】
int HB_ISP_GetAfKernelInfo(uint8_t pipeId, uint32_t *af_kernel);
int HB_ISP_SetAfKernelInfo(uint8_t pipeId, uint32_t af_kernel);
【功能描述】
获取/设置AF KERNEL信息。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
af_kernel | 指向af_kernel指针(获取时); af_kernel数据信息(设置时); | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失 败 |
【注意事项】
该接口主要为应用使用,如获取或改变当前af统计数据kernel。
【参考代码】
HB_ISP_SetAeParam/HB_ISP_GetAeParam
【函数声明】
int HB_ISP_SetAeParam(uint8_t pipeId, const ISP_AE_PARAM_S *pstAeParam);
int HB_ISP_GetAeParam(uint8_t pipeId, ISP_AE_PARAM_S *pstAeParam);
【功能描述】
设置/获取AE 参数信息,line和total_gain。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAeParam | 指向ae 参数的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
【函数声明】
HB_ISP_SetAeRoiInfo/HB_ISP_GetAeRoiInfo
【函数声明】
int HB_ISP_SetAeRoiInfo(uint8_t pipeId, ISP_AE_ROI_ATTR_S aeRoiInfo);
int HB_ISP_GetAeRoiInfo(uint8_t pipeId, ISP_AE_ROI_ATTR_S *aeRoiInfo);
【功能描述】
设置ae的ROI权重区域,可以动态调用。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
aeRoiInfo | ROI 信息参数 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
该roi区域设置与3A-AE中roi 权重设置是独立进行,同一时刻只能使用其中一种功能。
【参考代码】无
HB_ISP_SetAwbStatAreaAttr/HB_ISP_GetAwbStatAreaAttr
【函数声明】
int HB_ISP_GetAwbStatAreaAttr(uint8_t pipeId, ISP_AWB_STAT_AREA_ATTR_S
*pstAwbStatAreaAttr);
int HB_ISP_SetAwbStatAreaAttr(uint8_t pipeId, ISP_AWB_STAT_AREA_ATTR_S
*pstAwbStatAreaAttr);
【功能描述】
设置awb统计数据区域范围。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAwbStatAreaAttr | 统计数据区域范围参数 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_GetAeFullHist
【函数声明】
int HB_ISP_GetAeFullHist(uint8_t pipeId, uint32_t *pu32AeFullHist);
【功能描述】
获取AE统计数据。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pu32AeFullHist | 指向AE统计数据的指针 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
该接口主要为应用使用,如依统计信息做某些策略判断,3A算法库不需要用此接口。
【参考代码】
#define HB_ISP_FULL_HISTOGRAM_SIZE 1024
int i;
uint32_t ae[HB_ISP_FULL_HISTOGRAM_SIZE];
memset(ae, 0, sizeof(ae));
HB_ISP_GetAeFullHist(0, ae);
printf("\n--AE--\n");
for (i = 0; i \< HB_ISP_FULL_HISTOGRAM_SIZE; i++) {
printf("%-8d ", ae[i]);
if ((i + 1) % 8 == 0)
printf("\n");
}
HB_ISP_GetAwbZoneHist
【函数声明】
int HB_ISP_GetAwbZoneHist(uint8_t pipeId,
ISP_STATISTICS_AWB_ZONE_ATTR_S
*pstAwbZonesAttr);
【功能描述】
获取AWB统计数据。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAwbZonesAttr | 指向AWB统计数据的指针 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
该接口主要为应用使用,如依统计信息做某些策略判断,3A算法库不需要用此接口。
【参考代码】
HB_ISP_GetAe5binZoneHist
【函数声明】
int HB_ISP_GetAe5binZoneHist(uint8_t
pipeId, ISP_STATISTICS_AE_5BIN_ZONE_ATTR_S
*pst32Ae5bin);
【功能描述】
获取AE 5bin统计数据。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pst32Ae5bin | 指向AE 5bin统计数据的指针 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
该接口主要为应用使用,如依统计信息做某些策略判断,3A算法库不需要用此接口。
【参考代码】
ISP_STATISTICS_AE_5BIN_ZONE_ATTR_S ae_5bin[HB_ISP_MAX_AE_5BIN_ZONES];
ISP_ZONE_ATTR_S ae5binZoneInfo;
memset(ae_5bin, 0, sizeof(ae_5bin));
HB_ISP_GetAe5binZoneHist(ctx_idx, ae_5bin);
HB_ISP_GetAfZoneHist
【函数声明】
int HB_ISP_GetAfZoneHist(uint8_t pipeId, af_stats_data_t
*pstAfZonesAttr);
【功能描述】
获取AF统计数据。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAfZonesAttr | 指向AF统计数据的指针 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
1.该接口主要为应用使用,如依统计信息做某些策略判断,3A算法库不需要用此接口。
2.此接口有好几种数据的缓存,如果要获取实时的数据 ,请使用HB_ISP_GetMeteringData接口去获取,HB_ISP_GetMeteringData是获取的实时数据。
【参考代码】
uint32_t af_data[HB_ISP_AF_ZONES_COUNT_MAX * 2];
af_stats_data_t af;
ISP_ZONE_ATTR_S afZoneInfo;
memset(af_data, 0, sizeof(af_data));
af.zones_stats = (uint32_t *)&af_data;
HB_ISP_GetAfZoneHist(ctx_idx, &af);
HB_ISP_GetMeteringData
【函数声明】
int HB_ISP_GetMeteringData(uint8_t pipeId, void *data, ISP_METERING_DATA_TYPE_E type, int latest_flag);
【功能描述】
获取AF/LUMVAR统计数据。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
data | 指向AF/LUMVAR统计数据的指针 | 输出 |
type | 获取统计数据类型(AF/LUMVAR) | 输入 |
latest_flag | 是否获取最新数据 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
1.此接口获取得值fv即是可以直接用来聚焦计算。
2.可以不需要调用HB_ISP_GetVDTTimeOut帧中断接口再去获取,直接调用此接口获取就是最新的值。
HB_ISP_GetVDTTimeOut
【函数声明】
int HB_ISP_GetVDTTimeOut(uint8_t pipeId, uint8_t vdt_type, uint64_t timeout);
【功能描述】
获取ISP FRAME_START 或FRAME_END信息。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
vdt_type | 选择获取ISP frame_start or frame_end | 输入 |
timeout | 超时返回时间 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | FS/FE 同步 |
非0 | 超时返回 |
【注意事项】
该接口主要为应用使用,如进行时序同步。
【参考代码】无
HB_ISP_GetLumaZoneHist
【函数声明】
int HB_ISP_GetLumaZoneHist(uint8_t pipeId, ISP_STATISTICS_LUMVAR_ZONE_ATTR_S
*pst32Luma);
【功能描述】
获取LUMVAR 统计信息均值及方差。
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pst32Luma | 执行lumvar 统计信息的指针 | 输出 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetAEControl/ HB_ISP_GetAEControl
【函数声明】
int HB_ISP_SetAEControl(uint8_t pipeId, const ISP_AE_CONTROL *pstAeControl);
int HB_ISP_GetAEControl(uint8_t pipeId, ISP_AE_CONTROL *pstAeControl);
【功能描述】
设置/获取AE控制信息
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAeControl | 指向AE控制信息的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetAECorrection/ HB_ISP_GetAECorrection
【函数声明】
int HB_ISP_SetAECorrection(uint8_t pipeId, const ISP_AE_CORRECTION
*pstAeCorrection);
int HB_ISP_GetAECorrection(uint8_t pipeId, ISP_AE_CORRECTION *pstAeCorrection);
【功能描述】
设置/获取AE校正信息
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAeCorrection | 指向AE校正信息的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_Set_AE_5bin_Hist/ HB_ISP_Get_AE_5bin_Hist
【函数声明】
int HB_ISP_Set_AE_5bin_Hist(uint8_t pipeId, const ISP_5BIN_HIST * pAe5binHist);
int HB_ISP_Get_AE_5bin_Hist(uint8_t pipeId, ISP_5BIN_HIST * pAe5binHist);
【功能描述】
设置/获取AE的5bin统计信息
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pAe5binHist | 指向AE的5bin统计信息的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetExposureRatioAdjustment/ HB_ISP_GetExposureRatioAdjustment
【函数声明】
int HB_ISP_SetExposureRatioAdjustment(uint8_t pipeId, const ISP_EXP_RATIO_ADJ
*pstExpRatioAdj);
int HB_ISP_GetExposureRatioAdjustment(uint8_t pipeId, ISP_EXP_RATIO_ADJ
*pstExpRatioAdj);
【功能描述】
设置/获取曝光比例调整
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstExpRatioAdj | 指向曝光比例的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetExposurePartitionLuts/ HB_ISP_GetExposurePartitionLuts
【函数声明】
int HB_ISP_SetExposurePartitionLuts(uint8_t pipeId, const ISP_EXP_PAT_LUTS
*pstExpPatLuts);
int HB_ISP_SetExposurePartitionLuts(uint8_t pipeId, ISP_EXP_PAT_LUTS
*pstExpPatLuts);
【功能描述】
设置/获取曝光分区Lut表信息
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstExpPatLuts | 指向曝光分区lut表的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetAwbBgMaxGain/HB_ISP_GetAwbBgMaxGain
【函数声明】
int HB_ISP_SetAwbBgMaxGain(uint8_t pipeId, const ISP_AWB_BG_MAX_GAIN
*pstAwbBgMaxGain) ;
int HB_ISP_GetAwbBgMaxGain(uint8_t pipeId, ISP_AWB_BG_MAX_GAIN
*pstAwbBgMaxGain);
【功能描述】
设置/获取 AWB BG最大增益
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstAwbBgMaxGain | 指向AWB BG最大增益的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetCcmSaturationStrength/ HB_ISP_GetCcmSaturationStrength
【函数声明】
int HB_ISP_SetCcmSaturationStrength(uint8_t pipeId, const ISP_CCM_SATURA_STRENG
*pstCcmSatStre);
int HB_ISP_GetCcmSaturationStrength(uint8_t pipeId, ISP_CCM_SATURA_STRENG
*pstCcmSatStre);
【功能描述】
设置/获取CCM饱和强度信息
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstCcmSatStre | 指向CCM曝光强度的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetCcmMtLs/ HB_ISP_GetCcmMtLs
【函数声明】
int HB_ISP_SetCcmMtLs(uint8_t pipeId, const ISP_MT_ABSOLUTE_LS
*pstMtAbsoluteLs);
int HB_ISP_GetCcmMtLs(uint8_t pipeId, ISP_MT_ABSOLUTE_LS *pstMtAbsoluteLs);
【功能描述】
设置/获取CCM Mt Ls
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstMtAbsoluteLs | 指向CCM Mt Ls的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetCcmAttr/HB_ISP_GetCcmAttr
【函数声明】
int HB_ISP_SetCcmAttr(uint8_t pipeId, const ISP_CCM_ONE_GAIN_THRESHOLD
*pstOneGainThreshold);
int HB_ISP_GetCcmAttr(uint8_t pipeId, ISP_CCM_ONE_GAIN_THRESHOLD
*pstOneGainThreshold);
【功能描述】
设置/获取CCM属性
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstOneGainThreshold | 指向CCM属性的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetGammaEv1/HB_ISP_GetGammaEv1
【函数声明】
int HB_ISP_SetGammaEv1(uint8_t pipeId, const ISP_GAMMA_EV1 *pstGammaEv1);
int HB_ISP_GetGammaEv1(uint8_t pipeId, ISP_GAMMA_EV1 *pstGammaEv1);
【功能描述】
设置/获取Gamma Ev1属性
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstGammaEv1 | 指向Gamma Ev1的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetGammaEv2/HB_ISP_GetGammaEv2
【函数声明】
int HB_ISP_SetGammaEv2(uint8_t pipeId, const ISP_GAMMA_EV2 *pstGammaEv2);
int HB_ISP_GetGammaEv2(uint8_t pipeId, ISP_GAMMA_EV2 *pstGammaEv2);
【功能描述】
设置/获取Gamma Ev2属性
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstGammaEv2 | 指向Gamma Ev2的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_SetGammaThreshold/ HB_ISP_GetGammaThreshold
【函数声明】
int HB_ISP_SetGammaThreshold(uint8_t pipeId, const ISP_GAMMA_THRESHOLD
*pstGammaThd);
int HB_ISP_GetGammaThreshold(uint8_t pipeId, ISP_GAMMA_THRESHOLD *pstGammaThd);
【功能描述】
设置/获取Gamma临界值
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstGammaThd | 指 向Gamma临界值的指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功 |
非0 | 失败 |
【注意事项】
【参考代码】无
HB_ISP_GetEvToLuxStatustAttr/ HB_ISP_SetEvToLuxStatustAttr
【函数声明】
int HB_ISP_GetEvToLuxStatustAttr(uint8_t pipeId, uint8_t
*pstEvtoluxStatustAttr);
int HB_ISP_SetEvToLuxStatustAttr(uint8_t pipeId, const uint8_t
*pstEvtoluxStatustAttr);
【功能描述】
获取evtolux属性
【参数描述】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pipeId | Pipeline索引号 | 输入 |
pstEvtoluxStatustAttr |