Java层 :Frameworks\base\core\java\android\hardware\Camera.java

JNI: Frameworks\base\core\jni\android_hardware_Camera.cpp

C++: Frameworks\av\include,Frameworks\av\camera,Frameworks\av\services\camera
第一部分, 也即第一组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 控制摄像头的预览拍照等功能。

更多相关文章

  1. [CSDN]Android系统进程Zygote启动过程的源代码分析
  2. android 阻塞 对话框 完全阻塞 停止主进程类似于window MessageB
  3. 在Android中取得当前进程名
  4. 分享一个整理了很多Android开发工具类的链接AndroidUtilCode
  5. android中判断服务和进程是否运行
  6. android:为TextView添加样式——下划线,颜色,设置链接样式及前背景
  7. android链接服务器获取图片三种方法。
  8. android menu,activity,AlertDialog... 链接整理

随机推荐

  1. Android(安卓)Bundle类
  2. Android存储空间不足的解决办法
  3. Android播放照相机声音
  4. 解决Android(安卓)Studio 和 Android(安
  5. Android入门一:Android(安卓)开发环境安装
  6. Android(安卓)插值器 Interpolator 介绍
  7. Android在MTP模式下,只显示指定文件夹
  8. Android四大组件的理解
  9. android Ant编译项目多渠道打包
  10. Android――Animation