Camera 相關程式碼分析

來源:互聯網
上載者:User
一、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.★)
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.