第31讲 Android Camera2 API AE自动曝光 第1部分

本讲是Android Camera专题系列的第31讲,我们介绍Android Camera2 API专题的AE自动曝光第1部分,AE自动曝光包括如下10部分内容,第一部分介绍前5讲:

  1. AE是什么
  2. 3A总开关
  3. AE模式
  4. AE状态
  5. 拍照前AE测光
  6. 曝光补偿(EV)
  7. AE Lock
  8. AE状态转换
  9. AE测光区域
  10. 帧率控制

视频在线观看: 

极客笔记:极客笔记在线课程

加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815

AE是什么

AE(Auto Exposure)/AEC(Auto Exposure Control)自动曝光

AE 算法的主要工作原理

  • 实时获取输入图像的统计信息并与设定目标亮度进行比较,而动态调节 sensor 的曝光时间和增益以及镜头光圈大小以达到实际亮度与设定目标亮度接近

AE是什么

AE是什么

Android中3A总开关

CaptureRequest#CONTROL_MODE

读取CameraCharacteristics#CONTROL_AVAILABLE_MODES来判断支持哪些Control Mode

CONTROL_MODE取值描述
CameraMetadata#CONTROL_MODE_OFFManual 3A,3A参数完全由App决定;为了快速响应从OFF切到AUTO模式,有可能3A算法还在运行,只是结果不会使用(依赖HAL的实现)
CameraMetadata#CONTROL_MODE_AUTO3A参数是由3A算法计算出来,触发3A算法运算可以是App,也可能是HAL自动触发
CameraMetadata#CONTROL_MODE_USE_SCENE_MODE3A参数由Scene Mode(比如ACTION,NIGHT, BEACH等)决定,但有一个例外当Scene ModeFACE_PRIORITY时,3A参数还是由3A算法决定
CameraMetadata#CONTROL_MODE_USE_EXTENDED_SCENE_MODE3A参数由Extended Scene Mode决定,比如BOKEH。 API 30新增该Mode
CameraMetadata#CONTROL_MODE_OFF_KEEP_STATE跟OFF模式类似,区别在于3A参数被锁定在上一个模式的最新值上

AE模式

CaptureRequest#CONTROL_AE_MODE

只有当CaptureRequest#CONTROL_MODE为AUTO时设置的值才生效

当前平台支持哪些值:读取CameraCharacteristics#CONTROL_AE_AVAILABLE_MODES

行为

  • 当设置为OFF模式时:AE算法不生效,通过CaptureRequest#SENSOR_EXPOSURE_TIME, CaptureRequest#SENSOR_SENSITIVITY, CaptureRequest#SENSOR_FRAME_DURATION控制曝光
  • 当设置为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模式

AE状态

CaptureResult#CONTROL_AE_STATE表示AE算法当前帧的状态。

CONTROL_AE_MODE取值描述
CONTROL_AE_STATE_INACTIVEAE算法未激活状态,每次切换AE模式 / CONTROL_MODE / CONTROL_SCENE_MODE时,AE状态都会重置到CONTROL_AE_STATE_INACTIVE,但在CaptureResult中不一定能看到这种状态
CONTROL_AE_STATE_SEARCHINGAE算法正在收敛过程中,正在调整曝光参数,在CaptureResult中不一定能看到这种状态
CONTROL_AE_STATE_CONVERGEDAE算法收敛完成
CONTROL_AE_STATE_LOCKED当前的AE参数固定不变了,被锁住了,是由CONTROL_AE_LOCK来控制的
CONTROL_AE_STATE_FLASH_REQUIREDAE算法收敛了,但拍照时需要打闪以获得更好的图像亮度
CONTROL_AE_STATE_PRECAPTUREAE算法进入precapture状态,可以将CONTROL_AE_PRECAPTURE_TRIGGER设置为START来触发,打闪测光或消除红眼时需要

拍照前AE测光

CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER标识是否触发拍照前的测光动作:

  • 在Flash为不OFF时,需要在拍照前需要触发测光动作,用来估计场景亮度和最终打闪需要的闪光灯功率
  • 在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状态切到初始状态
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deepinout_camera

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值