本讲是Android Camera Native Framework专题的第10讲,我们介绍cameraserver进程启动之HIDL CameraDevice初始化addDevice流程。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
initializeProviderInfoCommon
initializeProviderInfoCommon主要完成2件事情:
- 调用addDevice将CameraDevice保持在mDevices中
- 处理Cached Status回调
addDevice完成的4件事情
步骤 | 描述 | ProviderInfo::addDevice |
---|---|---|
第1步 | 检查CameraDevice的版本是否正确 | 1. Camera ID、MajorVersion、IPCTransport的组合必须唯一 2. IPCTransport::HIDL的对应的Device MajorVersion必须为3,IPCTransport::AIDL的对应的Device MajorVersion必须为1 |
第2步 | initializeDeviceInfo | 初始化Camera Device Info,由各*IDLProviderInfo去实现 |
第3步 | notifyDeviceStateChange | 根据手机设备状态去更新ANDROID_SENSOR_ORIENTATION |
第4步 | isAPI1Compatible | 根据ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT和ANDROID_REQUEST_AVAILABLE_CAPABILITIES去判断是否支持API1 – NIR(Near Infrared Filter,近红外,捕获波长大约在750纳米和1400纳米之间的光线) Camera sensor不支持API1 |
HidlProviderInfo::initializeDeviceInfo完成3件事情
步骤 | 描述 | ProviderInfo::addDevice |
---|---|---|
第1步 | 获取到ICameraDevice的实例 | 调用ICameraProvider的getCameraDeviceInterface_V3_x获取到ICameraDevice的实例(HidlDeviceInfo3有缓存ICameraDevice实例,不会每次都调用Provider接口) |
第2步 | getResourceCost | 调用ICameraDevice的getResourceCost获取到Resource Cost |
第3步 | 创建HidlDeviceInfo3 | 处理静态信息,比如获取SystemCameraKind和修复/更新 mCameraCharacteristics |
创建HidlDeviceInfo3完成5件事情
步骤 | 描述 | ProviderInfo::addDevice |
---|---|---|
第1步 | 获取CameraCharacteristics | 调用getCameraCharacteristics对mCameraCharacteristics赋值 |
第2步 | 获取DeviceStateOrientationMap | 获取ANDROID_INFO_DEVICE_STATE_ORIENTATIONS的值,保存在mDeviceStateOrientationMap |
第3步 | 获取到mSystemCameraKind | 调用getSystemCameraKind获取到mSystemCameraKind – 如果Capability是ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA,则返回SystemCameraKind::HIDDEN_SECURE_CAMERA – 如果Capability有ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA,则返回SystemCameraKind::SYSTEM_ONLY_CAMERA – 其他情况返回SystemCameraKind::PUBLIC |
第4步 | 修复/更新 mCameraCharacteristics | fixupMonochromeTags、addDynamicDepthTags、deriveHeicTags、addRotateCropTags、addPreCorrectionActiveArraySize、overrideZoomRatioTags、fixupTorchStrengthTags、queryPhysicalCameraIds |
第5步 | 修复/更新 未Public 出去的PhysicalCamera Characteristics | overrideZoomRatioTags |