完成AE配置
开发流程
AE配置,请按如下顺序实现:
- cmos_get_sns_regs_info
该函数用于配置需要确保同步性的Sensor、ISP寄存器,如曝光时间、增益及总行数等。虽然这些寄存器可以通过直接调用sensor_write_register()来配置,但无法保证同步性,可能出现闪烁。所以这些寄存器请一定要用该函数配置。配置的信息包括指定Sensor寄存器通信的类型(I2C还是SPI)、通信bus总线号、寄存器的地址以及是否更新等。
delay_frame_num是寄存器配置延时。举个例子,很多Sensor的增益是下一帧生效,但曝光时间是下下帧生效,所以需要增益晚一帧配置,以使增益和曝光时间同时生效,这时就需要用Delay的功能。配置 cfg2_valid_delay_max 是控制ISP与Sensor同步,ISP包括ISP Dgain和WDR曝光比等参数,可通过检查ISP Dgain是否与Sensor gain同步来检查参数正确性。该参数的意义是生效时间,一般会比最大的Sensor寄存器延迟多1。
update用于控制该寄存器是否更新,如果不用修改,可以置为false。
- cmos_get_ae_default,
请根据Sensor修改参数。accuracy是计算精度的类型,常用HI_ISP_AE_ACCURACY_TABLE及HI_ISP_AE_ACCURACY_LINEAR。而HI_ISP_AE_ACCURACY_DB因为CPU计算精度问题,除非精度很低的,均由TABLE的方式代替。
LINEAR方式是指曝光时间或增益以固定步长线性递增。比如每一步增长0.325倍,或曝光时间每一步增长1。步长由accuracy决定。
TABLE方式一般用于增益,指每一步可以达到的增益通过查表的方式,在cmos_again_calc_table()或cmos_dgain_calc_table()函数中计算得到。此时accuracy失去意义,不生效。
AE默认计算顺序是先分配曝光时间,其次again,然后dgain,最后isp dgain。可以通过设置AE Route或AE RouteEx来调整分配顺序。
- cmos_again_calc_table(), cmos_dgain_calc_table
这两个函数输入、输出完全一致,分别对应Again和Dgain的TABLE方式。下面以Again为例说明。
again_lin同时做输入和输出。做输入是AE计算出来的期望增益,1024表示1倍。在该函数中,要查询到一个Sensor可以实现的,小于该增益的最大增益。并重新赋给该参数作为向AE的输出。
again_db是输出,AE内部不用于运算,只是作为函数cmos_gains_update()的输入。一般用于传递当前增益的Sensor寄存器值。
例如:某Sensor增益按0.3dB递增。Sensor寄存器值从0开始,每增加1,对应增益分别为0dB, 0.3dB, 0.6dB, 0.9dB…
离线算出一个将dB转化为线性倍数的查找表,为1024, 1060, 1097, 1136…
在函数中将输入的增益与查找表比对,假如输入为1082,那查出来可用的最大增益是1060,返回1060 为实际生效的增益。
- cmos_get_inttime_max
该函数只在xto1 WDR模式下生效,用于计算不同曝光比的时候,曝光时间的最大值。
一般是行合成模式才需要。因为行合成模式,曝光时间的限制为长曝光时间加短曝光时间的和要小于一帧长度。所以不同曝光比下,最大曝光时间有差异,需要重新运算。
- cmos_gains_update, cmos_inttime_update
这两个函数,是根据输入的Again、Dgain或曝光时间配置Sensor寄存器。
精度模式采用TABLE时,输入参数值为对应cmos_again_calc_table()/cmos_dgain_calc_table() 函数中返回的again_db、dgain_db。
精度模式采用Linear时,输入参数为生效的增益、曝光时间除以accuracy。比如accuracy为0.0078125,实际生效增益为1.5倍时,输入值为1.5 / 0.0078125 = 192。
Xto1 WDR模式,需要分别配置长短每一帧的曝光时间。cmos_inttime_update()会被调用X次,分别传入不同帧曝光时间,第一次传入短帧。
- cmos_fps_set, cmos_slow_framerate_set
cmos_fps_set函数为手动帧率配置函数,需要根据传入的帧率配置Sensor对应的寄存器,实现改变Sensor帧率的功能,并返回实际生效的帧率及最大曝光行数。
cmos_slow_framerate_set()函数为自动降帧配置函数,需要根据当前曝光实际需要的最大曝光行数配置Sensor对应的寄存器,实现Sensor的降帧功能,并返回实际生效的最大曝光行数。