android Camera模組分析

來源:互聯網
上載者:User

   Android Camera Module Architecture and Bottom layer communication mechanism
             -----------albertChen
Android應用程式程式設計語言是JAVA,而linux的很多服務程式,包括一些libraries都是用c 或者c++寫的,應用程式使用什麼樣的機制去調用這些系統函數的呢?Java的虛擬機器可以通過 System.loadLibrary 來載入本地庫,也可以通過JNI函數 RegisterNatives來註冊與類相關聯的本地方法。在Android中對於一些底層平台相關的native函數大多採用註冊關聯的方式來調用。
系統啟動後兩個重要的process:
1:App_main process: 進程通過AndroidRuntime調用register_jni_procs向JNI註冊模組的native函數供JVM調用。
2:Mediaserver proces:進程註冊了以下幾個server:
AudioFlinger, MediaPlayerServer;CameraService.

Android Camera Application調用native 函數流程:
  首先Android Runtime調用register_android_hardware_Camera註冊Camera相關的navtive函數到JNI。然後調用android_hardware_Camera_native_setup為Application建立一個client 通過openCameraHardware開啟裝置,並串連到CameraServer。Application 開啟preview的過程與Application建立到CameraService之間串連相似。這個過程如:

 

 

 

 

 

 

 

 

 

 

  從上面可以看出在JAVA VM 與native之間存在一個非常重要的串連層JNI即JAVA Native Interface。Android1.0平台提供了Camera相關的native介面,如果這些介面不夠的話,通過這種機制我們可以方便的進行擴充,但是我們自己擴充的介面是與我們的硬體平台相關的,並不是Android官方支援的。網上有人說Android1.0不支援JNI,Android無法執行本地JNI調用,但從Android源碼來看是乎不存在這種情況,至少是支援註冊與類相關聯的本地方法。

 

 

 

 

 

 

 

 

 

                Android Architecture

JAVA process 與Native process之間的通訊
     Native process姑且認為是以c,c++語言編寫服務程式(是獨立的一個進程)。JAVA process是通常說的Android Application。還是Camera模組為例。我們要建立Camera Object,與CameraService Object之間的通訊。
JAVA Application調用native_setup在CameraService中建立了一個Camera用戶端,用戶端通過getCameraService取得CameraSevice中的IBinder對象,為JAVA Application 與CamerService之間建立了一個介面ICameraService,通過這個介面我們調用BpCameraService::connect 實際上通過前面取得的IBinder對象將調用CameraService::onTransact函數在這個函數中再調用BnCameraSrvice::onTransact至此JAVA Application與CameraService之間的訊息管道建立完畢。

 

 

 

 

 

 


 

中,Camera.jar Camera.cpp,ICamera, ICameraService的對象都屬於java application process,當兩個object之間的通訊建立完畢,java application通過ICamera介面向CameraService中Camera Client發送訊息。
在Native層,不同進程間兩個對象需要傳遞訊息需要繼承IBinder介面,如果一個對象只需要發起串連可以繼承IBinder的擴充介面BpInterface,如果需要接受串連請求可以繼承BnInterface介面,比如在ICamera.cpp中有兩個介面BpCamera與BnCamera,BpCamera用於發送訊息,BnCamera由CameraService繼承,最近訊息響應通過BnCamera調用CameraService::client對象處理訊息。
AudioRecord,AudioFinger,MediaPlayer其底層介面實現方式與Camera類似。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.