1、问题背景
调试OV的一款sensor,客户反馈亮度从暗到亮变化后,画面会闪一下;
有发现是和开启了降帧有关系,当关闭降帧后,就看不到闪烁了,这里主要分析一下开启降帧后,导致图像闪一下的原因是什么。
2、问题分析
之前的想法是,肯定是和AE算法有关的,当帧率发生变化时,曝光时间和增益都会发生变化,AE会重新计算、重新收敛,所以图像出现闪烁。
看如上的视频,降帧和AE收敛是都存在的。
整个过程是手捂住画面,图像先变暗(会达到降帧阈值,开启降帧),然后手放开,画面亮度恢复,AE收敛完成(降帧恢复)。
所以这个问题需要分开来看;
a、关闭降帧,执行此过程,图像是否闪烁。
b、固定亮度场景,切换帧率,图像是否闪烁。
目前是执行a后,没看到有闪烁了,执行b的话,就会明显闪一下,所以这肯定是和降帧有关系了。
但实际上降帧不会导致亮度变化,降帧只是增加了最大曝光时间,是表示曝光支持的一个上限值有变化,并不是曝光有变化。
比如在固定亮度场景下,手动设置200行曝光+1倍增益,和100行曝光+2倍增益,
出来的亮度是一样的,不应该有亮度的变化,切换也不应该有亮度跳变。
切换帧率导致的亮度闪烁,算法那边回复应该是曝光和增益写给 sensor 的时间不同步导致的,和AE没有关系,是驱动要保证的。
那怎么做到曝光和增益可以同时写给 sensor 呢?
一般在写 sensor 寄存器时,sensor 中会提供一个hold的功能,可以多个寄存器同时去写,
所以可以在执行降帧后,同时去写曝光和增益的寄存器就可以了 , sensor datasheet中关于hold 的描述如下:
如下是关于sensor驱动中增加 hold 后的简单说明。
3、问题总结
另外有个问题,当不降帧时,曝光和增益没加hold,为什么不会出现闪烁呢?
因为一般AE的工作策略是曝光优先,画面从亮到暗时,先走曝光行,曝光行走满了,再走增益。
从暗到亮时,也是先减增益,再减曝光行,所以不存在同步的说法。
但帧率变化时涉及到曝光和增益的同时变化,所以为了避免闪烁,需要做同步的操作。