Camera-API2分析_第1页
Camera-API2分析_第2页
Camera-API2分析_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、android6.0 源码分析之 Camera API2.0 简介 前面几篇主要分析的是 An droid Camera API1.0的架构以及初始化流程,而google在 android5.0(Lollipop)开始对Camera的架构进行了调整,为了适应 HAL3,新添加实现了 CameraDeviceClient,而Camera API1.0已经被deprecated即可能在更新的版本里会不支持此 API).1、Camera API2.0 的架构图Camera API2.0下的Camera架构与API1.0有所区别,下面将给出 Camera API2.0以及Camera HAL3.2+下

2、的Camera的总体架构图:由图可知,Java层要想与C+层的CameraService层进行通信,都是通过 Java层的IPC Binder 进制进行的,主要包括 ICameraService.aidI以及 ICameraDeviceUser.aidl两个接口来实 现,其会在 Java层维护一个 CameraDeviceImpl即Camera设备的代理,而 CameraService以 及CameraDeviceImpl的初始化会在此文的第二,第三节进行分析。而Java层对Camera的具体操作的操作流程大致为,Java层通过Device代理发送一个CaptureRequest而C+层进行

3、相应的处理,再调用相应的回调来通知Java相应的处理结果,并将相应的 Capture数据保存在 Surface Buffer 里,这样 Java 层在回调函数中可以对数据进行相应的处理。而对于具体操 作流程的分析,请参考文章开始时的Camera2相关文章的连接。2、Java层的CameraService的实现和应用从Camera API2开始,Camera的实现方式有所不同,最主要的区别是不再使用 JNI来调用本 地代码,从而获得本地 CameraService并实现其C/S模式的通信,而是直接在Java层通过 Java层的IPC Binder机制来获取Java层的CameraService的

4、代理对象,从而直接在 Java层获 取本地的CameraService与 Camera Device进行相应的通信。相应的代码及目录:ICameraService.aidl:frameworks/base/core/java/android/hardware CameraService.cpp:frameworks/av/services/camera/libcameraservice CameraManager.java:frameworks/base/core/java/android/hardware/camera2 获取 CameraService 的核心代码如下:/CameraMan

5、ager.javaprvate void connectCameraServiceLocked()if(mCameraService != null)return;/ 获取 BinderIBinder cameraServiceBinder = ServiceManager.getService(CAMERA_SERVICE_BINDER_NAME);if(cameraServiceBinder = null)return;trycameraServiceBinder.linkToDeath(this,/*flags*/ 0);catch(RemoteException e)return;IC

6、ameraService cameraServiceRaw = ICameraService.Stub.asInterface(cameraServiceBinder);/ 根据 cameraServiceRaw 创建 CameraService 实例ICameraService cameraService = CameraServiceDecorator.newInstance(cameraServiceRaw);try/添加监听cameraService.addListener(this);/赋值给 mCameraService 的全局变量mCameraService = cameraSe

7、rvice;catch(CameraRuntimeException e)由代码可知,通过 Java层的Binder从ServiceManager里获取了一个Java层的CameraService 实例,在打开 Camera的流程中,会通过此 CameraService(Native的CameraService与 Camera通信,而其中的通信通过 ICameraDeviceUser来实现,接下来分析 ICameraDeviceUser 的实现。3、ICameraDeviceUser.aidl 的通信实现Java层与C+ CameraService层之间的通信,通过圭寸装了一个 CameraDeviceUser来实现,它 只是在Java层使用了 AIDL技术来实现 Client,即在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论