Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183190
  • 博文数量: 63
  • 博客积分: 725
  • 博客等级: 军士长
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-12 19:55
文章分类

全部博文(63)

文章存档

2012年(35)

2011年(28)

分类:

2012-02-21 23:45:17


一、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。 
 
 
 
 
 

 
阅读(1030) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~