• Camera 相关代码分析


    一、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。 
     
     
     
     
    网友评论
    内容:
    前辈,你好,我在linux下已经移植成功摄像头,但是现在不知道如何把摄像头移植到android上,我的思路是修改hardware下的HAL的接口,不知道是这样吗?能给出些思路吗?谢谢

    Blog作者的回复:
    在linux下的驱动支持标准的V4L2 capture接口,然后需要在android增加一个libcamera.xxx.so的库,Android启动时自动加载。你在网上找一个libcamera.so的例子,照着格式修改一下就可以的。

    吖亮评论于:2010-11-08 18:03:56 (121.32.17.★)
    内容:
    好的,谢谢,我现在参照hardware/msm7k/libcamera,应该没问题吧?
    吖亮评论于:2010-11-09 10:22:41 (121.32.115.★)
     
  • 相关阅读:
    数据结构做题一些总结
    ExecuteNoQuery执行, 报错“go”附近有语法错误。
    EF总结
    哨兵模式
    Redis 发布订阅
    Redis 持久化
    Redis 事务 和乐观锁
    缓存穿透和雪崩
    Redis 基础知识
    Redis 三种特殊的数据类型
  • 原文地址:https://www.cnblogs.com/simonshi/p/1967387.html
Copyright © 2020-2023  润新知