第七章 Android Camera 框架 7.1 总体介绍 Android Camera 框架从整体上看是一个 client/service 的架构,有两个进程:一个是 client 进程,可以看成是 AP 端,主要包括 JAVA 代码与一些 native c/c++代码;另一个是 service 进程,属于服务端,是 native c/c++代码,主要负责和 linux kernel 中的 camera driver 交互,搜集 linux kernel 中 camera driver 传上来的数据,并交给显示系统(surface)显示。client 进程与service 进程通过 Binder 机制通信,client 端通过调用 service 端的接口实现各个具体的功能。 需要注意的是真正的 preview 数据不会通过 Binder IPC 机制从 service 端复制到 client 端,但会通过回调函数与消息的机制将 preview 数据 buffer 的地址传到 client 端,最终可在 JAVA AP中操作处理这个 preview 数据。 7.2 client端 从 JAVA AP 的角度看 camera ap 就是调用 FrameWork 层的 android.hardware.camera 类来实现具体的功能。JAVA Ap 最终被打包成 APK。 FrameWork 层主要提供了 android.hardware.camera 类给应用层使用,这个类也是 JAVA 代码实 现 。 Android.hardware.camera 类 通 过 JNI 调 用 native 代 码 实 现 具 体 的 功 能 。Android.hardware.camera 类中提供了如下的一个参数类给应用层使用: public class Parameters { // Parameter keys to communicate with the camera driver。 private static final String KEY_PREVIEW_SIZE = "preview-size"; private static final String KEY_PREVIEW_FORMAT = "preview-format"; …… } 参数会以字典(map)的方式组织存储起来,关键字就是 Parameters 类中的这些静态字符串。这些参数最终会以形如“preview-size=640X480;preview-format=yuv422sp;„„”格式的字符串传到 service 端。源代码位于: framework/base/core/java/android/hardware/camera.java 提供的接口示例: 获得一个 android.hardware.camera 类的实例 public static Camera open() { return new Camera(); } 接口直接调用 native 代码(android_hardware_camera.cpp 中的代码) public native final void startPreview(); public native final void stopPreview(); android.hardw are.camera 类的JNI...