网站大量收购独家精品文档,联系QQ:2885784924

androidCamera框架分析.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
androidCamera框架分析

Android的Camera系统分析 一、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程序的框架部分,它主要利用了Android的系统的Binder机制来完成通讯。蓝色的部分通过调用Camera硬件相关的接口完成具体的Camera服务功能,其它的部分是为上层的JAVA程序提供JNI接口。在整体结构上,左边可以视为一个客户端,右边是一个可以视为服务器,二者通过Android的 Bimder来实现进程间的通讯。 二、Camera的工作流程概述: ①.App_main process: 进程通过AndroidRuntime调用register_jni_procs向JNI注册模块的native函数 供JVM调用。 AndroidRuntime::registerNativeMethods(env, android/hardware/Camera, camMethods, NELEM(camMethods)); 其中camMethods定义如下: static JNINativeMethod camMethods[] = { { native_setup, (Ljava/lang/Object;)V, (void*)android_hardware_Camera_native_setup }, { native_release, ()V, (void*)android_hardware_Camera_release }, { setPreviewDisplay, (Landroid/view/Surface;)V, (void *)android_hardware_Camera_setPreviewDisplay }, { startPreview, ()V, (void *)android_hardware_Camera_startPreview }, { stopPreview, ()V, (void *)android_hardware_Camera_stopPreview }, { previewEnabled, ()Z, (void *)android_hardware_Camera_previewEnabled }, { setHasPreviewCallback

您可能关注的文档

文档评论(0)

haocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档