现象
当手动增益调节到90多时,图像会有闪烁
当调到100时,增益突然变低,图像突然变好
可能的原因
- 增益太高,导致曝光行一行跨度太大,达不到目标亮度
- 虽然增益很高,我们是在AE模块的输出截取修改,其实AE会把这个场景当做很亮的场景,曝光行在很小的地方波动,那个时候的曝光行不够平滑
- 是否可能增益到100时候超过了IMX327的最大数字增益
排查经过
- 1/17/2019 13:28:49
烧写最新版本启动不了 –烧写1.4版本
搭好环境,更新代码
- 2019/1/17 13:43:27
曝光行一直在变化,增益也在变化。
if( output->stats_update.aec_update.sensor_gain > aec->aec_exp_limit.gain_max){ |
问题:调节手动增益为什么不是直接设置固定值?
解释:可能是由于增益比较大,如果想要达到目标亮度,曝光行可能会来回跳动,因此需要将手动增益乘以一个较小的数,也就是原始的输出增益。这里就相当于在原来的AEC基础上加上了一个固定的倍数。
- 2019/1/17 14:38:34
可能是在之前乘以的倍数比较大?超过了最大值? –可以到达600多倍
- 2019/1/17 15:38:45
lib中设置了最大增益上限为252,是否是因为超过了最大上限? –在sensor.c中的sensor_set_aec_update
函数用persist强制设置
char prop[PROPERTY_VALUE_MAX]; |
- 2019/1/18 10:40:06
排查99和100效果不同的原因:
注意一个问题:100ms更新一次数据 –理论上不是两帧更新一次么,也就是66ms;由于不是每次都打印,可能会出现这个问题
设置的手动增益是正常的,一直在增大;难道说是超出阈值了
保持图片的当前亮度稳定,那么曝光行和增益的乘积是固定的,也就是当增益增大,固定增益增大,曝光阶会会减小,但是到了100就不对了;为什么之前不会出现这个问题呢?
- 2019/1/18 13:37:03
尝试修改lib.h文件中的IMX327_MAX_GAIN为1000
发现增益等级设置的手动增益范围也变成了1-1000,当为80时,手动增益为252倍,之后和100相同的情况,而在70-80之间依旧闪烁
- 2019/1/18 14:10:49
为什么增益到了252就会出问题呢?这个增益恰好是lib中设置的最大增益
- 2019/1/18 15:00:40
尝试将IMX327_MAX_GAIN改小,发现不再闪烁了,但是并不能解释根本原因
根本原因
写入寄存器是字节型写入的,需要将float型转换成十六进制,它是通过一个查找表reg_value_lookup_table
去设置对应的倍数的。但是有个问题,超过查找表的最大值就没有进行赋值。而查找表的最大值只有251倍,我们设置的最大倍数有252倍,所以会出现问题。我们只需要将查找表加长,让每个倍数有对应的写入寄存器的值。
总结
- 与camera相关参数的设置,注意是以字节形式写入,有时需要进入底层去查看原因。
- aec_port中的real_gain并不是最终写入寄存器的值,需要经过sensor模块(可能会经过截取等简单操作),还有最后转换成字节型。
备忘录
- imx327数字增益范围是0.3-42dB;换算一下最大数字增益是125.89;最大增益为71.4dB
- imx327_lib.h文件中最大增益是252,也就是24dB
- 增益和倍数的换算是20lg(倍数)=dB