现象

  • 温度过高时户外出现过曝,夏天出现的频率更高
  • 图像高温下出现偏绿的情况
  • 设备崩溃,崩溃在thermal
  • 界面上调节自动快门的下限图像上不生效

排查方式

  1. 增加thermal level的打印,可以在QCamera2HWI.cpp中的updateThermalLevel中增加thermal_level的打印
  2. 打开sensor,stats模块的打印,logcat|grep fps,查看是否有帧率有异常,比如说负数
  3. 此时如果打开骁龙相机,会出现异常而打不开

原因

温控策略中的bug

QCamera2HWI.cpp中的updateThermalLevel是对不同温度等级实现帧率控制,温度比较高,实行降帧策略。

其中的calcThermalLevel是根据温度等级计算目标的帧率。当在QCAMERA_THERMAL_SHUTDOWN模式下,却没有对目标帧率进行赋值,adjustPreviewFpsRange函数就将没有赋初值的帧率设置下去了,导致异常。

这个异常的设置不会影响到sensor的采集帧率,也不会影响到hal层每帧回调的输出帧率,但是会影响到stats模块,导致最大曝光行等参数错误,随后写入sensor的曝光时间出错,最终导致图像或者设备异常。

解决方案

  • 去除温度对帧率的控制代码
  1. 注释掉updateThermalLevel函数中的内容
  2. 注释掉setPreviewFpsRange函数中QCAMERA_THERMAL_ADJUST_FPS模式下对帧率的控制
  • 联系驱动提高ISP温度上限