2024年10月26日 第31讲 AE自动曝光 Part 1 极客笔记
本讲是Android Camera专题系列的第31讲,我们介绍Android Camera2 API专题的AE自动曝光第1部分,AE自动曝光包括如下内容,第一部分。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
AE(Auto Exposure)/AEC(Auto Exposure Control)自动曝光
AE 算法的主要工作原理
CaptureRequest#CONTROL_MODE
读取CameraCharacteristics#CONTROL_AVAILABLE_MODES来判断支持哪些Control Mode
CONTROL_MODE取值 | 描述 |
---|---|
CONTROL_MODE_OFF | Manual 3A,3A参数完全由App决定;为了快速响应从OFF切到AUTO模式,有可能3A算法还在运行,只是结果不会使用(依赖HAL的实现) |
CONTROL_MODE_AUTO | 3A参数是由3A算法计算出来,触发3A算法运算可以是App,也可能是HAL自动触发 |
CONTROL_MODE_USE_SCENE_MODE | 3A参数由Scene Mode(比如ACTION,NIGHT, BEACH等)决定,但有一个例外:当Scene Mode为FACE_PRIORITY时,3A参数还是由3A算法决定 |
CONTROL_MODE_USE_EXTENDED_SCENE_MODE | 3A参数由Extended Scene Mode决定,比如BOKEH。 API 30新增该Mode |
CONTROL_MODE_OFF_KEEP_STATE | 跟OFF模式类似,区别在于3A参数被锁定在上一个模式的最新值上 |
CaptureRequest#CONTROL_AE_MODE
当前平台支持哪些值:读取CameraCharacteristics#CONTROL_AE_AVAILABLE_MODES
行为
当设置为非OFF模式时(CONTROL_AE_MODE_ON*):手动曝光参数不生效,会被AE算法的结果覆盖
当选择带有FLASH的模式时:表示FLASH由AE来控制,CaptureRequest#FLASH_MODE设置的参数不生效
CONTROL_AE_MODE取值 | 描述 |
---|---|
CONTROL_AE_MODE_OFF | 手动曝光模式。 Hardware Level为FULL的CameraDevice必须支持;Hardware Level为LEGACY的CameraDevice不支持;Hardware Level为LIMITED的CameraDevice同时支持MANUAL_SENSOR capability也必须支持 |
CONTROL_AE_MODE_ON | 自动曝光模式,所有设备必须支持 |
CONTROL_AE_MODE_ON_AUTO_FLASH | 与ON模式类似。在暗环境下会控制闪光灯打闪 |
CONTROL_AE_MODE_ON_ALWAYS_FLASH | 与ON模式类似,在拍照时(STILL_CAPTURE)一定会让闪光灯打闪 |
CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE | 与ON_AUTO_FLASH类似,会自动消除红眼 |
CONTROL_AE_MODE_ON_EXTERNAL_FLASH | 告诉Camera设备外部闪光灯(不受Camera系统控制)已经打开,需要快速进行重新测光。外部闪光灯关闭后,需要切到其他ON模式 |
CaptureResult#CONTROL_AE_STATE表示AE算法当前帧的状态。
CONTROL_AE_MODE取值 | 描述 |
---|---|
CONTROL_AE_STATE_INACTIVE | AE算法未激活状态,每次切换AE模式 / CONTROL_MODE / CONTROL_SCENE_MODE时,AE状态都会重置到CONTROL_AE_STATE_INACTIVE,但在CaptureResult中不一定能看到这种状态 |
CONTROL_AE_STATE_SEARCHING | AE算法正在收敛过程中,正在调整曝光参数,在CaptureResult中不一定能看到这种状态 |
CONTROL_AE_STATE_CONVERGED | AE算法收敛完成 |
CONTROL_AE_STATE_LOCKED | 当前的AE参数固定不变了,被锁住了,是由CONTROL_AE_LOCK来控制的 |
CONTROL_AE_STATE_FLASH_REQUIRED | AE算法收敛了,但拍照时需要打闪以获得更好的图像亮度 |
CONTROL_AE_STATE_PRECAPTURE | AE算法进入precapture状态,可以将CONTROL_AE_PRECAPTURE_TRIGGER设置为START来触发,打闪测光或消除红眼时需要 |
CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER标识是否触发拍照前的测光动作:
在Hardware Level为LEGACY的设备上,Camera HAL自己完成测光动作,不需要App参与,其他Hardware Level的设备都需要App参与
App只能在单个CaptureRequest中设置该参数,设置完后需要等待测光完成才能进行下一步动作(比如拍照)
测光完成后,Camera HAL内部为了给接下来的拍照,曝光可能会把AE锁住,因此如果App接下来不拍照,需要主动让AE恢复正常流程
< API 23 : 设置CONTROL_AE_LOCK为TRUE后,再设置CONTROL_AE_LOCK为FALSE
>= API 23 : 设置为CONTROL_AE_PRECAPTURE_TRIGGER为CANCEL
支持同时对AE和AF进行preCapture trigger
CONTROL_AE_PRECAPTURE_TRIGGER取值 | 描述 |
---|---|
CONTROL_AE_PRECAPTURE_TRIGGER_IDLE | 没有触发AE preCapture |
CONTROL_AE_PRECAPTURE_TRIGGER_START | 触发AE preCapture测光操作 |
CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL | 取消AE preCapture测光,回到AE初始状态。如果AE preCapture测光已经完成,该动作会将AE状态切到初始状态 |
本文链接:http://so.lmcjl.com/news/16232/