Android的Camera系统分析 (补汉6个汉字字).doc
文本预览下载声明
Android的Camera系统分析
一、Camera构架分析
Android 的Camera包含取景(preview)和拍摄照片(take picture)的功能 。目前Android发布版的Camera程序 虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。Android中Camera模块同样遵循Andorid的框架,如下图所示
Camera Architecture
Camera模块主要包含了libandroid_runtime.so、libui.so和libcameraservice.so等几个库文件 ,它们之间的调用关系如下所示:
在Camera模块的各个库中,libui.so位于核心的位置,它对上层的提供的接口主要是Camera类。
libcameraservice.so是Camera的server程序,它通过继承libui.so中的类实现server的功能,并且与libui.so中的另外一部分内容通过进程间通讯(即Binder机制)的方式进行通讯。
libandroid_runtime.so和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。整个Camera在运行 的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现进程间通讯。这样在client 调用接口,功能则在server中实现,但是在client中调用就好像直接调用server中的功能,进程间通讯的部分对上层程序不可见。
从框架结构上来看,源码 中ICameraService.h、ICameraClient.h和ICamera.h三个类定义 了MeidaPlayer的接口和 架构,ICameraService.cpp和Camera.cpp两个文件则用于Camera架构的实现,Camera的具体功能在下层调用硬件相关的接 口来实现。
从Camera的整体结构上,类Camera是整个系统 核心,ICamera类提供了Camera主要功能的接口,在客户端方面调用;CameraService是Camera服务,它通过调用实际的Camera硬件接口来实现功能。事实上,图中红色虚线框的部分都是Camera程序的框架部分,它主要利用了Android的系统的Binder机制来完成通讯。蓝色的部分通过调用Camera硬件相关的接口完成具体的Camera服务功能,其它的部分是为上层的JAVA程序提供JNI接口。在整体结构上,左边可以视为一个客户端,右边是一个可以视为服务器,二者通过Android的 Bimder来实现进程间的通讯。
二、Camera的工作流程概述:
①.App_main process: 进程通过AndroidRuntime调用register_jni_procs向JNI注册模块的native函数 供JVM调用。
AndroidRuntime::registerNativeMethods(env, android/hardware/Camera,
camMethods, NELEM(camMethods));
其中camMethods定义如下:
static JNINativeMethod camMethods[] = {
{ native_setup,
(Ljava/lang/Object;)V,
(void*)android_hardware_Camera_native_setup },
{ native_release,
()V,
(void*)android_hardware_Camera_release },
{ setPreviewDisplay,
(Landroid/view/Surface;)V,
(void *)android_hardware_Camera_setPreviewDisplay },
{ startPreview,
()V,
(void *)android_hardware_Camera_startPreview },
{ stopPreview,
()V,
(void *)android_hardware_Camera_stopPreview },
{ previewEnabled,
()Z,
(void *)android_hardware_Camera_previewEnabled },
{ setHasPreviewCallback
显示全部