zoukankan      html  css  js  c++  java
  • android Camera 结构

    Java层 :FrameworksasecorejavaandroidhardwareCamera.java
    JNI: Frameworksasecorejniandroid_hardware_Camera.cpp
    C++: Frameworksavinclude,Frameworksavcamera,Frameworksavservicescamera
    第一部分, 也即第一组binder;PS:这里发起链接,获取具体模组的代理,在App进程
    ICameraClient, 对应的代理类为BpCameraClient, 对应的服务类为BnCameraClient(抽象类), Camera(具体的实现类),另外 Camera还有一个父类BaseCamera
    用于发送链接请求,接收回调


    第二部分, 也即第二组Binder; PS:这里只是用来选择、管理模组,并且在服务进程
    ICameraService, 对应的代理类为BpCameraService, 对应的服务类为 抽象类BnCameraService, 实现类CameraService
    用于接收请求,管理ICamera


    第三部分,也即第三组Binder;PS:这里对应Device 即具体模组,在服务进程
    ICamera, 对应的代理类为BpCamera,对应的服务类 抽象类为BnCamera, 实现类为Client, 其同时也继承BasicClient, 并且有子类CameraClient, Camera2Client
    用于管理具体的摄像头模组

    调用逻辑
    Camera.java 通过 JNI android_hardware_Camera 创建c++ 层Camera对象, 在BaseCamera中获取ICameraServcie的代理(这个Binder服务已经注册到ServiceManager,可以通过名称获取),通过ICameraService代理向CameraService发起链接请求

    并且将ICameraClient 作为回调发送到CameraService,

    收到请求之后,CameraService 会根据系统版本选择new CameraClient 或者 Camera2Client ,并且将ICameraClient 传入Client中;即每一个CameraClient 都有一个对应的回调。

    然后发起链接的BaseCamera 从reply中读取出ICamera的代理BpCamera。

    最后就可以通过BpCamera 控制摄像头的预览拍照等功能。

  • 相关阅读:
    Redis 发布与订阅模式
    JS回调函数全解析教程
    如何让你的SQL运行得更快
    Apache设置禁止访问目录
    Ext.Ajax.request提交实现waitMsg效果
    sublime的快捷键整理
    Sublime Text 2插件[这个不错哦]
    mysql如何开启对外连接?
    Javascript之旅——终点站:困惑的settimeout
    Javascript之旅——第十一站:原型也不好理解?
  • 原文地址:https://www.cnblogs.com/lipeil/p/6020073.html
Copyright © 2011-2022 走看看