现象:从web端将增益快门改成手动,会发现随着增益的增大,图片亮度先递增,到了54时,图片瞬间变暗,再继续递增。

思路:从增益从上到下传递的地方推断出可能会改变的地方:
业务–ispctrl层–hal层–camera层的aec输出(aec.biz)–camera层的sensor模块的(设置)–写入寄存器

过程:经过排查发现随着web界面上增益的增大,aec的输出是逐步增大的,对sensor模块进行打印,发现寄存器写入的值也是正确的。怀疑是寄存器初始化有问题,和8056平台的IMX385进行比较,没有找到异常。查看手册,发现相比于290,增益寄存器是两个字节组成的,而web界面上的53对应的是0xff,54对应的是0x100,猜测可能是寄存器只写了低八位。

查看代码:

reg_setting->reg_setting[reg_count].reg_addr =
sensor_lib_ptr.exp_gain_info.global_gain_addr;
reg_setting->reg_setting[reg_count].reg_data = gain & 0xFF;
reg_setting->reg_setting[reg_count].delay = 0;
reg_count = reg_count + 1;

发现代码真的仅仅对地址0x3014h进行了赋值,没有将高八位赋值。
增加代码:

reg_setting->reg_setting[reg_count].reg_addr =
sensor_lib_ptr.exp_gain_info.global_gain_addr+1;
reg_setting->reg_setting[reg_count].reg_data = (gain & 0x100) >> 8;
reg_setting->reg_setting[reg_count].delay = 0;
reg_count = reg_count + 1;

解决问题。但是需要注意代码中reg_setting[reg_count]reg_count是否进行初始化,是否会出现数组溢出的问题?此处没有细查。
小结
对增益从web端的传递到寄存器的过程加深了理解。

帮助对日夜切换代码修改

  1. 将结构体从HAL层的qcameraparameter传递到qcameraHWI。实现按值传递和按地址传递,最终选择按地址传递。
  2. 定位日夜切换代码会对ISP传递过来的参数造成影响的BUG
    小结:由于高通将每个模块的变量都分离开来,不能随意获取,同样每个模块的函数也不能随意使用,可能会将这个模块中定义的实例又刷新一遍