本讲是Android Camera专题系列的第32讲,我们介绍Android Camera2 API专题的AE自动曝光第2部分。
更多资源:
| 资源 | 
描述 | 
| 在线课程 | 
极客笔记在线课程 | 
| 知识星球 | 
星球名称:深入浅出Android Camera  星球ID: 17296815 | 
| Wechat | 
极客笔记圈 | 
曝光补偿(EV)
CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION调节AE算法的目标亮度
- 是否支持:读取CameraCharacteristics#CONTROL_AE_COMPENSATION_RANGE,为空或者[0,0]表示不支持调整曝光补偿
	
	
	
	
 
- 
EV的计算:0EV表示不做曝光补偿,1EV表示提升1倍图像亮度, -1EV表示消减一半图像亮度,在Android中需要读取CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP来计算EV:
 
- 
只有在android.control.aeMode != OFF时才生效
 
- 
修改曝光补偿后,如果AE没有Lock住,AE算法需要重新收敛,可能需要多帧才能完成曝光补偿动作
	
	
	
	
 
AE Lock
CaptureRequest#CONTROL_AE_LOCK标识是否将AE参数锁定在参数上
- 是否支持:需要读取CameraCharacteristics#CONTROL_AE_LOCK_AVAILABLE,支持MANUAL_SENSOR和BURST_CAPTURE的设备必须要支持AE Lock
 
- 
该动作不能锁住Flash,当AE模式为ON_AUTO_FLASH / ON_ALWAYS_FLASH / ON_AUTO_FLASH_REDEYE,AE Lock后Flash仍然可能打闪
- ON_AUTO_FLASH / ON_AUTO_FLASH_REDEYE:在暗环境下会打闪
 
- ON_ALWAYS_FLASH:总是会打闪,因为AE参数锁定了,所以可能会过曝
 
 
- 该动作不能锁住曝光补偿(CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION),设置曝光补偿仍然生效
 
- 
AE Lock后,做AE preCapture trigger START/CANCEL是没有效果的
 
- 
在自动AE和手动AE间切换时,如果避免Flicker现象,建议操作步骤如下
	
	
	
	
- 设置AE模式为ON
 
- Lock AE
 
- 从CaptureResult中等待AE Lock成功
 
- 将曝光参数(曝光时间,Sensitivity)从CaptureResult中获取出来,设置给手动AE的CaptureRequest
 
- 提交手动AE的CaptureRequest
 
- 然后随意更改手动曝光参数
 
 
AE状态转换
AE状态转换-OFF
AE状态转换-ON
AE状态转换-ON 两个相邻CaptureResults多个状态切换
AE测光区域
CaptureRequest#CONTROL_AE_REGIONS设置AE的测光区域
- 判断是否支持:读取CameraCharacteristics#CONTROL_MAX_REGIONS_AE
- Hardware Level为FULL的设备必须支持(> 0)
 
 
- 设置的值为MeteringRectangle(int x, int y, int width, int height, int meteringWeight)
- 当支持设置多个测光区域是,每个测光区域的权重范围是[0, 1000],权重越大的区域对测光结果影响越大,权重为0表示忽略对应的测光区域
 
 
- 坐标系
- 不支持畸变矫正的设备(DISTORTION_CORRECTION_MODE)
- Left, top = [0, 0], right bottom = [activeArraySize.width – 1, activeArraySize.height – 1]
 
 
- 支持畸变矫正的设备(DISTORTION_CORRECTION_MODE)
- OFF
 
- Left, top = [0, 0], right bottom = [preCorrectionActiveArraySize.width – 1, preCorrectionActiveArraySize.height – 1]
 
- Not-OFF
 
- Left, top = [0, 0], right bottom = [activeArraySize.width – 1, activeArraySize.height – 1]
 
 
- 当android.sensor.pixelMode 设置为CameraMetadata.SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION时,需要参考activeArraySizeMaximumResolution / preCorrectionActiveArraySizeMaximumResolution
 
 
- 受Crop Region的限制
- RAW转换为YUV后,设置的Crop Region才会生效,也就是Crop Region不是在Raw域生效的
 
- 只有在Crop Region区域内的测光区域才能生效,Crop Region是由Zoom决定的
 
- >= API Level 30
- 如果通过zoomRatio来进行Zoom,相同的aeRegions在不同的ZoomRatio下面代表不同的区域(可以理解为使用ZoomRatio时,HAL会自动计算crop region和ae regions填到CaptureResult里面)
 
- 如果通过crop region来进行Zoom,相同的aeRegions在不同的crop regions下面还是代表相同的区域
 
- 举例
 
- aeRegion的计算的坐标系为[0,0,2000,1500],放大2倍的情况下,想将左上角1/4的区域设置为测光区域
- 如果通过zoomRatio设置为2来实现,需要将aeRegion设置为[0,0,1000,750]
 
- 如果通过zoomRatio设置为1,crop region设置为[500, 375, 1500, 1125]来实现,需要将aeRegion设置为[500, 375,1000,750]
 
 
 
 
帧率控制
CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE设置帧率,AE算法计算曝光时间时会受到该值的影响,最大曝光时间不能超过最小帧率对应的曝光时间
- 只对AE自动模式有用,AE手动模式不受该值的影响
 
- 可以设置哪些Range
- 从CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES获取支持的列表
 
- 录像时选定恒定帧率,也即range的最小值等于最大值
 
- 该列表不包含高帧率的Range,录制高帧率时也是通过设置CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE来控制帧率
 
 
                                        本文链接:http://so.lmcjl.com/news/16248/