AndroidCamera框架

上传人:ni****g 文档编号:485515715 上传时间:2023-03-21 格式:DOC 页数:16 大小:340.50KB
返回 下载 相关 举报
AndroidCamera框架_第1页
第1页 / 共16页
AndroidCamera框架_第2页
第2页 / 共16页
AndroidCamera框架_第3页
第3页 / 共16页
AndroidCamera框架_第4页
第4页 / 共16页
AndroidCamera框架_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《AndroidCamera框架》由会员分享,可在线阅读,更多相关《AndroidCamera框架(16页珍藏版)》请在金锄头文库上搜索。

1、Android的Camera架构介绍1.1 Camera 概述An droid的Camera包含取景器(viewfi nder )和拍摄照片的功能。目前An droid发布版的Camera程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它 们建立在An droid的进程间通讯Binder的结构上。以开源的An droid为例,Camera的代码主要在以下的目录中:Camera的JAVA程序的路径:packages/apps/Camera/src/com/a ndroid/camera/在其中Camera.java是主要实现的文件frameworks/base/core/jav

2、a/android/hardware/Camera.java这个类是和JNI中定义的类是一个,有些方法通过JNI的方式调用本地代码得到,有些方法自己实现。Camera的JAVA本地调用部分(JNI):frameworks/base/core/jni/android hardware Camera.cpp这部分内容编译成为目标是liba ndroid_ru ntime.so 。主要的头文件在以下的目录中:frameworks/base/i nclude/ui/Camera底层库在以下的目录中:frameworks/base/libs/ui/这部分的内容被编译成库libui.so。Camera服务

3、部分:frameworks/base/camera/libcameraservice/ 这部分内容被编译成库libcameraservice.so 。为了实现一个具体功能的 Camera,在最底层还需要一个硬件相关的Camer库(例如通过调用video for linux驱动程序和Jpeg编码程序实现)。这个库将被Camera的服务库 libcameraservice.so 调用。1.2 Camera的接口与架构Camera的整体框架图Camera的各个库之间的结构可以用下图的表示:在Camera系统的各个库中,libui.so位于核心的位置,它对上层的提供的接口主要是Camera类,类lib

4、android_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/目录中,这个目录是和libmedia.so

5、库源文件的目录 frameworks/base/libs/ui/相对应的。Camera主要的头文件有以下几个:ICameraClie nt.hCamera.hICamera.hICameraService.hCameraHardwareI nterface.h在这些头文件Camera.h提供了对上层的接口,而其他的几个头文件都是提供一些接口类(即包含了纯虚函数的类),这些接口类必须被实现类继承才能够使用。整个Camera在运行的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现进程间通讯。这样在客户端调用接口,功能 则在服务器中实

6、现,但是在客户端中调用就好像直接调用服务器中的功能,进程间通讯的部分对上层程序不可见。从框架结构上来看,ICameraService.h 、ICameraClient.h 和 ICamera.h 三个类定义了 camera的接口和架构,ICameraService.cpp 和Camera.cpp两个文件用于 Camera架构 的实现,Camera的具体功能在下层调用硬件相关的接口来实现。Androidin:心眄HTCb men H* rd h it rr 1 pt erfirrICiiiik-mClicnt1(.話朮icLCamerahmnch测3石总创ClientServer从Camera的

7、整体结构上,类 Camera是整个系统核心,ICamera类提供了 Camera主要 功能的接口,在客户端方面调用,CameraService 是Camera服务,它通过调用实际的Camera硬件接口来实现功能。事实上,图中红色虚线框的部分都是Camera程序的框架部分,它主要利用了 An droid的系统的Bin der机制来完成通讯。蓝色的部分通过调用 Camera硬件相关的接口完成具体的Camera服务功能,其它的部分是为上层的JAVA程序提供JNI接口。在整体结构上,左边可以视为一个客户端,右边是一个可以视为服务器,二者通过An droid的Bimder来实现进程间的通讯。头文件 IC

8、ameraClient.hICameraClient.h 用于描述一个 Camera 客户端的接口,定义如下所示: class ICameraClient: public IInterfacepublic:DECLARE_META_INTERFACE(CameraClient);virtual void shutterCallback() = 0;virtual void rawCallback(const sp& picture) = 0;virtual void jpegCallback(const sp& picture) = 0;virtual void frameCallback(c

9、onst sp& frame) = 0;virtual void errorCallback(status_t error) = 0;virtual void autoFocusCallback(bool focused) = 0;class BnCameraClient: public BnInterfacepublic:virtual status_t onTransact( uint32_t code,const Parcel& data,Parcel* reply,uint32_t flags = 0);在定义中, ICameraClient 类继承 IInterface ,并定义了一

10、个 Camera 客户端的接口, BnCameraClient 继承了 BnInterface ,这是为基于 Android 的基础类 Binder 机制实现在进程通讯而构建的。根据 BnInterface 类模版的定义 BnInterface 类相当于双继承了 BnInterface 和 ICameraClient 。IcameraClient 这个类的主要接口是几个回调函数 shutterCallback 、 rawCallback 和 jpegCallback 等,它们在相应动作发生的时候被调用。作为 Camera 的 “客户端 ”,需要自 己实现几个回调函数,让服务器程序去 “间接地

11、”调用它们。头文件 Camera.hCamera.h 是 Camera 对外的接口头文件,它被实现 Camera JNI 的文件 android_hardware_Camera.cpp 所调用。 Camera.h 最主要是定义了一个 Camera 类: class Camera : public BnCameraClient, public IBinder: DeathRecipientpublic:static sp connect();Camera();void disconnect();status_t getStatus() return mStatus; status_t setPr

12、eviewDisplay(const sp& surface);status_tstartPreview();voidstopPreview();status_tautoFocus();status_ttakePicture();status_tsetParameters(const String8& params);String8getParameters() const;voidsetShutterCallback(shutter_callback cb, void *cookie);voidsetRawCallback(frame_callback cb, void *cookie);v

13、oidsetJpegCallback(frame_callback cb, void *cookie);voidsetFrameCallback(frame_callback cb, void *cookie);void setErrorCallback(error_callback cb, void *cookie);void setAutoFocusCallback(autofocus_callback cb, void *cookie);/ ICameraClient interfacevirtual voidshutterCallback();virtual voidrawCallba

14、ck(const sp& picture);virtual voidjpegCallback(const sp& picture);virtual voidframeCallback(const sp& frame);virtual voiderrorCallback(status_t error);virtual voidautoFocusCallback(bool focused);/从接口中可以看出 Camera 类刚好实现了一个 Camera 的基本操作,例如播放 ( startPreview )、停止( stopPreview )、 暂停( takePicture )等。在 Came

15、ra 类中 connect() 是一个静态函数,它用于得到一个 Camera 的实例。在这个类中,具有设置回调 函数的 几个函数: setShutterCallback 、 setRawCallback 和 setJpegCallback 等,这几个函数是 为了提供给上层 使用, 上层利用这几个设置回调函数, 这些回调函数在相应的回调函数中 调用,例如使用 setShutterCallback 设置的回调函数指针被 shutterCallback 所调用。在定义中, ICameraClient 类双继承了 IInterface 和 IBinder: DeathRecipient ,并 定义了一个 Camera 客户端的接口, BnCameraClient 继承了 BnInterface ,这是

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号