本讲是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 |