Chinaunix首页 | 论坛 | 博客
  • 博客访问: 250164
  • 博文数量: 26
  • 博客积分: 1425
  • 博客等级: 上尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-14 23:54
文章存档

2010年(26)

我的朋友

分类: 嵌入式

2010-09-27 20:56:42


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

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

chinaunix网友2010-12-28 15:57:52

博主,您好,请问video capture not supported,这个错误是不是我的usb摄像头不支持video capture这个功能呢?

chinaunix网友2010-11-09 10:22:41

好的,谢谢,我现在参照hardware/msm7k/libcamera,应该没问题吧?

chinaunix网友2010-11-08 18:03:56

前辈,你好,我在linux下已经移植成功摄像头,但是现在不知道如何把摄像头移植到android上,我的思路是修改hardware下的HAL的接口,不知道是这样吗?能给出些思路吗?谢谢