跳到主要内容

图像调试指南

前 言

文档简介

本文档适用于V系列平台图像效果调试,通过更具体化的示例帮助用户了解图像ISP效果调试的基础流程。

目标读者

软件工程师、技术支持工程师。

适用范围

适用产品列表
产品名称ISP版本
V85xISP600
V821ISP603

文档约定

标志说明

注意

提醒操作中应注意的事项。不当的操作可能会损坏器件,影响可靠性、降低性能等。

备注

为准确理解文中指令、正确实施操作而提供的补充或强调信息。

提示

一些容易忽视的小功能、技巧。了解这些功能或技巧能帮助解决特定问题或者节省操作时间。

调试环境准备

图像效果调试需要准备的环境

名称说明
样机用于调试使用,建议调试前确定好需要量产的镜头,避免重复工作
对比机用于对比使用,由于镜头、sensor对成像质量影响大,建议选取对比机使用同款sensor、镜头
调试固件图像调试依赖于adb/ip两种连接方式,必须确保调试固件能正常使用其中一种方式
awTuningApp调试ISP使用的板端应用
TigerISP调试ISP使用的PC程序,前往APST下载
串口样机需将串口接出,便于调试过程中使用
光源箱用于客观标定,提供多种不同色温不同亮度的照明环境
散光片用于客观标定,又称毛玻璃
24色色卡用于客观标定,用于色彩调优

TigerISP下载安装

光源箱示例图

散光片示例图

24色色卡示例图

备注
  • 如无客观标定设备,可向我司对接人申请实验室环境用于客观标定。
  • V821 常电的 awTuningApp 路径: \platform\allwinner\vision\libAWIspApi\isp_mpp\isp_v821\libisp\tuning_app
  • V821 快启的 awTuningApp 路径: \rtos\lichee\rtos-hal\hal\source\vin\vin_isp\isp_server\out
  • V85X 常电的 awTuningApp 路径: \external\eyesee-mpp\middleware\sun8iw21\media\LIBRARY\libisp\tuning_app
  • V85X 快启的 awTuningApp 路径: \lichee\rtos-hal\hal\source\vin\vin_isp\isp_server\out

选择及设置色彩空间

色彩空间是一种数学模型,用于描述和表示图像或视频中的颜色,它定义了一组颜色值的范围、编码方式以及颜色之间的转换规则。

不同亮度范围的色彩空间是会导致动态范围呈现差异的;

BT709-Partrange(部分范围):也称为"limited range",它是指亮度范围在 16 到 235 之间的值。这意味着黑色对应的值是 16,白色对应的值是 235。在这个范围内,0 表示纯黑,255 表示纯白,而 1 和 235 之间的值用于表示灰度和其他亮度级别。Partrange 通常用于视频广播和一些消费电子设备中,以确保在传输和显示过程中能够兼容各种设备和标准。它可以防止黑色和白色之外的信息在传输或显示中被截断或失真。

BT709-Fullrange(全范围):也称为"full range",它是指亮度范围在 0 到 255 之间的值。这意味着黑色对应的值是 0,白色对应的值是 255。在这个范围内,所有的亮度级别都可以表示。Fullrange主要用于一些专业领域和特定应用,例如计算机图形和视频编辑。在这些情况下,使用全范围可以提供更大的亮度动态范围和更精细的色彩表示。

在产品开发中,如果希望图像对比度更高,画面更通透,那么建议选择BT709-Fullrange的色彩空间

在实际应用中,ISP、VE以及解码端,均需要设置色彩空间,在配置过程中,务必要确保三者保持设置同一个色彩空间,避免部分亮度丢失,对比度异常的问题。其中VE、ISP的色彩空间设置,请参考sample_smartIPC_demo中如下图所示配置,解码端需要找对应同事进行确认

V85xSample路径:\external\eyesee-mpp\middleware\sun8iw21\sample\sample_smartIPC_demo\sample_smartIPC_demo.c
V821Sample路径:\platform\allwinner\eyesee-mpp\middleware\sun300iw1\sample\sample_smartIPC_demo\sample_smartIPC_demo.c

色彩空间接口设置1

色彩空间接口设置2

ISP、VE设置好色彩空间后,通过抓取ISP、VE节点确认

ISP节点:cat /sys/kernel/debug/mpp/isp
VE节点:cat /sys/kernel/debug/mpp/ve*

ISP节点色彩空间

VE节点色彩空间

备注
  • potplayer播放器默认使用的是Full_range的色彩空间,vlc播放器默认使用的是Part_range的色彩空间,如果需要使用播放器对比图像效果,色彩空间也需要匹配上。

确认对焦是否准确

镜头对焦确认方法:

Step1:打印如下测试图,打印要求:横向、无边距、至少A4大小(越大越好)、至少600dpi(越大越好)

对焦示例图1

Step2:在充足照明(不小于1000lux)的环境拍摄,选择产品常用的拍摄距离放置测试图,最好能保证测试图高度占画面高度不小于1/8
Step3:彩色和红外下都需要测试。(如果打印版本无法在红外下使用,可到TB购买)
Step4:打开看视频的应用,画质调到最高,画面稳定后截图
Step5:用PS或ISP调试工具等打开图片,测量测试图的高度(上下边框的纵坐标差),根据最小的能看清楚三横三竖的图案所处位置,查表代入公式计算54941/Height/GE清晰度,如果图像有插值,那么公式为54941/Height/GE清晰度*插值图像高度/sensor实际高度

对焦示例图2

Step6:清晰度低于0.7的,请检查对焦
示例如下:

图片分辨率是1920x1080,测试图的高度为63像素,最小的能看清楚三横三竖的图案处于G-2E6,查表得1122.46。代入公式54941 / 63 / 1122.46 = 0.776935806,图像无插值,清晰度就是0.777

对焦示例图3

对焦示例图4

镜头sensor选型介绍

镜头与sensor在匹配状态下,才能将清晰度、画面均匀度达到最佳状态,镜头选型需要注意的方面如下

  • 镜头与sensor的CRA是否匹配

镜头与sensor均有一个CRA曲线,在选型过程中,要尽量保证CRA参数要尽可能接近(一般不超过3度)

Sensor的Cra曲线

  • 镜头解析力与sensor尺寸是否匹配

镜头解析力稍大于或等于sensor尺寸,才能将清晰度更好展现,不然会导致清晰度差异及摩尔纹等问题

  • 镜头靶面与sensor是否匹配

sensor尺寸一般是按照对角线长度描述(单位inch),通常是1/3',1/2'等,镜头靶面也是如此表示,如果镜头的靶面范围无法覆盖整个sensor,那么成像出来会存在严重暗角

  • 镜头光圈及焦距

光圈越大进光量越大,摄像头模组的感光性更好,图像质量更佳(尤其是在低照度),焦距决定了成像的视场角,焦距越大,视场范围越小,适合用于观察远景。

  • 镜头的景深范围、点胶距离如何确定

景深范围是指摄像头在纵向距离上,能看清楚的最远点,和能看清楚的最近点之间的范围,它是可变的,由点胶距离决定

  • 是否支持日夜共焦

对于需要红外补光的定焦镜头,要确定镜头+ir_cut 是否是日夜共焦的。我们一般是以白天模式去进行对焦,在可见光下,ir_cut 切到滤光片下对焦,但到夜晚以后,补红外光,ir_cut切到透光片,如果此时镜头日夜不共焦,红外夜视下图像效果就是模糊的,处于虚焦状态。要保证两种状态下对焦都是清晰的,这就要保证镜头+ir_cut是日夜共焦的才可以。

  • 镜头畸变

畸变可以通过畸变校准进行修复,但在一定程度上会损失视场角,因此选择镜头时对畸变有要求的话,就要考虑选择畸变范围小的镜头。

离线调试和在线调试介绍

名称说明
离线调试不跑应用或sample出流,awTuningApp负责出流及ISP调试
在线调试跑应用或sample出流,awTuningApp只负责ISP调试

离线调试使用步骤

  • 检查调试环境,确保调试固件能支持adb/ip的连接方式
  • 设备上电后进入控制台,输入ls /dev/video*,确保有对应的video节点
  • 准备SDK环境对应的awTuningAppTigerISP
  • 准备SD卡,将awTuningApp放入卡中,插入样机。(如设备不支持SD卡,可通过adb将awTuningApp推到tmp目录)
  • 如通过adb推到tmp目录,需要先执行chmod 777 awTuningApp给应用执行权限
  • 小机端执行./awTuningApp 8848 0 &
  • PC端运行TigerISP工具,并选择对应的平台,下面的两个选项均不需勾选,点击OK

TigerISP引导界面1

  • 根据下面介绍进行填写,离线调试下如果部分参数未填对也可以连接上,但在线调试下没填对会导致连接不上并加载参数失败。

Comm Type :连接方式,支持adb、IP连接方式
Port:端口号,与小机端运行时使用的保持一致,默认为8848
Sensor:sensor名
Width:输入ISP的图像宽度
Height:输入ISP的图像高度
FPS:帧率
ISP:ISP通道号
Vich:Video通道号
Wdr Mode:是否为WDR模式,非WDR模式选择None,如果为WDR模式请选择DOL
Stitching:是否为拼接模式,仅大尺寸走拼接时需要配置

TigerISP引导界面2

  • 填写参数后进行连接,TigerISP的日志如下代表连接成功

TigerISP引导界面3

  • 点击Extra Tools中的Capture后弹出capture窗口,点击Dump即可实现预览。

TigerISP引导界面4

TigerISP引导界面5

备注
  • 连接TigerISP使用的awTuningApp需使用sdk默认编译出来
  • 如果使用adb连接,却无法跳转到连接加载界面,请在板端运行ifconfig -a,检查是否有lo的网口配置,如没有需要确认是否将这个配置裁剪了,可与sdk中默认内核配置对比确认。

在线调试使用步骤

  • 检查调试环境,确保调试固件能支持adb/ip的连接方式
  • 设备上电后进入控制台,输入ls /dev/video*,确保有对应的video节点
  • 确保小机端已运行sample或应用出流,并可以通过手机APP/PC端/屏幕等进行预览实时图像
  • 准备SDK环境对应的awTuningApp、TigerISP
  • 准备SD卡,将awTuningApp放入卡中,插入样机。(如设备不支持SD卡,可通过adbawTuningApp推到tmp目录)
  • 如通过adb推到tmp目录,需要先执行chmod 777 awTuningApp给应用执行权限
  • 小机端执行./awTuningApp 8848 1 &,注意这里传的参数与离线模式的差异
  • PC端运行TigerISP工具,并选择对应的平台,下面的两个选项均不需勾选,点击OK
  • 参数设置参考上面的离线调试介绍,在线调试设置参数必须与通路保持一致,不然会导致连接不上并加载参数失败
备注
  • 连接TigerISP使用的awTuningApp需使用sdk默认编译出来
  • 如果使用adb连接,却无法跳转到连接加载界面,请在板端运行ifconfig -a,检查是否有lo的网口配置,如没有需要确认是否将这个配置裁剪了,可与sdk中默认内核配置对比确认
  • 在线调试需严格根据应用或sample所跑的通路进行填写,不然会导致连接不上并加载参数失败,可通过cat /sys/kernel/debug/mpp/vi抓取节点确认

TigerISP引导界面6

TigerISP工具界面简介

名称说明
加载参数从PC本地选择一份ISP效果文件加载生效到板端
保存参数将当前工具下的ISP效果文件保存到PC本地
抓取寄存器抓取当前连接的sensor的寄存器配置
转换效果文件进行效果文件的不同格式转换,如bin、h、dat
图像标定打开图像客观标定对应模块
实时预览实时预览ISP处理后的YUV
白平衡统计预览白平衡统计的落点信息
编码预览预览编码处理后的码流
编码锐化预览预览编码锐化模块后的图像
ISP日志显示ISP各模块的debug信息,用于分析及调试

TigerISP功能界面1

TigerISP功能界面2

ISP log介绍及联动关系

两种联动方式介绍

ISP 有两种不同的连动关系。
ISP 的 2D 去噪、3D 去噪、色彩去噪、锐化、局部对比度、期望亮度、全局对比度、饱和度等参数都可以选择与环境亮度还是增益连动。在工具中调试这些参数时,可以看到这些参数都分成了 0~13,共 14个档位。

  • 当选择与增益连动时 1 倍增益时使用第 0 档参数,
    2 倍增益时使用第 1 档参数,
    4 倍增益时使用第 2 档参数,
    8 倍增益时使用第 3 档参数,
    如 3 倍增益时,会使用第 1档与第2档参数进行线性插值,如此类推。
    通过ISP LOG中的TGAIN的值可以得知当前处于什么增益下(TGAIN 的值以 256 为 1 倍)。

  • 当选择与环境亮度连动时 系统会将 AE Table 分为 350 档,通过打印 lum_idx 的值来决定使用的档位
    lum_idx 处于 0~25 之间时,使用第 0 档参数,
    lum_idx 为 50 时,使用第 1 档参数,
    lum_idx 为 75 时,使用第 2 档参数,
    lum_idx 为 100 时,使用第 3 档参数,
    lum_idx 为40时,会使用第 1档与第2档参数进行线性插值,如此类推。
    通过ISP LOG中的lum_idx的值可以得知当前处于什么档位下。

联动界面介绍

ISP Log的打印方式介绍

如果想打印ISP Log,有以下方式可以实现

TigerISP调试工具

通过在线/离线连接上调试工具,点击Extra Tools中的Log,再点击Dump

ISP_LOG介绍

修改效果参数打印等级

通过在线/离线连接上调试工具,修改效果文件里面的Log Param,打印会从串口或CMD界面输出。

ISP_Log介绍1

如果不想连接调试工具,也可以在效果文件里面修改打印,打印会从串口打印出来。

ISP_Log介绍2

打印等级参考下述定义

#define ISP_LOG_AE				(1 << 0)	//0x1
#define ISP_LOG_AWB (1 << 1) //0x2
#define ISP_LOG_AF (1 << 2) //0x4
#define ISP_LOG_ISO (1 << 3) //0x8
#define ISP_LOG_GAMMA (1 << 4) //0x10
#define ISP_LOG_COLOR_MATRIX (1 << 5) //0x20
#define ISP_LOG_AFS (1 << 6) //0x40
#define ISP_LOG_MOTION_DETECT (1 << 7) //0x80
#define ISP_LOG_GAIN_OFFSET (1 << 8) //0x100
#define ISP_LOG_DEFOG (1 << 9) //0x200
#define ISP_LOG_LSC (1 << 10) //0x400
#define ISP_LOG_GTM (1 << 11) //0x800
#define ISP_LOG_PLTM (1 << 12) //0x1000

ISP各模块简介及pipeline

名称说明
BLC提供 Sensor 相关黑电平矫正
AFS自动曝光下,保持曝光在 10ms(50Hz)或 8.33ms(60Hz)的整数倍以达到防工频闪烁的效果
AE硬件输出自动曝光的统计值信息,软件根据统计信息调节 Sensor 以实现自动曝光的功能
AF硬件输出自动对焦的图像清晰度评价信息统计,软件根据统计信息调节 VCM(对焦马达)以实现自动对焦的功能
WB硬件输出白平衡统计信息,软件根据统计信息调节 R/G/B 增益以实现自动白平衡的功能
AWB软件自动白平衡算法开关
Hist硬件输出直方图统计信息,软件用于辅助 AE、DRC 的计算
WDR SplitSensor 内部合成宽动态图像,将 Sensor 输出的较多的 bit 位宽数据拆分成较少 bit 位宽的数据,使拆分后的数据能被 ISP 处理
WDR Stitch对 Sensor 输出的多帧合成为一帧宽动态图像
DPC提供对静态坏点和动态坏点的检测和矫正功能
CTC消除由于 Sensor 和镜头的 CRA 不匹配导致的 Cross Talk 噪声
GCA全局色差矫正,用于矫正镜头引入的轴向色差与横向色差
LCA局部色差矫正,用于矫正镜头引入的轴向色差与横向色差
NRPISP 内部预 Gamma 模块,提高降噪、锐化性能
D2D(Denoise)空域降噪
D3D(TDNF)时域降噪,去除图像高斯噪声,使图像更平滑
Dig-GainISP 分通道的数字增益
LSC、MSC用于镜头阴影矫正
PLTM局部色调映射,可提升暗部动态范围
CFA(Demosaic)将 Bayer 格式的 Raw 图像转化到 RGB 图像,优化 CFA 参数可减弱密集纹理区因去马赛克导致的摩尔纹现象。
Sharpness图像锐化,提高图像清晰度
CCM通过 3x3 的矩阵和矢量偏移量完成颜色空间的线性矫正
CNR色彩降噪
DRC硬件动态范围控制模块
GTM全局色调映射软件算法
Gamma分 R/G/B 三通道调整图像亮度
CEM利用 9x17x17 大小的 3D LUT 实现颜色调整操作
CSC通过标准的 3x3 的矩阵和矢量偏移量将输入的 RGB 图像转化为 YUV
Encpp编码器 Yuv Sharp
Enc 3Dnr编码器时域降噪
Enc 2Dnr编码器空域降噪

ISP_PipeLine介绍

客观效果调试流程

图像调试需要完成哪些基础模块校准

客观校准是图像调试的基础,当sensor或镜头是第一次使用,需要完成客观校准后,才能得到一份初版效果,用于后续主观效果调试

名称说明
BLC黑电平校准,以确保图像的动态范围从真正的黑色开始
AWB白平衡校准,以确保图像在不同光源下白色还原正常
MSC/LSC均匀度校准,以确保图像使在整个视场中具有相同的亮度色度水平
CCM色彩校准,以确保图像色彩的准确性
D2D噪声校准,以确保ISP区分噪声及细节轮廓准确性
备注
  • sensor第一次使用,需要将上述的所有校准项完成一轮校准
  • sensor保持不变,只更换了镜头,只需要重新校准AWB、MSC/LSC、CCM模块即可
  • 校准顺序建议按照BLC -> AWB -> MSC/LSC -> CCM -> D2D进行
  • MSC、LSC都是用于亮度色度均匀性校准,通常情况下只需要选择其中一种完成校准即可

BLC校准流程介绍

原理简介

sensor输出数据中包含了OB(optical black)data pedestal部分,需要去除,以免影响画面暗部表现。去除的方法是每个像素的R、Gr、Gb、B都减去一个值

标定过程

1.使用镜头盖或其他工具遮黑sensor,确保sensor处于全黑的环境。
2.离线连接上调试工具,并按照下面流程将ISP模块全部关闭并设置为手动曝光
3.点击ISP Test,在ByPass Setting模块,点击All Operation中的disable,关闭所有ISP模块,点击write,使修改生效

BLC标定流程1

4.点击ISP Test,在Test Attr模块,将TestMode设置为Mannual Mode,并修改Exposure Line为16(16代表一行曝光行),将Gain修改为256(256代表一倍增益),点击write,使修改生效

BLC标定流程2

5.点击Calibration,再点击BLC按钮,跳出BLC标定界面后,修改预览格式为BAYER格式(请根据实际sensor输出的拜尔格式进行选择),点击Dump直到预览界面出现图像后点击Stop

BLC标定流程3

6.在BLC标定界面,选择对应的Gain,如当前使用的Gain为256(以256为一倍增益),那么应该选择Gain为0;这里的Gain与1.5.5中介绍的联动策略的一致,0代表1倍增益,1代表2倍增益,2代表4倍增益
7.点击Calc进行标定计算,计算完成后各通道均会得到一个BLC值。

BLC标定流程4

8.重新回到第4个步骤,将Gain修改为512(二倍增益),再依次进行5~7的步骤
9.按照上述步骤,依次完成各增益下的BLC校准,最后点击Apply将校准值写入生效

备注
  • 通常情况下,现在主流的CMOS sensor都是自己把black level处理好,然后加上一个pedestal,所以sensor设定的black level一般是准确的。因此可以与sensor原厂沟通确认BLC值需要设置为多少,如果sensor原厂确认的BLC值与BLC标定得到的BLC值差异较大,请与sensor原厂确认sensor配置。

AWB校准流程介绍

原理简介

人眼具有独特的适应性,在一定的色温范围内,人眼无法察觉白色物体偏色,而摄像头对白色的响应却随着环境色温变化而变化。这就需要有AWB(自动白平衡),使得摄像头拍摄的图像更接近人眼的视觉习惯。在实际操作中,是在不同色温下给予sensor输出值不同的RgainBgain。而为了准确判断出当前的色温,需要事先标定出不同色温下的RGB响应特性

标定过程

1.将设备放入灯箱中,让设备镜头对向灯箱壁

AWB标定流程1

2.离线连接上调试工具,点击ISP Test,在ByPass Setting模块,点击All Operation中的disable后,将BLC Enable,关闭除BLC外的所有ISP模块,点击write,使修改生效

AWB标定流程2

3.点击Calibration,再点击WB按钮,跳出AWB标定界面,打开灯箱并选择为D65光源
4.点击WB标定界面的Get Exp(这个按钮会自动将亮度调整为合适校准的亮度),待亮度调整正常后,右击下面6500K的色温点,在弹出的界面点击Calc
5.分别切换灯箱光源为Tl84(4000K)、CWF(4200K)、A(2800K)、H(2200K),重复上面第四个步骤,完成上述几种光源的校准

AWB标定流程3

6.在空白区域单击鼠标右键添加新的色温点,按照曲线分别添加4800K、5500K两个色温点,添加的色温点要基本符合曲线走向(如下图AWB标定流程6所示)

AWB标定流程4

AWB标定流程5

AWB标定流程6

7.点击Apply将校准值写入生效

备注
  • 如灯箱有5000K、7500K的标准光源,建议按照标准光源做校准,不需要手动添加
  • 标定完白平衡如何确认标定的准确性及如何做微调?
  • 1.校准完白平衡后,将AE、AWB、WB、NRP、BLC打开
  • 2.点击Extra Tools,再点击3A Stat按钮,跳出3A Stat界面,点击Dump
  • 3.分别确认D65、Tl84、CWF、A、H光源下的落点是否落入标定的光源框内并基本在五角星区域,如有少许偏差,可手动微调光源框到落点聚集的区域

AWB校验界面

MSC校准流程介绍

原理简介

光通过镜头后,光强分布近似与光线角度的余弦的4次方成正比,画面中央比四周要亮(Lens shading)。其次,IR filter对不同入射角度的光,截止频率不一样,画面中央与四周在色彩上也会不一致(Color shading)。ISPLSCMSC模块是根据像素在图像中所处的位置,给予相应的增益。LSC模块增益与像素离图像中心的距离有关,所以补偿增益呈同心圆分布。MSC模块增益受矩阵分配,可用于shading不中心对称的场景

标定过程

1.将设备放入灯箱中,将设备镜头盖上毛玻璃。

MSC标定流程1

2.离线连接上调试工具,点击ISP Test,在ByPass Setting模块,点击All Operation中的disable后,将BLC Enable,关闭除BLC外的所有ISP模块,点击write,使修改生效

MSC标定流程2

3.点击Calibration,再点击MSC按钮,跳出MSC标定界面,打开灯箱并选择为H光源(2800K)
4.点击Clean All,清除旧的MSC参数
5.选择Temperature为2200,点击Get Exp,(这个按钮会自动将亮度调整为合适校准的亮度),待亮度调整正常后,点击Calc,完成该光源的校准,然后将VCM改成Max Code后,再点击一次Calc

MSC标定流程3

6.分别切换灯箱光源为Tl84(4000K)、D65(6500K),重复上面第五个步骤,完成上述几种光源的校准后,点击Apply将校准值写入生效

备注
  • MSC校准必须在sensor输出原始分辨率上进行
  • 由于V线大部分产品均为定焦,因此VCMMin/Max Code使用同一组图片标定即可,如果是变焦产品,VCM需要分别校准
  • 建议2200K与2800K使用A光源进行校准,4000K-5500K使用Tl84光源进行校准,5500K-6500K使用D65光源进行校准
  • 如校准的强度不够或太强,可通过调整Compensation的值修改校准强度
  • LSC、MSC都是用于做画面均匀度补偿,LSC是以画面中心做同心圆补偿,MSC是将画面分块进行补偿,一般只需要使用其中一种补偿方式即可。

LSC校准流程介绍

原理简介

光通过镜头后,光强分布近似与光线角度的余弦的4次方成正比,画面中央比四周要亮(Lens shading)。其次,IR filter对不同入射角度的光,截止频率不一样,画面中央与四周在色彩上也会不一致(Color shading)。ISPLSCMSC模块是根据像素在图像中所处的位置,给予相应的增益。LSC模块增益与像素离图像中心的距离有关,所以补偿增益呈同心圆分布。MSC模块增益受矩阵分配,可用于shading不中心对称的场景

标定过程

1.将设备放入灯箱中,将设备镜头盖上毛玻璃。

LSC标定流程1

2.离线连接上调试工具,点击ISP Test,在ByPass Setting模块,点击All Operation中的disable后,将BLC Enable,关闭除BLC外的所有ISP模块,点击write,使修改生效

LSC标定流程2

3.点击Calibration,再点击LSC按钮,跳出LSC标定界面,打开灯箱并选择为H光源(2800K)
4.点击Clean All,清除旧的LSC参数
5.选择Temperature为2200,点击Get Exp,(这个按钮会自动将亮度调整为合适校准的亮度),待亮度调整正常后,点击Calc,完成该光源的校准,然后将VCM改成Max Code后,再点击一次Calc

LSC标定流程3

6.分别切换灯箱光源为Tl84(4000K)、D65(6500K),重复上面第五个步骤,完成上述几种光源的校准后,点击Apply将校准值写入生效

备注
  • LSC校准必须在sensor输出原始分辨率上进行
  • 由于V线大部分产品均为定焦,因此VCMMin/Max Code使用同一组图片标定即可,如果是变焦产品,VCM需要分别校准
  • 建议2200K与2800K使用A光源进行校准,4000K-5500K使用Tl84光源进行校准,5500K-6500K使用D65光源进行校准
  • 如校准的强度不够或太强,可通过调整Compensation的值修改校准强度
  • LSC、MSC都是用于做画面均匀度补偿,LSC是以画面中心做同心圆补偿,MSC是将画面分块进行补偿,一般只需要使用其中一种补偿方式即可。

CCM校准流程介绍

原理简介

sensor对RGB的响应与人眼对RGB的响应并不一致,通过本项调试,可将sensor对RGB的响应调到与人眼接近,实现准确的色彩还原。在实际操作中,是将sensor输出的色彩空间通过一个色彩矩阵转化到sRGB色彩空间。

标定过程

1.将设备放入灯箱中,让设备镜头对向24色色卡,保证色卡占据画面大小 3/4 左右。
2.离线连接上调试工具,点击ISP Test,在ByPass Setting模块,点击All Operation中的disable后,将BLC、AWB、WB、NRP、MSC/LSC Enable,点击write,使修改生效

CCM标定流程2

3.点击Calibration,再点击CCM按钮,跳出CCM标定界面,打开灯箱并选择为D65光源(6500K),点击Dump预览到画面后Stop,右击鼠标将24色色卡框选上,点击Mark As,再点击All 24 Blocks,会进行24色块的标记。

CCM标定流程3

4.调整24个框的位置及大小,使其能完整落在24色色卡的每个色块上面
5.选择Temperature为6500,将Use Gamma设置为TrueGamma File选择TigerISP文件夹中的\data\gamma_sample.txt
6.将Use RGB Ref.设置为TrueRGB File选择TigerISP文件夹中的\data\rgb_ref_nrp_*.txt,其中*的数字选的越大,校准出来的色彩饱和度越高,建议D65、Tl84光源选择rgb_ref_nrp_90.txt,A光源选择rgb_ref_nrp_80.txt
7.点击Get Exp,(这个按钮会自动将亮度调整为合适校准的亮度),待亮度调整正常后,点击Calc,完成该光源的校准

CCM标定流程4

8.分别切换灯箱光源为Tl84(4000K)、A(2800K),重复上面第五~第七步骤,完成上述几种光源的校准后,点击Apply将校准值写入生效

备注
  • 校准时标记24色色卡,必须确保每个框落入对应的色块,不能落出去或者出现一个框框住两个色块的情况

D2D校准流程介绍

原理简介

由于不同Sensor的噪声水平差异,在不同增益下通过标定,可以更好的区分噪声及细节边缘。

标定过程

D2D

1.将设备放入灯箱中,让设备镜头对向灰阶卡,保证灰阶卡占据画面大小 3/4 左右。

D2D标定流程1

2.离线连接上调试工具,点击ISP Test,在ByPass Setting模块,点击All Operation中的disable后,将BLC、AWB、WB、NRP、DGain Enable,点击write,使修改生效

D2D标定流程2

3.点击Calibration,再点击D2D按钮,跳出D2D标定界面,打开灯箱并选择为D65光源(6500K),将需要标定的档位勾选上(建议勾选0~7即可,其中 0 代表 1倍增益,1 代表 2 倍增益,2 代表 4 倍增益,以此类推),将Mode设置为D2D,点击Dump预览到画面后Stop,手动调整曝光行数 Exposure Line,使得在一倍增益下灰阶最亮灰块的亮度Y达到 220左右。
4.右击鼠标将灰阶卡最亮灰块选上,点击Mark As,再点击Gray Block 0,将第一个灰块标记上,依次勾选其他灰块并做好标记。

D2D标定流程3

D2D标定流程4

5.点击calc,完成各档位下的D2D标定
6.标定结束后,在 ISP Test->ByPass Setting 点击Read PaneDenoise 模块和 CNR 模块(两者都为 D2D 降噪模块)会自动打开

D2D标定流程5

7.在 BDNF 点击ReadD2D 降噪曲线会发生变化,点击Apply同步数据

D2D标定流程6

8.在 Dynamic Tuning->Denoise 点击Read PaneDenoise 参数发生变化,点击Write Pane同步数据

9.最后在 Start 菜单栏点击Save dat File备份 D2D 标定后的dat 文件

D2D标定流程7

D3D

1.将设备放入灯箱中,让设备镜头对向灰阶卡,保证灰阶卡占据画面大小 3/4 左右。

D3D标定流程1

2.离线连接上调试工具,点击ISP Test,在ByPass Setting模块,点击All Operation中的disable后,将BLC、AWB、WB、NRP、DGain Enable,点击write,使修改生效

D3D标定流程2

3.点击Calibration,再点击D2D按钮,跳出D2D标定界面,打开灯箱并选择为D65光源(6500K),将需要标定的档位勾选上(建议勾选0~7即可,其中 0 代表 1倍增益,1 代表 2 倍增益,2 代表 4 倍增益,以此类推),将Mode设置为D3D,点击Dump预览到画面后Stop,手动调整曝光行数 Exposure Line,使得在一倍增益下灰阶卡最亮灰块的亮度 Y 达到 220左右。

4.右击鼠标将灰阶卡最亮灰块选上,点击Mark As,再点击Gray Block 0,将第一个灰块标记上,注意接下来需要框选最亮灰块和次亮灰块的边界并标记为 1,之后以此类推依次框选灰块边界,最后框选灰阶卡最暗色块。注意框选灰块边界时要保证灰块边界位于中间,即两边不同灰块面积基本相等。

D3D标定流程3

5.点击calc,完成各档位下的D3D标定

6.标定结束后,在 ISP Test->ByPass Setting 点击Read PaneTDNF 模块会自动打开

D3D标定流程4

7.在 TDNF 点击ReadD3D 降噪曲线会发生变化,点击Apply同步数据

D3D标定流程5

8.在 Dynamic Tuning->TDNF 点击Read PaneTDNF 参数发生变化,点击Write Pane同步数据

9.最后在 Start 菜单栏点击Save dat File备份 D3D 标定后的dat 文件

D3D标定流程6

备注
  • 新sensor需要进行D2D校准,如果是旧sensor只更换了镜头,那么不需要重新进行D2D校准
  • D2D校准时标记灰阶时,必须确保每个框落入对应的灰阶,不能落出去或者出现一个框框住两个灰阶的情况;D3D校准时,注意框选时要保证灰块边界位于中间,即两边不同灰块面积基本相等
  • 需确保标记的Block0为灰阶卡最亮灰块
  • D2D、D3D校准耗时较长,请确保电脑电量充足,避免标定失败

主观效果调试流程

整体调图思路介绍

  • 进行主观效果调试前,确保已完成客观效果调试;如使用的sensor没有参考的效果文件,可使用同sensor原厂的效果配置作为初版效果
  • 图像效果调试应基本遵循亮度->对比度->色彩->清晰度的调试顺序,调试场景应包含白天户外、室内、低照度等多种场景,确保覆盖所有照度场景
  • 亮度是图像效果的基础,当增益一定的情况下,曝光时间越长,能使得sensor接收到更多细节,但曝光时间变长,同时也容易导致运动拖影、亮区过曝等副作用,因此曝光调试应尽量对齐竞品,对比度在一定程度上会影响亮度调试时的判断,因此建议调试亮度时可以先关闭对比度模块将过曝区域调到与竞品对齐
  • 对比度影响整体图像感官并在一定程度上会影响细节清晰度,适度调节对比度使图像动态范围更佳,并能提升细节的局部对比度。
  • 色彩分为白平衡和颜色,白平衡作用于全局,从效果上是整体图像偏色,而颜色作用于局部,从效果上是某种颜色与真实颜色的偏差。两者搭配使用,能让色彩表现更佳。
  • 清晰度分为去噪和锐化,如果噪声抹除过多,会导致细节在后期的锐化无法凸显出来,如果锐化强度过低,也会导致图像经过编码以后无法展现出来,因此当遇到清晰度问题时,先需要确认是哪里导致的问题,才能从根源解决。
备注
  • 推荐使用在线调试,能确保调试效果与应用最终展示效果一致

曝光基础调试思路介绍

模块参数介绍

与曝光相关的模块如下

AE参数介绍1

AE参数介绍2

调试思路介绍

如何提高或降低亮度值

Step1:调试AE前,先确定好曝光表

曝光表代表了ISP的曝光索引,记录了最小曝光最小增益到最大曝光最大增益的索引值,AE根据当前场景计算出当前曝光增益下的亮度值与我们的预期亮度进行对比,如果偏暗,就向上索引曝光表,提高曝光增益,如果偏亮,就向下索引曝光表,降低曝光增益

名称说明
Min Exp代表当前行的最小曝光值,22000代表1/22000秒
Max Exp代表当前行的最大曝光值,20代表1/20秒
Min Gain代表当前行的最小增益值,256代表1倍增益
Max Gain代表当前行的最大增益值

AE参数介绍3

下面举例说明:\

  • 按照上图的曝光表,如果当前画面曝光值处于1/30秒,1倍增益的情况下,画面亮度偏暗\
  • 这个时候AE会按照第一行索引,继续提高曝光直到1/20秒,1倍增益,如果这时候的画面仍然偏暗\
  • AE就开始转到第二行,开始提高增益值,当提升到1/20秒,5倍增益(1280)后,画面亮度与期望亮度一致\

Step2: 调整Dynamic Tuning中的AEAE通常是根据Lum联动,先根据当前环境下的日志确认当前跑的Lum idx,如下图所示,打开loglum_idx为177(6.08X),对应Dynamic Tuning中的AE中的第6~7档参数

AE参数介绍4

Step3: 如果希望将亮度降低,降低对应档位的Target

AE参数介绍5

AE参数修改示例1

如何优化暗部偏暗死黑

Step1:先关闭GTM、DRC这两个对比度相关模块,确认是否这里导致的暗部偏暗,如果排查是这里导致,那么参考下一章对比度模块继续调试优化
Step2:与对比机对比过曝区域,如果我们的过曝区域比对比机的大,那么可以适当降低对应档位的Target
Step3:如果暗部仍然不够亮,可以适当提高PLTM强度来提高暗部亮度解决,请参考下一章对比度模块继续调试优化

如何排查亮度闪烁问题

Step1:先关闭GTM、DRC、PLTM这三个对比度相关模块,确认是否还有闪烁,如果没有闪烁,请联系FAE确认
Step2:关闭AE改成手动曝光,确认是否还存在闪烁
Step3:如果确认是AE模块导致闪烁,可先通过调整Frames Delay尝试改善,找Sensor原厂确认曝光增益的延迟生效帧数,并填写进去
Step4:调整Dynamic Tuning中的AE 对应档位的Speed、Tolerance,使得收敛速度变慢,AE容忍度变高
Step5:检查曝光表是否有问题,AE target设置是否平滑
Step6:检查 Sensor 驱动的 HTS、VTS 和 PCLK 的值是否正确
Step7:检查曝光函数是否使用 Sensor 的 group hold/group write 功能。如果 Sensor 支持,一定要使用

备注
  • 曝光表设置务必要准守每行只调整曝光或增益的其中一个,且上一行的曝光增益最大值是下一行的曝光增益最小值
  • 调试AE target值后无变化,可以将AE重新开关,使AE能正常收敛到最佳状态

对比度基础调试思路介绍

模块参数介绍

与对比度相关的模块如下

GTM参数介绍1

GTM参数介绍2

Pltm参数介绍1

Pltm参数介绍2

调试思路介绍

如何提高画面对比度

GTM Type 5 为例,

Step1:关闭PLTM,确认是否PLTM强度太大导致画面对比度不够,如果是PLTM导致,那么可以适当降低PLTM强度
Step2:如果不是PLTM影响,将Dynamic Tuning中的GTM对应档位的Gain、EQ Ratio值写大,可提升画面对比度

修改对比度示例1

修改对比度示例2

Step3:如果认为GTM将亮度上拉导致部分区域过曝,可以降低Black、White,使亮部上拉强度降低

修改对比度示例3

修改对比度示例4

如何提升暗部亮度

Step1:关闭GTM、DRC模块,确认是否GTM模块将暗部压暗
Step2:与对比机对比过曝区域,如果对比机的过曝区域比我们的大,那么可以适当提高对应档位的AE Target值,提高曝光增益
Step3:如果确认上述原因无法改善暗部亮度,先通过Log确认当前环境下的Pltm强度,如果当前Pltm强度小于Max Stren Clip,那么可以通过提高Auto Stren来提高暗部亮度

修改对比度示例5

修改对比度示例6

修改对比度示例7

Step4:如果当前的Pltm强度等于Max Stren Clip,那么需要将Max Stren Clip提高来放开对PLTM强度的限制

修改对比度示例8

备注
  • GTM Type建议设置为4/5,其余的不建议使用,设置为4的话,需要占用一路Vipp节点
  • pltm强度不建议开太强,画面提亮太多易导致噪声偏大,画面对比度变低

色彩基础调试思路介绍

模块参数介绍

与颜色相关的模块如下:

AWB为白平衡模块,作用于全局,主要作用是让白色还原为白色

awb参数介绍1

awb参数介绍2

CEM为颜色模块,作用于HSV,可单独修改某个颜色的色调、饱和度、亮度,通常可用于提高绿植饱和度、降低人像肤色饱和度等

cem参数介绍1

cem参数介绍2

cem参数介绍3

cem参数介绍4

调试思路介绍

如何排查偏色问题

Step1:确保当前镜头搭配Sensor已完成AWB标定,Dynamic Tuning中的AWB模块参数正常,建议按照256设置,待白平衡正常后再调整偏好色。
Step2:打开log,检查awb log是否正常,如下图Outlier Light num为339,说明有339个落点块未被统计到

色彩调试示例1

Step3:打开3A Stat后,点击dump,检查当前场景的落点信息

色彩调试示例2

Step4:如落点基本未落入光源框中,需要手动移动光源框到大部分落点所在区域(或新增光源框框柱对应落点)

色彩调试示例3

色彩调试示例4

Step5:如果落点基本能落入光源框中,仍然有偏色现象,关闭MSC/LSC模块,确认是否MSC/LSC模块对各通道的补偿差异导致色彩异常,如是,请重新校准MSC

Step6:关闭CEM模块,确认CEM曲线是否对低饱和度提升过大导致色彩异常,如关闭CEM后,整体色彩基本正常但整体饱和度偏低

Step7:按照下图方式调整CEM曲线解决,如果是刚开始调试,CEM曲线建议先Reset All并在修改后Save曲线(曲线不一定完全按照下图设置,需根据实际场景在合适的位置做饱和度下拉)

色彩调试示例6

色彩调试示例7

如何提升整体饱和度

Step1:调整Dynamic Tuning中的CEM,将对应档位的参数提高,即可提高整体饱和度

饱和度调试示例1

饱和度调试示例2

如何提升绿色饱和度

Step1:确认整体饱和度是否与竞品接近,如果整理饱和度偏低,可以先提高Dynamic Tuning中的CEM的饱和度值
Step2:如果只是绿色饱和度偏低,可通过调整CEM曲线来优化,如果是刚开始调试,CEM曲线建议先Reset All并在修改后Save曲线

饱和度调试示例3

饱和度调试示例4

如何优化肤色问题

在初步完成标定及主观调试后,由于CCM并无法将每种色彩完全还原准确,这些差异经过了CEM色彩增强后,会比较明显,比如肤色。
肤色会存在的问题主要有肤色过重(饱和度偏高)、肤色偏红、肤色偏黄绿等,针对此类问题,可参考下面优化步骤进行修改。

Step1:与竞品对齐肤色饱和度,如果整体饱和度偏高,先降低Dynamic Tuning中的CEM的饱和度值,如果降低后肤色仍然偏重,通过调整cem曲线来改善

Step2:人脸饱和度大致可按照下图曲线进行设置,如果肤色饱和度偏低,那么中间这条曲线可往回拉

人脸调试示例1

Step3:修改完人脸饱和度后,如果人脸有偏黄绿的问题,可调整肤色色调,使其往红色方向偏移

人脸调试示例2

如何优化暗部偏色

Step1:关闭PLTM模块,检查目标区域是否有明显偏色,如果并非PLTM拉亮导致暗部偏色,那么建议可以通过CEM模块,降低暗部饱和度的方式进行抑制

暗部偏色示例1

Step2PLTM拉升暗部亮度时,同时也会放大暗部的色噪,如果确认是PLTM导致,先关闭PLTM后,检查暗部区域亮度均值,估算DSC的亮度阈值范围,如本图的暗部亮度均值为28(8bit)
Step3:由于DSC亮度范围为12bit,所以换算后亮度值为28*16=448,那么可以将亮度阈值定在448左右,调试时适当偏移
Step4:将亮度的低阈值定在466,那么图像中亮度小于466的区域暗部饱和度抑制程度最大,处于466-768范围内抑制程度逐渐衰减,大于768的区域不受抑制,并适当调整Ratio直到调整前后抑制效果明显,可以较好地改善偏色现象

暗部偏色示例2

暗部偏色示例3

如何修改白平衡统计窗口大小

针对行车类产品或户外摄像头设备,可能会存在上半部分蓝天区域被误纳入白平衡统计,导致白平衡异常,画面偏黄,针对此类问题,可以通过修改白平衡统计窗口大小,将白平衡统计改为只统计下半部分图像来优化此类问题
统计窗口是将全图坐标归一化到[-1000,1000],那么如果想让awb只计算画面的下半部分,可以这样修改,使白平衡只针对画面下半部分计算。

isp_gen->awb_settings.awb_coor.y1 = 0;

修改白平衡统计窗口示例1

修改白平衡统计窗口示例2

如何优化混淆色

为什么会出现白平衡混淆色?
由于当前主流的白平衡算法都是使用灰块统计的方式,有部分特殊场景(如蓝天、肤色、绿植、黄土地等),容易被判断为灰块进行收白,从而导致白平衡异常
通常混淆色会导致的颜色异常包含有:
蓝天 - 大面积蓝天会被判定为高色温,导致蓝天收白,导致白平衡严重偏黄
肤色 - 大面积肤色会被判定为中色温,在室内正常日光灯下会导致轻微偏蓝
绿植 - 大面积绿植如果落入统计框,会导致白平衡偏紫
黄土地 - 大面积黄土地会被判定为低色温,导致图像偏蓝

如何优化白平衡混淆色?
Step1:降低对应光源框的range,通常混淆色与我们标定的色温标准落点会有一定偏差,降低range,可以一定程度上将这些混淆色剔除,避免纳入白平衡收白的落点中
Step2:如果是大面积绿植导致偏色,还可以通过调整Green Zone来优化,此值越小,绿植对白平衡的影响会降低,但如果白平衡标定数据不够准确或此值写的太小,可能会导致图像偏绿。

白平衡混淆色调试1

Step3:除上述的修改方案外,如果检查awb落点落入了多个色温下,可以将混淆色对应的色温的权重写小,来减小混淆色对整体白平衡的影响
Step4:如果是大面积蓝天场景导致偏色,还可以修改白平衡统计窗口,将白平衡统计改为只统计下半部分图像来优化

备注
  • CEM曲线修改后请保存曲线,避免后面关闭工具后加载参数无法查看
  • CEM曲线修改要相对平滑,避免色彩过渡不均匀

清晰度基础调试思路介绍

模块参数介绍

与清晰度相关的模块如下:

去噪参数介绍

DPC模块用于去除sensor坏点,去坏点强度太强容易影响清晰度,需要均衡调试

DPC参数介绍

Denoise模块作用于空域去噪,强度过大易导致清晰度变差

Denoise参数介绍1

Denoise参数介绍2

TDNF模块作用于时域去噪,强度过大易导致拖影问题

TDNF参数介绍1

TDNF参数介绍2

TDNF参数介绍3

锐化参数介绍

Sharpness模块用于提升图像锐化强度,增强细节体现,锐化阈值及强度需要把控好,避免黑白边过强或锐出噪声等问题(Encpp-Sharp参数与Sharpness基本一致,建议两级锐化都需要打开使用)

Sharp参数介绍1

Sharp参数介绍2

Sharp参数介绍3

Sharp参数介绍4

备注
  • V821的D2D模块 LYR3 DNR YRatio不需要进行调试

调试思路介绍

如何提升图像清晰度

Step1:由于IPC、CDR等编码产品,画质效果与编码有紧密的关系,在调试清晰度前,需要对比竞品将编码配置调整好,如码率、QP等,如果对清晰度要求较高,建议关闭编码2D、3D模块(通过应用接口设置)
Step2:确认好机器对焦准确,没有明显虚焦,如果存在虚焦,需要确认镜头底座与板子之间是否存在缝隙,尝试更换镜头或扭紧螺丝
Step3:分别关闭Denoise、DPC模块,确认是否去坏点强度过大或D2D强度过大导致细节损失(关闭后建议开关一下TDNF,使得画面细节重新收敛)
Step4:如果关闭后,细节有明显提升,可降低对应档位DPC去坏点强度,直到开始出现坏点,再降低D2D强度,直到运动区域开始出现明显噪声

清晰度调试示例1

Step5:如果排除去噪模块影响,可通过两级锐化来提高清晰度

清晰度调试示例2

清晰度调试示例3

清晰度调试示例2

如何去除噪声

Step1:如需要去除运动噪声,比如手臂挥动、人像走动出现的噪声,通过提高Denoise去噪强度解决
Step2:如画面中存在跳动噪声,需要提高TDNF去噪强度解决
Step3:如果画面中存在坏点,可通过DPC模块去除
Step4:如果静止画面存在噪声,需要依次排除是哪个模块引入噪声,先关闭Sharpness、Encpp确认是否锐化引入噪声,如是,那么需要通过调整锐化阈值,避免低频噪声被锐化出来
Step5:如果不是锐化出来的噪声,可关闭PLTM、GTM模块等确认是否其他亮度增益模块拉出噪声
Step6:低照度环境下,通过降低亮度可以减少噪声出现

如何优化拖影问题

Step1:连接调试工具,关闭TDNF模块,如果拖影消失,说明拖影为ISP引入。关闭TDNF会导致画面噪声闪烁,为正常现象
Step2如确认是ISP导致,先尝试降低D3D模块运动降噪强度,将SS MV DNRLS MV DNR的强度设置为0

拖影调试示例1

Step3:如果仍然存在拖影,可再继续降低D3D整体去噪强度,直到画面出现轻微噪声闪烁为止

拖影调试示例2

Step4:如果不是ISP导致,请抓取VE节点确认编码3D是否打开,如有打开可关闭再确认效果

拖影调试示例3

画质升级调试方法

介绍

最新画质升级成果包含VE及ISP两部分。VE模块更新了码控策略,在IPC、CDR等编码产品上,能降低码率并提升图像清晰度及细节。ISP上新增了联动参数,可以更准确的区分出噪声区域和平坦区域、运动区域和静止区域,在保留细节的同时能更准确的去除噪声。

ISP调试风格适配

由于新增的联动功能,能提高运动及噪声区域的去噪强度,因此如果按照原有的D2D去噪强度,会导致降噪强度过大,导致出现拖影、细节丢失的情况。在使用画质升级的配置后,需要按照下述步骤适配ISP及VE参数,以达到最佳效果。

Step1:请先确认当前环境是否已完成画质升级,V821 SDK1.0及以上版本都已支持,V85x如需要升级,需要先升级至SDK1.2,再联系我们提供补丁升级。

Step2:编码配置中,使用新版VBR策略,并打开RegionLink功能,请通过抓取VE节点确认是否开启成功。

画质升级ISP调试适配1

画质升级ISP调试适配2

Step3:ISP效果参数中,将BDNF中的MSC CMP Ratio改为31,将TDNF中的MSC CMP Ratio改为0。

画质升级ISP调试适配3

画质升级ISP调试适配4

Step4:ISP效果参数中的Dynamic Tuning,将Denoise中的降噪强度调整为原有的1/16,适当降低TDNF的降噪强度,直到没有跳动噪声即可。

画质升级ISP调试适配5

画质升级ISP调试适配6

FAQ

如何使用或关闭降帧策略

降帧策略通常在低照度下生效,通过延长曝光时间来提升画面亮度和信噪比,下面简单介绍降帧策略的使用方法

Step1:确认 Sensor 的 VTS寄存器

自动降帧示例1

Step2:在 sensor_s_exp_gain 函数中检查当前设置的曝光时间是否超过当前帧率对应的 VTS,如果超过则动态调整 VTS 来延长曝光时间,如果没有则不需要调整VTS

static int sensor_s_exp_gain(struct v4l2_subdev *sd, struct sensor_exp_gain *exp_gain)
{
struct sensor_info *info = to_state(sd);
int shutter, frame_length;
int exp_val, gain_val;
exp_val = exp_gain->exp_val;
gain_val = exp_gain->gain_val;
if (gain_val < 1 * 16)
gain_val = 16;
if (exp_val > 0xfffff)
exp_val = 0xfffff;
if (!sc3336_fps_change_flag) { // 检查是否在主动调节帧率,通过标志位或者锁互斥即可
shutter = exp_val >> 4; // SOC 曝光行(时间)是以16为1行,所以将上层传下来的曝光行除以16,换算当前实际曝光行
if (shutter > sc3336_sensor_vts - 8) { // 判断当前曝光时间是否大于当前帧率下的 VTS(“-8”只是偏移量,每个 Sensor 不一定)
frame_length = shutter + 8; // 如果大于当前帧率下的 VTS,那么意味着需要增加VTS 来达到降帧的目的,以此实现自动降帧
} else
frame_length = sc3336_sensor_vts; // 如果曝光时间未达到需要调整 VTS 来降帧的情况下,那么还是保持当前帧率需要 VTS 值即可
sensor_write(sd, 0x320f, (frame_length & 0xff));
sensor_write(sd, 0x320e, (frame_length >> 8));
}
sensor_s_exp(sd, exp_val);
sensor_s_gain(sd, gain_val);
sensor_dbg("sensor_set_gain exp = %d, %d Done!\n", gain_val, exp_val);
info->exp = exp_val;
info->gain = gain_val;
return 0;
}

Step3:调整 ISP 效果文件的最大曝光时间

ISP 效果文件中的 AE Table 用于设定当前效果的曝光表:

如图所示,Min Exp 代表最小曝光时间(倒数)—— 1/22000s,Max Exp 代表最大曝光时间(倒数)—— 1/20s,
Min Gain 代表最小增益、Max Gain 代表最大增益(均以 256 为一倍),光圈调节暂不支持,故需要设置为默认值为266;

AE 调整亮度的逻辑:第 0 档为起始档位,AE 会保持一倍增益的前提下,优先提高曝光时间来达到提升亮度的目的,曝光时间的可调范围为【1/22000s,1/20s】,如果曝光时间提高到 1/20s的状态还没有达到期望亮度,那么会开始向下顺延执行第 1 档的设定:维持曝光时间为 1/20s 的前提,开始提高增益的倍数,增益的可调范围【256,32768】(也就是 1x - 128x),以此类推,直到达到最大曝光时间和最大增益

自动降帧示例2

如果当前帧率为 20fps,则需要限制最大曝光时间为 1/20s,那么意味着 ISP 给驱动设置的最大曝光时间则不会大于 1/20s(50ms),如果有自动降帧需求,那么可以将最大曝光时间设置大于1/20s;例如设置为 1/10s :意味着最大曝光时间从 50ms 调整到 100ms,驱动发现当前曝光时间大于当前 VTS 时,便会重新调整 VTS 来降帧延长曝光时间;

自动降帧示例3

上述是通过调试工具调整曝光表,也可以通过直接修改对应 ISP 效果文件来实现自动降帧,打开效果文件并搜索 ae_table_preview,参数和工具界面的参数是一一对应的

自动降帧示例4

Step4:如果希望关闭自动降帧策略,可将效果文件的最大曝光时间改成帧率对应的曝光值,如最大帧率为20fps,那么最大曝光就是1/20s(50ms),此外也可以将驱动文件里面写VTS寄存器的动作注释

自动降帧示例5

备注
  • 如有疑问请参考《Tina_Linux_Camera_降帧_开发指南》、《sensor帧率控制及检查》

如何解决工频干扰问题

交流电的瞬时功率周期性变化,导致没有滤波电路或滤波不好的照明设备发光强度也周期性变化。使用滚动快门的图像传感器,周期性变化的光强会在画面上呈现周期性的水平亮度差异,看起来就是周期性的条纹。世界主要有50Hz和60Hz两种交流电频率,对应亮度变化周期是1/100s和1/120s。要完全解决工频闪烁,就要令曝光时间是亮度变化周期的整数倍,通过调整ISP可以优化工频干扰

以使用50Hz交流电为例说明。

Step1ISP效果参数使能AFS(Anti-Flicker)模块并打开AE logEXP_TIME是以微秒为单位的,exp_time的值应该要等于或接近10000的整数倍。

抗工频干扰示例1

Step2:若exp_time的值明显小于10000,则通过提高AE target可以提高exp_time的值,令其接近10000us,修改方法可看第4.2章节详情
Step3:若不便提高AE期望亮度,令帧率严格等于100/N(N为正整数),可以让条纹定住不动,感观上也好一点。
Step4:若exp_time的值等于或接近10000的整数倍,仍有工频闪烁,就说明sensor驱动里面的pclk、vts、hts至少其中一个值不准确,请检查sensor驱动配置并与原厂确认
Step5:若exp_time的值大于10000,但不是10000的整数倍,则可以设置flicker_type=1,令Anti-Flicker强制处于50Hz模式,或设置flicker_type=0,令Anti-Flicker处于自动检测模式,并通过改变Ratio的值让Anti-Flicker工作在50Hz模式。

抗工频干扰示例2

Step6:如果不希望通过调整效果文件,而是通过应用接口控制,可使用下述接口设置抗工频闪烁属性,模式列表如下

enum v4l2_power_line_frequency { 
V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0,
V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1,
V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2,
V4L2_CID_POWER_LINE_FREQUENCY_AUTO = 3,
};

抗工频干扰示例3

如何解决拜耳格式导致的图像问题

Bayer矩阵是图像传感器上用于捕捉彩色图像的一种滤色阵列。它的核心思想是通过排列红(R)、绿(G)、蓝(B)三种颜色滤镜,使每个像素仅捕获一种颜色信息,再通过插值算法(Demosaic)还原全彩图像。

当sensor输出raw数据的拜尔矩阵与sensor驱动设置的不一致,进行demosaic算法时,插值算法会错误计算颜色,导致图像颜色完全错误,因此在点亮sensor时,请根据sensor实际输出的拜尔格式正确填写到sensor驱动中。

图像翻转如何适配拜尔格式

如果用户使用的翻转是sensor翻转,那么需要找原厂确认翻转以后sensor输出的拜尔格式是否变化,如有变化,请确认sensor驱动是否适配翻转后的拜尔格式。适配方法请参考一号通《Tina_Linux_Sensor驱动_调试指南》中第3.2.15.2节实现。

一般sensor有自适应翻转功能,也就是在操作sensor翻转后,sensor保持输出的拜尔格式不会变化,这时候sensor驱动就不需要适配翻转后的拜耳格式,此功能请与原厂确认。

如何优化紫边问题

模块参数介绍

由于被摄物体反差较大,在高光与低光部位交界处出现的色斑的现象即为色差,常见为紫色,因此又叫紫边现象。此现象与透镜无法将各种波长的色光都聚焦在同一点有较大关系,ISP 有两个模块参与去紫边,分别是 GCALCA,去除紫边建议先做全局色差矫正

GCA校准流程介绍

Step1:离线连接上调试工具,点击ISP Test,在ByPass Setting模块,点击All Operation中的disable,关闭所有ISP模块,点击write,使修改生效
Step2:点击Calibration,再点击GCA按钮,跳出GCA标定界面

CFA校准流程1

Step3:准备GCA标定图,需要用到黑底的白圆点图,尺寸建议 A2/A1,如下图所示

普通镜头标定图示意图

畸变镜头标定图示意图

Step4:手动设置曝光、增益至合适的倍数,拖动鼠标右键框选中央区域,选择 RGB 测算,G_MAX 数值应接近最大值。

CFA校准流程4

Step5:完成 Sensor 曝光设置后,点击 Capture按钮抓取 20 帧 Raw 数据,点击Calc,工具将根据设定的参数计算出 R Param0 ~ B Param2 这 6 个参数,点击Apply使参数生效。

CFA校准流程5

主观调试方法

LCA参数介绍1

Step1:在 GCA 已标定好的前提下,物体边缘若还有紫边,可调试 LCA 参数。
Step2LCA 调试时先将校正系数设置为最强(PF/GF Correction Ratio = 1024,PF/GF CLRC Ratio = 0,PF DECR Ratio = 15)来分别调试偏绿/偏紫紫边的检测区域(Lum,Grad,CLR,PF Rshf,PF Blsp
Step3:在调试得到合适的检测区域后,可开始调试校正系数来平衡紫边去除程度及副作用(PF/GF Correction Ratio,PF/GF CLRC Ratio,PF DECR Ratio 以及两条曲线)

备注
  • 设置 Sensor 曝光、增益时需要将 TestMode 设置为 Manual Mode
  • Raw 图的尺寸、Bayer 格式确保选择正确(cat vi 节点查看相关的配置)
  • 抓取 Raw 图时,确保标定图占满整个画面,并且尽量拍到更多的白点

如何解决黑白全彩切换偏色

通常黑白全彩切换可能存在如下问题:

  • 全彩切黑白或黑白切全彩时出现紫帧
  • 黑白切全彩出现白平衡偏绿、紫帧等问题

需要优化上述问题,切换流程建议按照下述设置:
从彩色图像切换到黑白图像,一般建议先切换 ISP 效果(彩色->黑白),打开红外灯,再使能 IR-CUT,这样可以防止先使能 IR-CUT 后,摄像头会拍摄到红外光分量导致图像先变红再变黑白。
从黑白图像切换到彩色图像,一般建议先关闭红外灯(白天场景环境光较充足),关闭 IR-CUT,切换ISP 效果(黑白->彩色)

如何去除sensor坏点

坏点主要产生原因与sensor相关,长时间高低温等极端环境工作、传感器受到外力撞击挤压或静电放电时可能直接破坏像素单元的电路结构、传感器生产过程中微小的工艺偏差等均有导致坏点的可能

坏点图像示例1

ISP中的DPC模块可用于去除这类坏点,但需要根据具体sensor情况进行调试,具体操作方法如下:

Step1:先确认ISP效果参数中的DPC模块是否打开,若未打开,请打开
Step2:按照下述流程进行调试
调试分为检测和校正,以下调试建议在默认值参数的基础上进行。
1.检测:
a)现将校正参数NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO调至最小,保证调整检测参后,马上就能看出检测的实时效果。
b)调节SLOPE_TH参数,若图像动态坏点不明显(表现为稍亮),又希望将其去掉,将SLOPE_TH参数调小,以此来检测出更多的不明显坏点。若图像的动态坏点都比较明显,则可调大SLOPE_TH参数,防止误测出更多的纹理。
c)在上一步的基础上,配合HOT_RATIO参数去除亮坏点。将 HOT_RATIO参数调小,则能越容易检测出亮坏点,同时,越多的亮边缘纹理也将被误检;将 COLD_RATIO参数调小,COLD ABS TH调大(一般使用默认值即可,不需要整),则越容易检测出暗坏点来,同时,越多的暗边缘纹理也将被误检,需要权衡。
d)调整到合适的检测参数后,将校正参数NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO调至最大,接下进行调试校正参数。
2.校正:
1)由于校正参数被设置最大,虽然检测到了,但是依然没校正过来。因此,逐步减小校正参数NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO,会越来越多的坏点被校正。
2)若希望被检测出的坏点更多的被校正(去坏点),则将NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO参数继续调小,主要调NBHD_DIFF_RATIO参数,次调NEAREST_DIFF_RATIO。
3)若希望被检测出的坏点更多的保持原始值(纹理和边缘),则将NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO参数调大。

坏点调试参数

如何读写Sensor寄存器配置

通过sensor节点进行读写

Step1cd /sys/devices/gc2053_mipi(进入目标 sensor 节点目录)
Step2echo 0x10 > addr_width; echo 0x8 > data_width(输入目标 sensor 寄存器地址/数据位宽,请查阅 datasheet 获取)
Step3echo 0 > read_flagread_flag:读写控制节点,使能为1表示后续操作为读动作,使能为0表示后续操作为写动作)
Step4echo 30350021 > cci_client(“30350021”:0x3035【目标寄存器地址】,0x0021【将要写入的寄存器值】,在 read_flag = 1 情况下,写入值为无效状态)
Step5cat read_value(打印上一步操作的结果:寄存器值)

通过TigerISP工具进行读写

Step1:离线/在线连接上调试工具
Step2:打开读取寄存器界面,正确选择sensor寄存器的地址及数据位宽
Step3:操作为读取寄存器时,先在Address这一列填入要读取的寄存器地址,点击Read,在Data这一列会显示读出来的寄存器数值
Step4:操作为读取寄存器时,先在Address这一列填入要写入的寄存器地址,再在Data这一列填入要写入的寄存器数值,点击Write,即可写入进去
Step5Write以后可以再Read一下,确认是否写入生效

TigerISP读取寄存器示例

备注
  • IIC 在系统和硬件上正常工作;
  • 上述命令需要在 Camera 正常工作状态下执行才会有效,如 /sys/devices/sensor 节点是否存在,Camera 是否上电等等;
  • 上述命令只在 tina-linux 系统有效,rtos 系统暂不支持;

如何转换效果文件并合入应用生效

介绍效果文件格式及转化方法

ISP效果文件有三种格式:dat、h、bin

  • dat文件用于效果调试,工具加载及保存只能使用dat文件
  • h文件用于编译,使ISP在运行起来时,能快速找到对应匹配的效果文件并加载生效到应用中
  • bin文件用于效果切换,客户可以将文件放入文件系统中,在应用起来时通过调用接口读取bin文件,实现ISP效果加载生效

下述为三种效果文件格式的转化方式

效果文件转化

应用应该如何适配ISP效果文件并生效

h头文件

Step1:拷贝效果.h SDK

在工具中将.dat 文件转换为.h 文件,拷贝至 SDK指定路径
V85x常电效果文件目录:/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp_cfg/SENSOR_H/gc4663/
V85x快起效果文件目录:/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H
V821常电效果文件目录:/platform/allwinner/vision/libAWIspApi/isp_mpp/isp_v821/libisp/isp_cfg/SENSOR_H/gc4663
V821快起效果文件目录:/rtos/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H

Step2:配置 isp_ini_parse.cinclude添加上新增的ISP效果文件

V85x常电isp_ini_parse文件目录:/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp_cfg/isp_ini_parse.c
V85x快起效果文件目录:/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/isp_ini_parse.c
V821常电效果文件目录:/platform/allwinner/vision/libAWIspApi/isp_mpp/isp_v821/libisp/isp_cfg/isp_ini_parse.c
V821快起效果文件目录:/rtos/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/isp_ini_parse.c

配置ISP效果文件1

Step3:配置效果文件对应的属性,这一步是确保效果文件能否加载正确的关键

① Sensor dev名称:这个是驱动里面注册的sensorname,通常单路就是gc4663_mipi,如果是双目的情况下,另一路通常注册为gc4663_mipi_2,如果不能确定,可以通过cat vi节点确认sensorname
② ISP 效果头文件名称:对应效果文件名
③ 分辨率宽度:当前vi节点sensor输出宽度,如果不能确定可以通过cat vi节点确认
④ 分辨率高度:当前vi节点sensor输出高度,如果不能确定可以通过cat vi节点确认
⑤ 帧率
⑥ 红外 IR 模式标志位:值为1则按照红外夜视黑白效果加载此效果文件
⑦ WDR 模式标志位:值为1则说明效果为 WDR 模式专用效果,使用 WDR 模式才需要配置
⑧ ISP 效果.h 末尾的 ISP 参数结构体“struct isp_cfg_pt gc4663_mipi_linear_isp_cfg”

配置ISP效果文件2

如打开效果头文件后,这里结构体名字与isp_ini_parse.c对应不上,那么需要修改isp_ini_parse.c中的⑧为&gc4663_mipi_rgb_isp_cfg

配置ISP效果文件3

Step4:应用上使用 AW_MPI_ISP_SwitchIspConfig接口切换效果配置

IspDev 为当前使用的 ISP 通道号
ModeFlag为切换模式,0代表线性模式彩色效果,1代表WDR 模式彩色效果,2代表线性模式红外黑白效果,3代表WDR 模式红外黑白效果

配置ISP效果文件4

bin文件

Step1:将效果文件转换为bin格式并存放在文件系统指定路径下
Step2:应用上使用 AW_MPI_ISP_ReadIspCfgBin接口切换效果配置

配置ISP效果文件5

如何基于彩色效果整理一份初版红外效果

从彩色模式参数同步到红外模式过程中,效果文件上有以下点需要修改确认

  • CAC(LCA+GCA)模块需要关闭,避免红外模式下颜色误判断引起的异常
  • WB模块需要关闭(AWB保持打开),避免色温异常判断引起画面的异常变化
  • CCM模块建议关闭
  • 对比度(GTM模块)需要适当增强,避免红外补光灯下容易出现的图像发“朦”

如何抓取sensor raw数据

遇到图像效果异常,而无法判定是主控导致还是sensor本身的问题,在面对这种情况下,抓取raw数据进行分析是最快捷直观的排查手段,V系列支持多种抓取raw数据的方式 \

Sample_virvi抓取raw数据

介绍

Sample_virvi支持从vipp抓取raw数据,这个过程中vipp直接输出raw格式数据,不会经过isp的任何处理,只能抓取video0节点下的raw数据。但由于在跑sample_virv抓raw数据时,无法预览经过isp后的图像数据,因此针对一些非必现的场景问题下,此方案抓raw不推荐使用。

使用方法:

Step1:将sample_virvi放入卡中,图像尺寸帧率请按实际配置
Step2:修改sample_virvi.conf文件,修改如下配置pic_format_0 = “srggb10”,raw_store_count = 5
Step3:执行./sample_virvi -path ./sample_virvi &
Step4:在mnt/extsd目录下有raw图保存

TigerISP离线抓取raw数据

介绍

TigerISP是ISP调试工具,客户可以在APST上面进行下载。这里的离线指的是不跑sample出流或客户应用,通过运行TuningApp连接调试工具出流。本方法可以预览并判断到当前场景已复现到问题后,再进行raw数据抓取,但只能抓取video0节点下的raw数据,因此如果是双摄、三摄的情况下,需要手动配置设备树,将有问题的一路sensor配置到video0节点中。

使用方法

Step1:进入串口,手动运行tuningapp,指令如下:./Tuningapp 8848 0 &
Step2:打开TigerISP,填写sensor对应的尺寸帧率等配置,完成调试工具连接
Step3:导入现在使用的效果参数,并预览图像,检查是否复现到问题
Step4:复现到问题以后,通过log记录下当前使用的曝光增益
Step5:在调试工具中手动关闭isp所有模块
Step6:在手动曝光窗口下,将复现场景下记录的曝光增益写到sensor中
Step7:在capture界面下,将格式改为sensor输出的raw图格式(如BAYER-RGGB10),在点击右上角的capture按钮就可以完成raw图抓取

抓取raw数据示例1

sample_smartIPC_demo抓取raw数据

介绍

sample_smartIPC_demo是基于IPC客户开发的示例demo,其中包含整个vin通路及rtsp功能,使用该sample可以实现通过wifi、adb、eth等方式的实时图像码流预览。通过sample_smartIPC_demo抓取raw数据,可以实现在实时预览经过ISP、VE处理后的码流的同时,将这一段raw数据保存到本地。

使用方法

Step1:m kernel_menuconfig,搜索并打开SUPPORT_ISP_TDM、TDM_OFFLINE_HANDLE_RAW
Step2:打开board.dts,将vin通路配置为离线模式

抓取raw数据示例2

抓取raw数据示例3

Step3:配置sample_smartIPC_demo.conf,其中main_isp_tdm_raw_process_type请根据实际sensor输出的raw图的格式进行选择,其余配置按照sensor输出尺寸及需求进行配置。

main_isp_tdm_raw_process_type = -1 #-1:disable, 0:dump 8bit, 1:dump 10bit, 2:dump 8bit for tools, 3:dump 10bit for tools, 4:send 8bit, 5:send 10bit
main_isp_tdm_raw_width = 1920
main_isp_tdm_raw_height = 1080
main_isp_tdm_raw_rxbuf_num = 5
main_isp_tdm_raw_process_frame_cnt_min = 0
main_isp_tdm_raw_process_frame_cnt_max = 5
main_isp_tdm_raw_file_path = "/mnt/extsd/tdm_raw.bin"

Step4:编译新固件并烧录
Step5:运行sample_smartIPC_demo进行raw数据抓取

TigerISP在线抓取raw数据

介绍

TigerISP是ISP调试工具,客户可以在APST上面进行下载。这里的在线指的是在跑sample或客户应用的时候,连接上调试工具,进行raw数据抓取,在一些低概率才能复现到的问题上,推荐使用此方法进行raw数据抓取

使用方法

Step1:参考sample_smartIPC_demo抓取raw数据步骤的前两点进行通路配置
Step2:编译新固件并烧录
Step3:进入串口,手动运行tuningapp,指令如下:./Tuningapp 8848 1 &
Step4:打开TigerISP,填写sensor对应的尺寸帧率等配置,完成调试工具连接
Step5:确认当前场景下已复现到问题
Step6:在capture界面下,将格式改为sensor输出的raw图格式(如BAYER-RGGB10),在点击右上角的capture按钮就可以完成raw图抓取

抓取raw数据示例4

备注
  • sample_smartIPC_demo抓取raw数据只支持V85x sdk1.2及以上版本、V821 SDK1.0及以上版本
  • TigerISP在线抓取raw数据,只支持V821 SDK1.0及以上版本

如何通过ISP优化高温热噪

介绍

  • 由于Sensor处于高温环境或长时间工作,本身积热严重形成热噪,噪声对图像效果产生比较大的影响,通过实时读取Sensor温度,适时调整ISP模块表现来优化画质表现。

热噪示例图

ISP高温联动策略介绍

  • Sensor驱动获取温度(标定拟合的温度曲线)
  • 调试ISP高温联动模块

通过实时获取Sensor温度,联动 ISP Pipeline 的 Denoise、TDNF、BLC、Sharp、Saturation等模块来实时调整图像表现,例如高温下热噪严重,读取Sensor温度处于较高水平时,对应加强降噪模块的强度,减弱锐化模块的强度,使得图像不会因为热噪而变得十分异常。

如图所示,ISP高温策略通过获取Sensor温度进行联动,温度值归一化在【55℃, 120℃】范围内(意味着Sensor获取温度值后,需要将其归一化在这个范围内)。

ISP高温联动策略

如图所示,ISP高温联动模块的参数是各个模块强度(降噪、锐化、饱和度、BLC等)的补偿系数。

  • 以256为默认值,小于256为衰减补偿,大于256为增强补偿。
  • 如下表所示,BLC的补偿值系数默认值为0,补偿系数是在原有的BLC模块基础值上进行补偿偏移。

ISP高温策略联动范围

2D Black	2D暗部降噪联动系数,数值越大降噪越强,取值范围【0,4095】,默认值:256
2D White 2D亮部降噪联动系数,数值越大降噪越强,取值范围【0,4095】,默认值:256
3D Black 3D暗部降噪联动系数,数值越大降噪越强,取值范围【0,4095】,默认值:256
3D Black 3D亮部降噪联动系数,数值越大降噪越强,取值范围【0,4095】,默认值:256
DTC Stren D3D DTC 强度联动系数,数值越大噪声越多,取值范围【0,256】,默认值:256
BLC_R 黑电平 R 分量偏移,取值范围【-4095,4095】,默认值:0
BLC_G 黑电平 G 分量偏移,取值范围【-4095,4095】,默认值:0
BLC_B 黑电平 B 分量偏移,取值范围【-4095,4095】,默认值:0
Sharp 锐化强度联动系数,数值越大锐化越强,取值范围【0,4095】,默认值:256
Satu_Low 低亮饱和度联动系数,数值越大低亮区域饱和度越强,取值范围【0,512】,默认值:256
Satu_Mid 中亮饱和度联动系数,数值越大中亮区域饱和度越强,取值范围【0,512】,默认值:256
Satu_High 高亮饱和度联动系数,数值越大高亮区域饱和度越强,取值范围【0,512】,默认值:256

高温热噪调试策略

高温热噪的现象通常比较好分辨,如图所示,整个画面闪动的噪声会十分严重(特别是四角),随着时间流逝,清晰度也逐渐变差,与此同时,图像的颜色也会出现一些偏差。

热噪示例图

画面颜色偏差主要还是 Sensor BLC 在这个场景下有偏移导致,例如原本 BLC 只需要由平台扣除16,但受高温影响后实际需要扣除的BLC已经比16更大了。所以调试中需要观察每个温度档位下,图像中黑色的被摄物体是否有发红的表现,然后相应调整高温联动模块中的 BLC 参数和饱和度参数。

从上图中可以看到,受温度的影响,图像噪声十分严重,那么就可以根据温度档位,适当调整降噪强度补偿和锐化强度补偿(下图参数仅作为示例,参数设置以实际情况调试为准),让画面恢复到比较正常的表现。

调试参数示例

下图为高温联动策略生效后的效果,即使是高温条件下,图像也能够调整回相对正常的状态。

PS:如果通过高温联动策略也未能调整好图像,那么只能考虑从机器的模具设计、Sensor 选型来避免此类问题。

优化热噪示例图

如何使用远程调图

介绍

全志调试工程师与需调试设备两者异地,全志调试工程师可使用远程调试系统,在系统对已挂上系统的需调试设备进行画质调试。

使用流程

安装 TigerDOS

TigerDOS是一款基于互联网的设备远程在线调试系统,支持线上远程调试设备(adb调试 & 串口调试 & IP+Port调试(比如ISP在线调试)& 远程PC桌面协助),通过远程线上调试快速支持全志客户问题。
工具可以通过全志客户服务平台的开发工具页面获取,也可以使用 APST 获取。

远程调图流程1

准备调试环境

在调试之前,需要准备好调试固件,并且连接好串口,确认能使用adb/ip连接调试工具,在线调图连接工具方法请看第2.5.2章

登录 TigerDOS

安装完成,打开 TigerDOS 后,全志客户输入一号通账号与密码(要求有NDA权限)

远程调图流程2

非NDA账号会显示无法登录

远程调图流程3

分享桌面

选择工具中的PC桌面选项,在搜索框中输入员工的姓名,点击开始共享

远程调图流程4

然后会显示验证码,将验证码发给对应员工即可

远程调图流程5

如何抓取及分析ISP、VI节点

如下所示为vi节点,串口执行下述指令可以查看 VI 节点状态:cat /sys/kernel/debug/mpp/vi

VIN hardware feature list:
mcsi 2, ncsi 1, parser 2, isp 1, vipp 2, dma 2
CSI_VERSION: CSI300_600, ISP_VERSION: ISP603_100
CSI_CLK: 200000000, ISP_CLK: 0
*****************************************************
vi0:
gc1084_mipi => mipi0 => csi0 => isp0 => vipp0
input => hoff: 0, voff: 0, w: 1280, h: 720, fmt: GRBG10
output => width: 1280, height: 720, fmt: LBC_1X
interface: MIPI, isp_mode: NORMAL, hflip: 0, vflip: 0
prs_in => x: 1280, y: 720, hb: 2432, hs: 6451
bkuf => cnt: 4 size: 1429504 rest: 4, work_mode: online
frame => cnt: 306, lost_cnt: 7, error_cnt: 0
internal => avg: 34(ms), max: 34(ms), min: 33(ms)
CSI Bandwidth: 0
*****************************************************
vi4:
(efault) => mipi0 => csi0 => isp0 => vipp4
input => hoff: 0, voff: 0, w: 0, h: 0, fmt: NULL
output => width: 0, height: 0, fmt: NULL
interface: NULL, isp_mode: NORMAL, hflip: 0, vflip: 0
prs_in => x: 0, y: 0, hb: 0, hs: 0
bkuf => cnt: 0 size: 0 rest: 0, work_mode: online
frame => cnt: 0, lost_cnt: 0, error_cnt: 0
internal => avg: 0(ms), max: 0(ms), min: 0(ms)
CSI Bandwidth: 0
*****************************************************

VI 节点参数说明

参数描述
mcsiMIPI通道号,0/1
ncsiDVP通道号,0
parser图像数据解析通道号,0/1/2/3
ispISP通道号,0/1
vippVI通道号,0~12
input => hoff输入图像水平偏移
input => voff输入图像垂直偏移
input => w输入图像宽度
input => h输入图像高度
input => fmt输入图像格式,RAW:RGGB/BGGR/GRBG/GBRG,YUV:
output => width输出图像宽度
output => height输出图像高度
output => fmt输出图像格式:RAW8/10/12,YUV420等,LBC_1/1.5/2/2.5X
interface接口类型:PARALLEL/MIPI/BT656/SUBLVDS/HISPI
isp_modeISP模式:NORMAL/DOL_WDR/CMD_WDR/SEHDR
hflip输出图像水平(镜像)翻转:0/1
vflip输出图像垂直翻转:0/1
prs_in => xparser输入数据宽度
prs_in => yparser输入数据高度
prs_in => hb行消隐时间
prs_in => hs行同步时间
bkbuf => cnt图像buffer个数
bkbuf => size图像buffer大小
bkbuf => rest空闲图像buffer个数
bkbuf => work_mode图像编码模式:offline/online
tdmbuf => cntTDM buffer个数
tdmbuf => sizeTDM buffer大小
tdmbuf => cmp_ratioTDM LBC 压缩系数
ispbuf => cntISP 3DNR buffer个数
ispbuf => sizeISP 3DNR buffer大小
ispbuf => cmp_ratioISP 3DNR 压缩系数
frame => cnt图像帧计数
frame => lost_cnt图像丢帧计数
frame => error_cnt图像异常帧计数
internal => avg图像帧间隔平均值(ms)
internal => max图像帧间隔最大值(ms)
internal => min图像帧间隔最小值(ms)

如下所示为isp节点,串口执行下述指令可以查看 isp 节点状态:cat /sys/kernel/debug/mpp/isp

cat /sys/kernel/debug/mpp/isp
*****************************************************
VIN hardware feature list:
CSI_VERSION: CSI300_600, ISP_VERSION: ISP603_100
CSI_CLK: 200000000, ISP_CLK: 0
vipp0, isp_dode: NORMAL
*****************************************************
ISP0 debug param list:
===> exp: 21600, gain: 17, lum_idx: 187, coms_temp: 48
===> color_temp: 5630, rgain: 468, bgain: 442
===> contrast: 256, sharp: 256, bright: 256
===> satur: 256, tdnf: 256, bdnf: 256, pltm: 0
*****************************************************
[ISP Colorspace]
====> REC709_FULL
[ISP Cfg Version Name]
====> gc2083_mipi_isp603_20241205_171656_final_rgb_suit
[ISP Libs Commit Version]
====> commit: b821ee6be69ccb9b847874aae1a3d8fb3fbb1e05
*****************************************************

ISP 节点参数说明

参数描述
exp当前环境曝光时间,其中16代表一行曝光
gain当前环境下的增益,其中16代表一倍增益
lum_idx当前环境下的曝光idx值
coms_temp当前环境下的设备温度,需要实现高温功能
color_temp当前环境下的awb统计的色温值
rgain当前环境下的awb r通道补偿
bgain当前环境下的awb b通道补偿
contrast对比度叠加强度,通过应用接口调用设置
sharp锐化叠加强度,通过应用接口调用设置
bright亮度叠加强度,通过应用接口调用设置
satur饱和度叠加强度,通过应用接口调用设置
tdnfd3d去噪叠加强度,通过应用接口调用设置
bdnfd2d去噪叠加强度,通过应用接口调用设置
pltmpltm叠加强度,通过应用接口调用设置
ISP ColorspaceISP色域空间
ISP Cfg Version Name当前使用的效果文件名
ISP Libs Commit Version当前的ISP库版本号

如何排查连接图像调试工具失败

先根据本文的第2.5章节离线调试和在线调试介绍,确认awTuningApp的执行脚本、确认awTuningApp是从哪里拿到的、确认TigerISP连接界面填写的参数(sensorname、尺寸、帧率等)
在线调试的情况下,执行脚本为./awTuningApp 8848 1 & , 离线调试的情况下,执行脚本为./awTuningApp 8848 0 &
awTuningApp必须从SDK对应路径获取

  • V821 常电的 awTuningApp 路径: \platform\allwinner\vision\libAWIspApi\isp_mpp\isp_v821\libisp\tuning_app
  • V821 快启的 awTuningApp 路径: \rtos\lichee\rtos-hal\hal\source\vin\vin_isp\isp_server\out
  • V85X 常电的 awTuningApp 路径: \external\eyesee-mpp\middleware\sun8iw21\media\LIBRARY\libisp\tuning_app
  • V85X 快启的 awTuningApp 路径: \lichee\rtos-hal\hal\source\vin\vin_isp\isp_server\out

如果均已按照上述的规范来连接,还是连接不上,请确认调试工具填写的尺寸帧率等配置是否填写正确,有两种常见方法可以确认是否填写正确

1、执行awTuningApp后,进入设备端tmp路径,找到如下图所示文件夹isp1_1920_1080_20_0

其中isp1代表使用的ispid为1
1920代表宽,1080代表高
20代表帧率
0代表非WDR模式

TigerISP连接异常排查1

2、抓取vi节点,通过打印的尺寸及帧率等即可确定,但这里打印的帧率不一定为vi初始化时使用的帧率,存在降帧影响导致帧率误差

如何排查灯光高亮边缘存在彩条

灯光高亮区异常色彩

如出现此类异常问题,请按照步骤进行排查

Step1:离线连接调试工具,导入现有参数并确认能复现到问题,离线调试预览的是未过编码的图像,可以排除编码影响
Step2:依次关闭ISP相关模块,定位是否是ISP某个模块导致的偏色
Step3:关闭d3d后,发现彩条消失,能确定是sensor在高亮区彩噪偏大,经过d3d后彩噪被定住导致彩条
Step4:根据上述排查思路,通过降低d3d的降噪强度,使得d3d不要将低频彩噪定住,可优化彩条问题

如何调用接口使用AE ROI模式

针对门锁、IPC等客户,需要使用AE ROI模式,通过设置AE ROI参数,使得指定区域的曝光能够达到预期效果。

快启方案使用方法如下所示:

    //使用方式
isp_ctrl_attr.isp_attr_cfg.cfg_id = RT_ISP_CTRL_AE_ROI_TARGET;
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.enable = 1; //使能AE ROI
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.force_ae_target = forceAeTarget; //AE预期目标亮度,值越大则指定区域的曝光越大
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.coor.x1 = x1;
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.coor.y1 = y1;
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.coor.x2 = x2;
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.coor.y2 = y2;
ret = AWVideoInput_SetIspAttrCfg(id, &isp_ctrl_attr);

快启方案关于坐标设置请务必注意,统计窗口是将全图坐标归一化到[-1000,1000],因此坐标设定请按照下述坐标设置。

修改白平衡统计窗口示例2

常电方案使用方法如下所示:

    //常电方案使用接口  AW_S32 AW_MPI_ISP_AE_SetRoiArea(ISP_DEV IspDev, SIZE_S Res, RECT_S RoiRgn, AW_U16 ForceAeTarget, AW_U16 Enable)
//使用方法
Res.Width = 1920; // 设置图像分辨率
Res.Height = 1080;
RoiRgn.X = 0; // 设置ROI区域,其中(x,y)为ROI区域左上角坐标,(width,height)为ROI区域宽高
RoiRgn.Y = 0;
RoiRgn.Width = 640;
RoiRgn.Height = 480;
AW_U16 ForceAeTarget = 50;
ret = AW_MPI_ISP_AE_SetRoiArea(IspDev, Res, RoiRgn, ForceAeTarget, 1);

如何实现软光敏模式

软光敏的设计方案:通过软件上获取相关参数(亮度信息+红外光分量)来判断当前环境状态,且是否要切换场景,从而替代硬件光敏感知环境亮度

其主要实现接口如下:

  1. <AW_MPI_ISP_GetEnvLV>获取当前图像亮度等级(存在负值),此参数值可初步表征当前场景亮度,亮度越高参数值越高,亮度越低参数值越低
  2. <AW_MPI_ISP_GetAwbGainIr>获取当前图像中红外光分量等级(awb_rgain_ir、awb_bgain_ir),两个参数值可以在红外夜视下初步表征当前图像中红外光分量的程度,数值越高,红外光分量程度越高
  3. <AW_MPI_ISP_SwitchIspConfig>切换 ISP 效果
  4. <AW_MPI_VENC_SetColor2Grey>设置编码通道颜色

如需了解更详细的实现流程,请通过一号通浏览《V系列Camera-IPC产品软光敏方案开发指南》了解

如何排查快启方案前几帧图像异常

快启方案介绍

快启异构方案出图基本流程如下图所示,可以大概分为以下三个流程:

  1. Boot0引导melis系统(rtos系统)启动,melis系统启动后初始化sensor、CSI和ISP硬件以及初始化ISP算法库,图像开始采集并且ISP库对图像开始处理。

  2. Boot0引导Linux系统启动,然后等待melis的通知,melis系统对图像处理后关闭CSI和ISP硬件并发消息告知Linux系统。

  3. Linux系统打开CSI和ISP硬件开始接收图像,并把图像信息发送给melis系统的ISP算法库对图像进行处理,处理结果再发送回给Linux系统的ISP硬件,双系统协同完成图像的接收和处理。

快速收敛图像的三种方案介绍

Melis 系统sensor首帧初始化目前支持预取值模式、高帧率模式、硬光敏模式和硬光敏高帧率模式,通过mmelis menuconfig选择配置,如下:

快起ISP模式配置

  1. read ae threshold from flash:预取值模式,指的是sensor的初始化曝光增益使用的是上一次系统关闭时候保存在flash的曝光和增益,以保证首帧曝光增益正常。

    优点就是出图时间快,缺点是场景变化会导致下一次出图曝光增益不准。

  2. use HFR to make AE&AWB fast stability(HFR):高帧率模式(也称软光敏模式),指的是先使用低分辨高帧率先计算出曝光增益和白平衡,然后再切换到目标帧率,以得到当前环境正确的曝光增益和白平衡。

    优点就是首帧曝光增益和白平衡比较正常,缺点是比较耗时,特别是夜视需要开启ir_cut,所以夜视出图耗时需要增加200ms。

  3. ISP_ONLY_HARD_LIGHTADC(GPADC):硬光敏模式,指的是读取光敏电阻数值从而得到当前环境的亮度,所以可以在boot0就判断当前环境的亮度,提前控制ir_cut和红外补光,进入melis系统后通过提前标定光敏电阻gpadc数值与曝光增益关系的得到关系表,从而使得冷启动后获取当前环境gpadc数值经查询关系表得出sensor的曝光增益,从而保证首帧曝光增益正常。

    优点就是出图时间快,但是曝光增益准确性依赖于光敏电阻的精度,缺点是增加成本且首帧白平衡会有偏差。

  4. use hard light_adc to make AE&AWB fast stability(GPADC&HFR):硬光敏高帧率模式,指的是读取光敏电阻数值从而得到当前环境的亮度,所以可以在boot0就判断当前环境的亮度,提前控制ir_cut和红外补光,进入melis系统的时候再使用高帧率模式收敛曝光增益和白平衡。

    由于提前在boot0就控制了it_cut,所以优点就是出图比第二种高帧率模式快,而且首帧曝光增益和白平衡也比较正常,缺点是增加成本。

快起前几帧图像异常的排查方法

前几帧图像颜色异常

预取模式

1、确保在稳定环境下,搭配当前使用的效果文件抓取isp_reg更新

预取模式下,前三帧图像用的是isp_reg中设置的rgain/bgain,等三帧后才是是白平衡算法设置的增益

2、检查效果参数中的isp_color_temp不能设置太极端

白平衡算法的初始色温值使用的效果文件中的isp_color_temp,isp_color_temp值越大,初始化色温越偏高色温,初始化的图像可能会更偏黄,如下图所示

快起白平衡偏色1

高帧率模式

1、确保高帧率效果参数的AWB相关参数与低帧率的一致

高帧率模式下,会使用高帧率参数进行AE及AWB的收敛,因此需要确保高帧率下的效果参数能将白平衡做准

2、抓取高帧率isp_reg更新,并检查高帧率效果参数中的isp_color_temp不能设置太极端

3、检查小核打印awb是否收敛完成

默认高帧率是跑15帧,如果发现小核打印中收敛帧率已经到了15帧,说明可能还没收敛完,调试阶段可以把高帧率的稳定帧数设置大一点确保高帧率时候awb是完全稳定

快起白平衡偏色2

前几帧图像亮度异常

预取模式

1、确认小核sensor驱动是否实现从flash中读取曝光增益

预期模式下,AE会从flash中获取上次ISP退出时候的曝光增益并从第一帧设置给sensor作为初始化的曝光增益。

快起亮度异常1

2、确认flash中读取的曝光增益是否与上一次退出时保存的曝光增益值一致

预期模式下,除初始化vin时使用的是小核驱动曝光外,跳到内核出流都是通过linux的sensor驱动控制曝光增益,因此通过在大小核中的曝光函数中加打印即可确认。如果不一致的话,请确认dts中分区情况是否调整,导致isp保存及读取的地址存在异常。

高帧率模式

1、确认小核sensor驱动是否实现从flash中读取曝光增益

2、确认高帧率收敛后的曝光增益值是否已经稳定

默认高帧率是跑15帧,如果发现小核打印中收敛帧率已经到了15帧,说明可能还没收敛完,调试阶段可以把高帧率的稳定帧数设置大一点确保高帧率时候ae是完全稳定

3、确保高帧率效果参数的亮度相关参数与低帧率同步好

  • 高帧率模式参数头文件中的ae table的min_exp和ae_max_lv需要与线性模式一致,且ae table的max_gain需要提高(例如:低帧率用的是30fps,最大增益设置为20000;在120fps高帧率下最大增益需要设置为 120 * 20000 / 30 = 80000)。

  • 高帧率模式参数头文件中ae target需要与线性模式的一致;一般情况下低帧率的彩色模式和红外模式下的AE target差异较小时可共用一份高帧率参数;如差异较大,高帧率可以分别使用彩色模式和红外模式两份效果头文件。

  • 低帧率模式ISP参数头文件中PLTM manual_strength代表首帧的PLTM强度,需要填写各ISO下稳定时的PLTM实际强度。

  • 高帧率模式ISP参数头文件中ae tolerance越大,切换低帧率的时间越快,首帧的AE、AWB准确性越低;反之,切换低帧率的时间越慢,首帧的AE、AWB准确性越高。

硬光敏模式

1、确认硬光敏是否完成标定,能覆盖到户外照度到低照度的各个照度

2、检查硬光敏设置的曝光值是否基本符合要求

备注
  • 上述是各模式下的图像异常的常见排查流程,但实际应用场景中会包含更多要素,如是否开关灯及切ircut等工作在流程的哪个位置执行、aiisp切换包含8bit到10bit效果差异等,需要结合上述排查流程并结合实际场景进行排查。
  • 软光敏模式下,设备烧录固件第一次上电,flash使用的是默认值,无法实现首帧曝光正常;此外如果上一次上电的环境与本次上电的环境的亮度差异较大,也无法保证首帧曝光正常。
  • 如想了解快启ISP更多信息,请通过一号通浏览《Tina_Linux_异构快启Camera_使用指南》了解

关于编码及Encpp如何影响图像

Encpp是编码锐化模块,在ISP调试过程中,Encpp起到了非常重要的作用,由于Encpp模块开关由应用及ISP效果共同决定,在调试前,务必确认Encpp模块是否生效。

  • 确认方法:在线连接调试工具,在调试工具中分别开关Encpp模块,分别观察图像的变化,如果没有变化,请确认应用接口是否调用正确
  • 编码参数配置对画质有很大影响,如果客户对画质要求较高,那么建议通过调整编码参数使画质效果进一步提升

抓取VE节点后,可参考下述介绍

编码2D3D使能: 打开使能后,编码码控效果更好,在运动、晃动等场景下,码率能有效降低,但一定程度上会影响清晰度,如对画质要求高可关闭
区域联动使能: 编码新策略,使用该策略能更好的平衡运动、静止、平坦、细节区域的ISP降噪强度,新版编码库上有支持,建议打开
Encpp使能: 编码锐化使能,建议打开
VE ISP联动使能: 编码ISP联动使能,用于ISP和VE之间进行信息传递,用以优化编码码率及ISP效果,建议打开
码率编码策略及QP: 码率越大,通常图像效果更佳,在图像调试前,必须先与竞品对齐码率,编码策略及QP值可按照默认设置

编码节点介绍

备注
  • 如对编码有更高调试要求或希望了解更多,请通过一号通浏览《Tina_Linux_编码码率控制_使用指南》了解

如何在编码码流中插入SEI信息

SEI全称"Supplemental Enhancement Information",SEI是h264/h265规范中定义的字段,可以用来插入辅助增强信息。我们把ISP和VENC 在编码过程中的实时信息作为SEI插入码流中,便于后续从码流数据中分析视频采集的ISP参数和编码参数。

mpp平台和rt_media都可以支持。

mpp打开SEI功能

mpi_venc组件接口:

ERRORTYPE AW_MPI_VENC_ConfigSEI(VENC_CHN VeChn, const VENC_SEI_ATTR *pAttr);

设置mpi_venc组件通道的SEI模式和参数。

数据结构VENC_SEI_ATTR的定义如下:

typedef enum {
VencSei_Disable = -1,
VencSei_FollowShellSet = 0, // check /tmp/sei_venc_chn
VencSei_Enable = 1,
}VencSeiEnableSettingE;

typedef struct
{
VencSeiEnableSettingE eSeiEnableSetting;
int nSeiDataTypeFlags; //SEIDataType_ISP, SEIDataType_VIPP, SEIDataType_VENC
ISP_DEV nIspDev;
VI_DEV nVipp;
int nFrameIntervalForISPLevel1; //Exp
int nFrameIntervalForISPLevel2; //Colortmp
int nFrameIntervalForISPLevel3; //Awb
int nFrameIntervalForVIPP;
int nFrameIntervalForVencLevel1; //nSceneStatus, nMoveStatus
int nFrameIntervalForVencLevel2; //nMadTh,bOnlineEn
}VENC_SEI_ATTR;

数据结构VENC_SEI_ATTR的成员说明如下:


成员名称 描述


eSeiEnableSetting 3种SEI模式:
VencSei_Disable: 关
VencSei_Enable: 开
VencSei_FollowShellSet: mpi_venc组件从配置文件 "/tmp/sei_venc_chn"读取要开启SEI功能的编码通道号,将这些 编码通道开启SEI功能。编码通道号之间用空格隔开。例如用户 可以在程序运行时,在串口终端输入 echo "0 2 4" >/tmp/sei_venc_chn,即表示打开编码通道0, 2,4的SEI功能。删除配置文件rm /tmp/sei_venc_chn或清空配 置文件echo >/tmp/sei_venc_chn,就表示关闭所有编码通道 的SEI功能。

nSeiDataTypeFlags 指定要包含的SEI数据种类,目前设计了3种类型: SEIDataType_ISP, SEIDataType_VIPP, SEIDataType_VENC。其 中VIPP类型尚未实现。

nIspDev 指定视频帧来源的Isp设备号。

nVipp 指定视频帧来源的VIPP设备号。

nFrameIntervalForISPLevel1 ISP的level1等级的信息在视频帧中出现的频率,即多少帧携带 一笔ISP level1等级的信息。ISP驱动决定哪些信息是level1 的,例如曝光信息Exp等。level1是长度较少的信息,可以多次 出现而不影响码率。

nFrameIntervalForISPLevel2 ISP的level2等级的信息在视频帧中出现的频率,即多少帧携带 一笔ISP level2等级的信息。ISP驱动决定哪些信息是level2 的,例如色温Colortmp等。level2是长度稍长的信息,出现频率 要稍小一点,避免影响码率。

nFrameIntervalForISPLevel3 ISP的level3等级的信息在视频帧中出现的频率,即多少帧携带 一笔ISP level3等级的信息。ISP驱动决定哪些信息是level3 的,例如白平衡Awb等。level3是长度较长的信息,有时长达 10KB,出现频率要严格控制,避免影响码率。

nFrameIntervalForVIPP 未实现。

nFrameIntervalForVencLevel1 VENC的level1等级的信息在视频帧中出现的频率,即多少帧携带 一笔VENC level1等级的信息。VENC驱动决定哪些信息是level1 的,例如nSceneStatus, nMoveStatus等。level1是长度较少的 信息,可以多次出现而不影响码率。

nFrameIntervalForVencLevel2 VENC的level2等级的信息在视频帧中出现的频率,即多少帧携带 一笔VENC level2等级的信息。VENC驱动决定哪些信息是level2 的,例如nMadTh,bOnlineEn等。level2是长度稍长的信息,出现 频率要稍小一点,避免影响码率。


各等级信息出现的帧间隔推荐如下:

nFrameIntervalForISPLevel1 = 5
nFrameIntervalForISPLevel2 = 20
nFrameIntervalForISPLevel3 = 200

nFrameIntervalForVencLevel1 = 20
nFrameIntervalForVencLevel2 = 200

mpi_venc支持3种SEI模式,默认使用VencSei_FollowShellSet模式。在该模式下,mpi_venc组件从配置文件"/tmp/sei_venc_chn"读取要 开启SEI功能的编码通道号,将这些编码通道开启SEI功能。编码通道号之间用空格隔开。因此用户可以在程序运行时,在串口终端通过 shell指令修改/tmp/sei_venc_chn的内容,从而实时配置各个视频编码通道的SEI功能。例如输入echo "0 2 4" >/tmp/sei_venc_chn, 即表示打开编码通道0,2,4的SEI功能。删除配置文件rm /tmp/sei_venc_chn或清空配置文件echo >/tmp/sei_venc_chn,就表示关闭 所有编码通道的SEI功能。

用户可以在串口终端执行cat /sys/kernel/debug/mpp/ve_base查询到当前正在工作的视频编码通道号。

rt_media打开SEI功能

AWVideoInput的接口:

int AWVideoInput_VENC_ConfigSEI(int channel, AWVideoInput_SeiAttr *pAttr)

数据结构AWVideoInput_SeiAttr的定义如下:

typedef enum {
AWVideoInput_SeiDisable = -1,
AWVideoInput_SeiFollowShellSet = 0, // check /tmp/sei_rtmedia_chn
AWVideoInput_SeiEnable = 1,
}AWVideoInput_SeiEnableSettingE;

typedef struct {
AWVideoInput_SeiEnableSettingE eSeiEnableSetting;
int nSeiDataTypeFlags; //RTSEIDataType_ISP, RTSEIDataType_VIPP, RTSEIDataType_VENC
int nFrameIntervalForISPLevel1; //Exp
int nFrameIntervalForISPLevel2; //Colortmp
int nFrameIntervalForISPLevel3; //Awb
int nFrameIntervalForVIPP;
int nFrameIntervalForVencLevel1; //nSceneStatus, nMoveStatus
int nFrameIntervalForVencLevel2; //nMadTh,bOnlineEn
} AWVideoInput_SeiAttr;

数据结构AWVideoInput_SeiAttr的成员说明如下:


成员名称 描述


eSeiEnableSetting 3种SEI模式:
AWVideoInput_SeiDisable: 关
AWVideoInput_SeiEnable: 开
AWVideoInput_SeiFollowShellSet: rtmedia通道从配置文 件"/tmp/sei_rtmedia_chn"读取要开启SEI功能的rtmedia通 道号,将这些通道开启SEI功能。rtmedia通道号之间用空格 隔开。例如用户可以在程序运行时,在串口终端输入 echo "0 2 4" >/tmp/sei_rtmedia_chn,即表示打开通道 0,2,4的SEI功能。删除配置文件 rm /tmp/sei_rtmedia_chn或清空配置文件 echo >/tmp/sei_rtmedia_chn,就表示关闭所有rtmedia 通道的SEI功能。

nSeiDataTypeFlags 指定要包含的SEI数据种类,目前设计了3种类型: RTSEIDataType_ISP, RTSEIDataType_VIPP, RTSEIDataType_VENC。其中VIPP类型尚未实现。

nFrameIntervalForISPLevel1 ISP的level1等级的信息在视频帧中出现的频率,即多少帧 携带一笔ISP level1等级的信息。ISP驱动决定哪些信息是 level1的,例如曝光信息Exp等。level1是长度较少的信 息,可以多次出现而不影响码率。

nFrameIntervalForISPLevel2 ISP的level2等级的信息在视频帧中出现的频率,即多少帧 携带一笔ISP level2等级的信息。ISP驱动决定哪些信息是 level2的,例如色温Colortmp等。level2是长度稍长的信 息,出现频率要稍小一点,避免影响码率。

nFrameIntervalForISPLevel3 ISP的level3等级的信息在视频帧中出现的频率,即多少帧 携带一笔ISP level3等级的信息。ISP驱动决定哪些信息是 level3的,例如白平衡Awb等。level3是长度较长的信息, 有时长达10KB,出现频率要严格控制,避免影响码率。

nFrameIntervalForVIPP 未实现。

nFrameIntervalForVencLevel1 VENC的level1等级的信息在视频帧中出现的频率,即多少帧 携带一笔VENC level1等级的信息。VENC驱动决定哪些信息 是level1的,例如nSceneStatus, nMoveStatus等。level1 是长度较少的信息,可以多次出现而不影响码率。

nFrameIntervalForVencLevel2 VENC的level2等级的信息在视频帧中出现的频率,即多少帧 携带一笔VENC level2等级的信息。VENC驱动决定哪些信息 是level2的,例如nMadTh,bOnlineEn等。level2是长度稍长 的信息,出现频率要稍小一点,避免影响码率。


rtmedia支持3种SEI模式,默认使用AWVideoInput_SeiFollowShellSet模式。在该模式下,rtmedia通道从配置文件 "/tmp/sei_rtmedia_chn"读取要开启SEI功能的rtmedia通道号,将这些通道开启SEI功能,通道号之间用空格隔开。因此用户可以在程序 运行时,在串口终端通过shell指令修改"/tmp/sei_venc_chn"的内容,从而实时配置各个rtmedia通道的SEI功能。例如输入 echo "0 2 4" >/tmp/sei_rtmedia_chn,即表示打开rtmedia通道0,2,4的SEI功能。删除配置文件rm /tmp/sei_rtmedia_chn或清空配 置文件echo >/tmp/sei_rtmedia_chn,就表示关闭所有rtmedia通道的SEI功能。

如何解析SEI信息

使用上述方法打开SEI功能后录制出来的码流中会包含SEI信息,可通过下述方式进行解析,当前只支持H264/H265格式的裸码流解析。

使用TigerISP调试工具进行解析

1、打开TigerISP调试工具,选择V821平台,点击OK,打开TigerISP调试工具,这里不需要连接板端设备。

2、点击菜单栏的Extra Tools,选择Play后跳出Play窗口,模式选为File,根据码流格式选择H264或H265,然后点击Browse,选择码流文件,即可完成解析。

SEI解析1

3、解析出来的SEI信息生成在码流同级目录下。

SEI解析2

使用解析程序进行解析

使用编译好的解析程序,在控制台进行执行,执行指令后面加多一个 “V85X”或 “V82X”配置参数,可指定版本。不加这个配置参数,默认为V82X,除此外还需加上码流文件路径参数,即可实现解析。

SEI解析3

如何基于解析的SEI信息检查AWB落点情况

1、如果是V821的SEI信息,请打开TigerISP调试工具,选择A733平台,默认打开即可,如果是V85X平台,则选择A523平台打开调试工具。

2、导入当前使用的效果文件dat文件

3、点击菜单栏的Extra Tools,选择JpegExt,点击Load TXT,选择SEI信息文件,即可实现检查AWB落点信息。

SEI解析4

如何修改SEI中各模块频率

以mpi_venc组件从配置文件VencSei_FollowShellSet为例,调用VideoEncConfigSEI接口前需要配置各个模块的频率,其中isp区分了3个Level进行频率设置,如果需要修改个模块的频率可参考下述代码修改。

SEI频率设置1

SEI频率设置2