AE


1. Slow shutter机制说明

修改曝光表成功设定下去需要注意的事项:

  1. 操作方面:

    AE item 取消勾选auto write Read page 修改曝光表(除曝光表外不要改动其他AE Attr中的项目)

    Write page

    Read page

    此时read page回来可以看到AE Attr中的min/max gain,shutter,ISP gain会根据设定的曝光表被更新。

  2. 驱动方面

    如果驱动中最大gain和最大shutter被限制住了,曝光表会修改不成功,需要在驱动中放开限制,否则整组table表都会set不进去。

  3. 曝光表的跑法说明

    就拿set 20fps,曝光表设置如下:

    区间0~1:帧率 20fps,增益1x,曝光时间150us ->50ms

    区间1~2:帧率 20fps,增益1x~30x,曝光时间50ms

    区间2~3:帧率 20fps->10fps,增益30x,曝光时间50->100ms 慢快门开启

    区间3~4:帧率 10fps,增益30x~256x,曝光时间100ms 慢快门开启

如果没有通过api去设置AE Attr中的值,则直接minshutter=150usec maxshutter=100000usec minsensorgain=1024 minISPgain=1024 maxSensorgian=30720 maxISPgain=262144/30720,此时20fps对应的shutter是50ms,而曝光表中的max shutter是100ms,这个时候默认就是slow shutter,完全按照曝光表来跑。

如果有通过设置AE Attr中的max shutter来控制,当max shutter设置10000,则帧率还是20fps,shutter最大只能到10ms;

当max shutter设置50ms,没有slow shutter ,类似与3,4,5行的100000换成50000这样的曝光表来跑。

当max shutter设置80ms或者120ms时,会先行跑满曝光表的shutter,然后按照max shutter来跑。

假如max shutter设置120ms,曝光表的跑法:

Sensor gain 为1倍ISP gain为1倍的时候,先涨shutter,涨满shutter 50ms 之后,gain从1倍gain开始涨,涨到30倍gain,然后gain不涨,shutter开始从50ms 开始涨到100ms ,gain会从30倍涨到256倍,然后再涨shutter从100ms涨到max shutter=120ms。


2. shutter很低的时候,补ISPgain

ISP gain补的是shutter精度的部分,就是一条Line的时间那个,flicker是用sensor gain补。

如果shutter 很小的時候,比如一个step 是30,那下一个是60,这样亮度会调两倍,为了避免它跳两倍,中间就补gain,比如30+1.5x gain,那就只会跳1.5x,上图是一个最刚好的状况,他准备要跳60,但是又不满60,所以这个时候gain就会来到最高点,接近2x但是不到2x,基本上这个补isp gain的行为不会出现超过2x的情况。

另外,Step会从sensor driver中拿GetShutterInfo,注意shutter step是否准确。


3. AE Converge

Con speed

例:从curY=10 到target =50的过程:

  1. 10对应的收敛速度是900,下一个到的亮度值NextY=10+(50-10)*(900/1024)=NextY=45

  2. 接下来算出NextY=45对应的一个SpeedY_45的值,然后按照(1)再次计算一个Next Y的值,NextY=45+(50-45)*((SpeedY_45)/1024)

  3. 依次类推,进入收敛区即稳定区。nSpeedX值是target值,10可以理解为暗环境,47可以理解为正常环境,200可以理解为亮环境。

nSpeedY值越大收敛速度越快。所有的场景都是一次到位,收敛速度最快的时候,如下图所示:

例:要加大从暗环境到正常环境的收敛速度,按照上图的方向去改,如下示意图所示:

从示意图来看,把47对应的speedy加大,这样10到47区间的亮度对应的收敛速度都往上提高了。

Con TH

nInthd:是从非收敛区进到收敛区来的一个threshold,值的大小在上图中体现在inStable x CondRation离TargetY的一个大小,对于非收敛区进入收敛区来讲,inStable x CondRation到TargetY之间的部分是稳定的,所以nInthd的值越大,就越容易从not stable区进入stable区,也就是更容易收敛。

nOutthd:是收敛区到非收敛区的一个threhold,值的大小在上图体现在outStable x CondRatio离TargetY的一个大小,同样对于收敛区进入非收敛区来讲,OutStable x CondRation和TargetY之间都是收敛区,同样值越大越容易收敛。

收敛越容易,越不准确,这样会导致每次收敛的时候亮度差异过大。nOutthd的值需要大于等于nInthd的值,否则会出现AEC震荡。因为如果nOutthd的值小于nInthd的值时,进入收敛区(Stable),其中进去Stable区中包含了部分out的Not Stable区,这样既处于In的Stable区又处于Out的Not Stable区的场景就会出现不停的In-Out的过程,即AEC震荡现象。如下示意图所示:


4. AE 亮度闪

AE log 驱动中 gain和shutter的计算 驱动中gain和shutter是否同步,如果有开defliker,关掉defliker看是否就不闪了,如果是需要考虑gain和shutter是否同步生效。 可以把sensor gain,isp gain 跟shutter 乘起来,看AE 曝光能量控制是否合理 如果AE是控制平滑的,但是亮度闪,多半是driver的问题。