写点什么

跟着卷卷龙一起学 Camera--CameraService

作者:卷卷龙
  • 2022 年 9 月 17 日
    广东
  • 本文字数:798 字

    阅读完需:约 3 分钟

跟着卷卷龙一起学Camera--CameraService

CameraService 启动流程



这里 main_cameraserver 将把 cameraservice 服务注册 serviceManager 里,那么 APP 端可以通过 serviceManager 来获取这个服务。在枚举 cameraProvider 的时候,同时也检查自己是否被注册为服务。再通过 cameraProviderManager 去获取已经注册的 cameraprovider 服务。完成了 CameraService 的启动和初始化工作,并将 CameraService 注册到了 ServiceManager,那么其他地方,就可以通过 ServiceManager 去获取这个服务。在 onFirstRef()枚举 CameraProvider,注册 UID 和 Sensor 的 Policy,通过 HIDL 检查自身是否已经注册成为服务,最后检查 CameraServiceProxy。ICameraProvider 里获取之前注册的 cameraProvider 远程服务

CameraProvider 启动流程



这里 service 将 cameraProvider 注册到 providerManager 里,那么 cameraservice 可以通过这个 providerManager 来获取这个服务。

CameraProvider 实例化对象的时候调用了 startThreadPool() 函数就已经有线程在等待了,startThreadPool()会调用 joinRpcThreadpool() 函数,而这里的 joinRpcThreadpool() 其实就是把主线程也放入线程池中等待请求,防止这个进程退出.CameraModule::init()在 init 函数中,会根据 HAL 版本调用 camera_module_t->init 函数,最后通过 getNumbersOfCameras()获取当前设备 camera 数量并保存在 mCameraInfoMap

CameraService 的 Connect 流程

在打开相机 sensor 时,APP 会调用 open 接口,触发 cameraservice 的 connect 接口中的 connectHelper,再调用到 camera3device 的构造和 initialize 函数。在初始化中会 getCameraCharacteristics 获取静态参数和 supportNativeZoomRatio 获取缩放倍率,以及获取 HalInterface 的 handle。HAL 没有 Framework 那么复杂的。 Android 其他模块代码的调用流程可参考 Camera 。如果做驱动开发又想了解 Android framework 框架,建议先跳过 Java 层代码。从 CPP 开始跟代码,逐步理解 Framework 与 HAL 的关系。然后再跟 Java 层的代码。


cameraservice 的 request 流程


发布于: 刚刚阅读数: 4
用户头像

卷卷龙

关注

还未添加个人签名 2022.07.26 加入

还未添加个人简介

评论

发布
暂无评论
跟着卷卷龙一起学Camera--CameraService_ISP_卷卷龙_InfoQ写作社区