一、Camera概述
1、Camera的JAVA程序的路径:
packages/apps/Camera/src/com/android/camera/
其中Camera.java是主要实现的文件
frameworks/base/core/java/android/hardware/Camera.java
这个类是和JNI中定义的类是一个,有些方法通过JNI的方式调用本地代码得到,有些方法自己实
现。
2、Camera的JAVA本地调用部分(JNI):
frameworks/base/core/jni/android_hardware_Camera.cpp
主要的头文件在以下的目录中:
frameworks/base/include/ui/
这部分内容编译成为目标是libandroid_runtime.so。
3、Camera底层库在以下的目录中:
frameworks/base/libs/ui/
这部分的内容被编译成库libui.so。
4、Camera服务部分:
frameworks/base/camera/libcameraservice/
这部分内容被编译成库libcameraservice.so。
5、Camera硬件接口层
frameworks/base/include/ui/CameraHardwareInterface.h
为了实现一个具体功能的Camera,在最底层还需要一个硬件相关的Camer库(例如通过调用
video for linux驱动程序和Jpeg编码程序实现)。这个库将被Camera的服务库
libcameraservice.so调用。
二、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工作流程概述
1、App_main process:
进程通过AndroidRuntime调用register_jni_procs向JNI注册模块的native函数供JVM调用。
AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera",
camMethods,NELEM(camMethods));
2、Mediaserver proces:
进程注册了以下几个server: AudioFlinger、 MediaPlayerServer、CameraService。
阅读(1102) | 评论(0) | 转发(0) |