本讲是Android Camera专题系列的第34讲,我们介绍Android Camera2 API专题的AE手动曝光,包括如下内容:
- ISO/Gain控制
- Exposure Time曝光时间控制
- Frame Duration控制
视频在线观看:
- 极客笔记:极客笔记在线课程
加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815
ISO/Gain 控制
Static Metadata
CameraCharacteristics | 说明 |
---|---|
SENSOR_INFO_SENSITIVITY_RANGE | 1.当前Camera sensor Gain可调整的范围 2.Min<=100, Max >=800 3.在Hardware Level为FULL的Camera设备上,必须包含该Metadata |
SENSOR_MAX_ANALOG_SENSITIVITY | 1.当前Camera sensor支持的最大模拟Gain 2.当设置的SENSOR_SENSITIVITY小于等于该值时,全部用模拟Gain,大于该值时会通过数字Gain来填 3.在Hardware Level为FULL的Camera设备上,必须包含该Metadata |
CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE | 1.当前ISP Gain可调整的范围 2.如果当前设备不支持RAW format buffer的输出,该值为null 3.如果当前设备支持RAW format buffer的输出,则必须填该值,如果不支持调整ISP Gain,该range会填成[100, 100] |
CaptureRequest
CaptureRequest | 说明 |
---|---|
SENSOR_SENSITIVITY | 1.设置给Sensor的Gain(增益)大小,这里的Gain值符合标准ISO 12232:2006 2.这里的Gain是Total Gain,可能会被Camera HAL拆成模拟Gain和数字Gain设置给Sensor 3.设置的值HAL不一定刚好能用,也就是可能会有精度误差,Camera HAL最找一个不大于目标值且与目标值最接近的设置给Sensor 4.手动AE模式下生效,自动AE该值会被AE算法的结果覆盖 5.在支持postRawSensitivityBoost的设备上,图像最终的Gain是SENSOR_SENSITIVITY乘以postRawSensitivityBoost |
CONTROL_POST_RAW_SENSITIVITY_BOOST | 1.该值表示Camera sensor输出RAW图给ISP后,ISP在YUV/JPEG图像上额外应用的Gain值,对RAW format buffer没有影响 2.设置的值HAL不一定刚好能用,也就是可能会有精度误差,Camera HAL最找一个不大于目标值且与目标值最接近的值进行设置 3.手动AE模式下生效,自动AE该值会被AE算法的结果覆盖 4.图像最终被应用的Gain值 YUV/JPEG:SENSOR_SENSITIVITY * CONTROL_POST_RAW_SENSITIVITY_BOOST RAW:SENSOR_SENSITIVITY |
CaptureResult
CaptureResult | 说明 |
---|---|
SENSOR_SENSITIVITY | 实际生效的Sensor Gain,自动AE时这个值会填当前正在使用的 |
CONTROL_POST_RAW_SENSITIVITY_BOOST | 实际生效的ISP Gain,自动AE时这个值会填当前正在使用的 |
Exposure time曝光时间控制
参数 | 说明 |
---|---|
CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE | 1.Camera sensor曝光时间可调整的范围,单位是NS 2.Min <= 100 us 3.在Hardware Level为FULL的Camera设备上,Max >= 100ms |
CaptureRequest#SENSOR_EXPOSURE_TIME | 1.曝光时间,也就是每个像素暴露在光线下的时间,单位NS 2.手动AE模式下生效,自动AE该值会被AE算法的结果覆盖 |
CaptureResult#SENSOR_EXPOSURE_TIME | 实际生效的曝光时间 |
Frame Duration控制
参数 | 说明 |
---|---|
CameraCharacteristics# SENSOR_INFO_MAX_FRAME_DURATION | 1.当前Sensor支持的最大Frame Duration,单位是NS, 也就是能输出的最小帧率 2.最小的Frame Duration跟size和format有关,需要从这里获取StreamConfigurationMap.getOutputMinFrameDuration(int, Size) |
CaptureRequest# SENSOR_FRAME_DURATION | 1.相邻两帧曝光开始的时间间隔,单位是NS 2.手动AE模式下生效,自动AE该值会被AE算法的结果覆盖 |
CaptureResult# SENSOR_FRAME_DURATION | 实际生效的Frame Duration |