欢迎来到天天文库
浏览记录
ID:6049920
大小:63.50 KB
页数:11页
时间:2018-01-01
《android的camera架构介绍 (转)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、查看文章 Android的Camera架构介绍(转)2009-05-1222:55第一部分Camera概述 Android的Camera包含取景器(viewfinder)和拍摄照片的功能。目前Android发布版的Camera程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。以开源的Android为例,Camera的代码主要在以下的目录中:Camera的JAVA程序的路径:packages/apps/Camera/src/com/android/camera/在其中Camera.java是主要实现的文件frame
2、works/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/这部分的内容被编译成
3、库libui.so。Camera服务部分:frameworks/base/camera/libcameraservice/这部分内容被编译成库libcameraservice.so。为了实现一个具体功能的Camera,在最底层还需要一个硬件相关的Camer库(例如通过调用videoforlinux驱动程序和Jpeg编码程序实现)。这个库将被Camera的服务库libcameraservice.so调用。第二部分Camera的接口与架构2.1Camera的整体框架图Camera的各个库之间的结构可以用下图的表示: 在Camera系统的各个库中,libui.so位于核心的位置,它对上层的
4、提供的接口主要是Camera类,类libandroid_runtime.so通过调用Camera类提供对JAVA的接口,并且实现了android.hardware.camera类。libcameraservice.so是Camera的服务器程序,它通过继承libui.so的类实现服务器的功能,并且与libui.so中的另外一部分内容则通过进程间通讯(即Binder机制)的方式进行通讯。libandroid_runtime.so和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。Camera部分的头文件在frameworks/base/include/ui/目录中,这
5、个目录是和libmedia.so库源文件的目录frameworks/base/libs/ui/相对应的。Camera主要的头文件有以下几个: ICameraClient.h Camera.h ICamera.h ICameraService.h CameraHardwareInterface.h在这些头文件Camera.h提供了对上层的接口,而其他的几个头文件都是提供一些接口类(即包含了纯虚函数的类),这些接口类必须被实现类继承才能够使用。整个Camera在运行的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中
6、运行,它们之间使用Binder机制实现进程间通讯。这样在客户端调用接口,功能则在服务器中实现,但是在客户端中调用就好像直接调用服务器中的功能,进程间通讯的部分对上层程序不可见。从框架结构上来看,ICameraService.h、ICameraClient.h和ICamera.h三个类定义了MeidaPlayer的接口和架构,ICameraService.cpp和Camera.cpp两个文件用于Camera架构的实现,Camera的具体功能在下层调用硬件相关的接口来实现。从Camera的整体结构上,类Camera是整个系统核心,ICamera类提供了Camera主要功能的接口,在客户端方面
7、调用,CameraService是Camera服务,它通过调用实际的Camera硬件接口来实现功能。事实上,图中红色虚线框的部分都是Camera程序的框架部分,它主要利用了Android的系统的Binder机制来完成通讯。蓝色的部分通过调用Camera硬件相关的接口完成具体的Camera服务功能,其它的部分是为上层的JAVA程序提供JNI接口。在整体结构上,左边可以视为一个客户端,右边是一个可以视为服务器,二者通过Android的B
此文档下载收益归作者所有