完成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 的降帧功能,并返回实际生效的最大曝光行数。