Android 的Camera 架构介绍 1.1 Camera 概述 Android 的 Camera 包含取景器(viewfinder)和拍摄照片的功能。目前 Android 发布版的Camera 程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在 Android 的进程间通讯 Binder 的结构上。 以开源的Android 为例,Camera 的代码主要在以下的目录中: Camera 的JAVA 程序的路径: packages/apps/Camera/src/com/android/camera/ 在其中 Camera.java 是主要实现的文件 frameworks/base/core/java/android/hardware/Camera.java 这个类是和JNI 中定义的类是一个,有些方法通过 JNI 的方式调用本地代码得到,有些方法自己实现。 Camera 的JAVA 本地调用部分(JNI): frameworks/base/core/jni/android_hardware_Camera.cpp 这部分内容编译成为目标是 libandroid_runtime.so。 主要的头文件在以下的目录中: frameworks/base/include/ui/ Camera 底层库在以下的目录中: frameworks/base/libs/ui/ 这部分的内容被编译成库 libui.so。 Camera 服务部分: frameworks/base/camera/libcameraservice/ 这部分内容被编译成库 libcameraservice.so。 为了实现一个具体功能的Camera,在最底层还需要一个硬件相关的Camer 库(例如通过调用 video for linux驱动程序和Jpeg 编码程序实现)。这个库将被 Camera 的服务库libcameraservice.so 调用。 1.2 Camera 的接口与架构 Camera 的整体框架图 Camera 的各个库之间的结构可以用下图的表示: 在Camera 系统的各个库中,libui.so 位于核心的位置,它对上层的提供的接口主要是Camera 类,类libandroid_runtime.so 通过调用Camera 类提供对JAVA 的接口,并且实现了android.hardw are.camera 类。 libcameraservice.so 是Camera 的服务器程序,它通过继承 libui.so 的类实现服务器的功能,并且与 libui.so 中的另外一部分内容则通过进程间通讯(即 Binder 机制)的方式进行通讯。 libandroid_runtime.so 和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。 Camera 部分的头文件在framew orks/base/include/ui/目录中,这个目录是和libmedia.so 库源文件的目录 framew orks/base/libs/ui/相对应的。 Camera 主要的头文件有以下几个: ICameraClient.h Camera.h ICamera.h ICameraService.h CameraHardw areInterface.h 在这...