- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android_Camera架构分析
Android的Camera架构一 Android Camera框架要了解Android Camera架构,还是得先从Android本身的架构说起。图1 Android Architecture从Android框架看,分为四层:应用层、应用框架层、库层、内核层。应用层主要工作在Android SDK之上,利用Android 提供的API进行开发,生成APK包。应用框架层整合了Android自带各种控件和类,为应用开发提供高效、方便的API接口。这个对上实现统一的接口,对下也提供统一的标准方便各种库的移入。库层是Android与底层硬件通信接口,它封装底层硬件接口实现该模块的具体逻辑,并以服务的形式通过Binder通讯机制暴露给应用框架。内核层则是直接与硬件联系的一层,可以理解为设备驱动。通过对上面框架的简要说明,我们大致明白一个应用自上而下的各个层起什么作用,这样有助于我们对代码的理解和修改。如果要做基于Android porting工作,就要明白在哪个层次的porting,怎么porting。Android的Camera包含取景器(viewfinder)和拍摄照片(take picture)的功能。目前Android原生的Camera程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。Android中的Camera模块同样遵循Android的框架,如下图所示。图2 Camera Architecture二 Android Camera架构分层及代码结构 以开源的 Android 为例,Camera 架构主要分为以下几个层次2.1应用层Camera 的 JAVA应用程序的路径:packages/apps/Camera/src/com/android/camera/在其中Camera.java是主要实现的文件2.2 JNI层(Camera 的 JAVA 本地调用部分):frameworks/base/core/java/android/hardware/Camera.java这个类是和JNI中定义的类是同一个,有些native方法通过JNI的方式调用Native代码实现具体的功能,比如startPreview、autoFocus、takePicture等。2.3 Camera client层:头文件分布以下的目录中:frameworks/base/include/camera/Camera底层库在以下的目录中:frameworks/base/libs/camera/这部分的内容被编译成库 libcamera_client.so(或者libui.so),主要实现了以下几个类:Camera----Camera.cpp/Camera.hCameraParameters----CameraParameters.cpp/CameraParameters.hICamera---- ICamera.cpp/ ICamera.hICameraClient---- ICameraClient.cpp/ ICameraClient.hICameraService---- ICameraService.cpp/ ICameraService.hICamera、ICameraClient、ICameraServide三个类是按照Binder IPC通信要求的框架实现的, 用来与service端通信。类CameraParameters接收Framework层的android.hardware.camera::Parameters类为参数, 解析与格式化所有的参数配置。Camera是个很重要的类,它与Camera Service端通过Binder IPC机制交互来实现具体功能。Cametra继承自BnCameraClient,并最终继承自ICameraClient.2.4 Camera Service层文件分布在frameworks/base/camera/libcameraservice/这部分内容被编译成库libcameraservice.so, libcameraservice.so是Camera的服务器程序,它通过继承libcamera_client.so的类实现服务器的功能,并且与libcamera_client.so中的另外一部分内容则通过进程间通讯(即Binder机制)的方式进行通讯。里面主要实现了两个类:CameraService----BnCameraService----ICameraServiceCameraService::Client----BnCamera----ICameraCameraService::Client通过调用Camera HAL层来实现具体
文档评论(0)