CameraService 详解二(open camera) 前面介绍了camera service的初始化过程这里接着介绍open camera在camera service的流程。前面有介绍camera app的常用接口通过调用api2提供的opencamera接口调用到cameraservice来打开一个指定逻辑camera id的camera对象在camera service再进一步实现该接口 并逐层调用到更底层的provider和HAL那我们看一下具体在camera service这层 opencamera的调用flow。我们可以看到在Icameraservice的左边是camera app的调用flow这些接口跑在camera app的进程里最后通过connectDevice函数通过 Icameraservice的接口跨进程调用到cameraservice在cameraservice的connectDevice的接口里主要做了三件事1调用validateConnectLocked接口检查当前要打开的camera是否已经locked这里locked比如说检查是否该camera是否打开是否需要处理抢占的情况根据app的优先级抢占camera的使用2CheckPermissions接口则是检查当前clientcamera app的权限。3最后则是创建一个cameradeviceclient与app端的camera device一一对应。接着在cameradeviceclient的构造函数里又进一步创建了一个camera3device对象并调用它的initialize方法。创建的camera3device用来和providerManager和HAL的provider进行交互。在camera3device的initialize方法里最重要的会去调用到cameraprovidermanager方法的opensession方法 通过hidl跨进程调用到cameraprovider进程创建一个在cameraprovider进程里相对应的一个session对象该对象会callback回调到cameraservice 并进一步回传给camera app从而建立映射关系。这里涉及的类/对象调用关系如下整个的架构和流程都比较清楚包括后面的其他api2接口也是遵循这样的架构层层调用到HAL。
💡
读完这篇文章,你可以带走什么

本文来自编程新知一线开发与建站实战沉淀:讲清原理、给出可复现步骤、标注避坑要点。看完后可以直接在你的项目或网站中落地验证。

编程新知内容团队
一线开发 · 建站实施 · 持续更新
由资深前端工程师、后端架构师与建站实施人员共同维护,坚持"真实案例 + 完整步骤 + 避坑指南"的内容准则。如果你在落地中遇到问题,欢迎联系我们交流。

想把这套方案用到自己的项目上?

编程新知提供技术答疑与网站建设一站式服务,欢迎联系我们获取针对性建议。

联系工程师
📚

系统学习该技术

进入对应栏目,从基础到进阶完整学习,配套案例与避坑指南。

前往栏目 →
🏗️

需要落地实施

企业建站、SEO 优化、服务器部署等需求,交给工程师一步到位。

了解服务 →
💬

还有疑问

技术难题或方案咨询,联系编程新知获取一对一的专业建议。

联系我们 →