1 / 53
文档名称:

Camera API2分析.doc

格式:doc   大小:1,070KB   页数:53页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

Camera API2分析.doc

上传人:2286107238 2019/11/14 文件大小:1.04 MB

下载得到文件列表

Camera API2分析.doc

相关文档

文档介绍

文档介绍:,(Lollipop)开始对Camera的架构进行了调整,为了适应HAL3,新添加实现了CameraDeviceClient,(即可能在更新的版本里会不支持此API).1、,+下的Camera的总体架构图:由图可知,Java层要想与C++层的CameraService层进行通信,都是通过Java层的IPCBinder进制进行的,,其会在Java层维护一个CameraDeviceImpl即Camera设备的代理,而CameraService以及CameraDeviceImpl的初始化会在此文的第二,第三节进行分析。而Java层对Camera的具体操作的操作流程大致为,Java层通过Device代理发送一个CaptureRequest,而C++层进行相应的处理,再调用相应的回调来通知Java相应的处理结果,并将相应的Capture数据保存在SurfaceBuffer里,这样Java层在回调函数中可以对数据进行相应的处理。而对于具体操作流程的分析,请参考文章开始时的Camera2相关文章的连接。2、Java层的CameraService的实现和应用从CameraAPI2开始,Camera的实现方式有所不同,最主要的区别是不再使用JNI来调用本地代码,从而获得本地CameraService,并实现其C/S模式的通信,而是直接在Java层通过Java层的IPCBinder机制来获取Java层的CameraService的代理对象,从而直接在Java层获取本地的CameraService与CameraDevice进行相应的通信。相应的代码及目录::frameworks/base/core/java/android/:frameworks/av/services/camera/:frameworks/base/core/java/android/hardware/camera2获取CameraService的核心代码如下://(){if(mCameraService!=null)return;//获取BinderIBindercameraServiceBinder=(CAMERA_SERVICE_BINDER_NAME);if(cameraServiceBinder==null){return;}try{(this,/*flags*/0);}catch(RemoteExceptione){return;}ICameraServicecameraServiceRaw=(cameraServiceBinder);//根据cameraServiceRaw创建CameraService实例ICameraServicecameraService=(cameraServiceRaw);...try{//(this);//赋值给mCameraService的全局变量mCameraService=cameraService;}catch(CameraRuntimeExceptione){...}}由代码可知,通过Java层的Binder从ServiceManager里获取了一个Java层的CameraService实例,在打开Camera的流程中,会通过此CameraService(Native的CameraService)与Camera通信,而其中的通信通过ICameraDeviceUser来实现,接下来分析ICameraDeviceUser的实现。3、