一、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.★) |
|