本讲是Android Camera Native Framework专题的第11讲,我们介绍cameraserver进程启动之HIDL CameraDevice初始化修正CameraCharacteristics。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
修复/更新 mCameraCharacteristics
fixupMonochromeTags
当Camera Device < 3.5 且 包含 MONOCHROME Capability(HAL 3.3新增)的Camera Device
- 更新ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT(HAL 3.2就有)为ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO(HAL3.4新增)
- 删除Monochrome camera不需要的Static Keys,Request Keys,Result Keys
- 更新ANDROID_SENSOR_BLACK_LEVEL_PATTERN,Monochrome Camera的所有的2×2通道必须有相同的值。
addDynamicDepthTags
Dynamic Depth是指包含Depth信息的JPEG,在Camera Framework完成Jpeg和Depth Buffer的Composite,因此相关静态Metadata HAL不会填,这里要补充上,筛选规则是:Jpeg和Depth Size相同(或宽高比近似)的Streams
- ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
- ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS
- ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
deriveHeicTags
HEIC是Camera Framework调用Encoder的接口压成的,因此相关静态Metadata需要补上
- ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
- ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
- ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
addRotateCropTags
如果ANDROID_SCALER_AVAILABLE_ROTATE_AND_CROP_MODES没有填,则至少条一个值:ANDROID_SCALER_ROTATE_AND_CROP_NONE
addPreCorrectionActiveArraySize
如果ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE没有填,则获取ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE的值填进去
overrideZoomRatioTags
- 如果HAL不支持ANDROID_CONTROL_ZOOM_RATIO_RANGE,则通过ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM来构造一个Zoom Ratio Range,更新到ANDROID_CONTROL_ZOOM_RATIO_RANGE。并增加Zoom Ratio相关的Static/Request/Result Keys
fixupTorchStrengthTags
- 如果没有填ANDROID_FLASH_INFO_STRENGTH_DEFAULT_LEVEL,则填成1
- 如果没有填ANDROID_FLASH_INFO_STRENGTH_MAXIMUM_LEVEL,则填成1
queryPhysicalCameraIds
如果支持MULTI_CAMERA Capability,则从ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS获取到Physical Camera Ids放到mPhysicalIds
修复/更新 PhysicalCamera Characteristics
如果支持Logical Multicamera
- getPhysicalCameraCharacteristics
- overrideZoomRatioTags