Camera 架構
- NOTE:這是
Android Camera API 1的相關架構。 - Camera 的架構與 Android 整體架構是保持一致的:
- Framework :
Camera.java - Android Runtime :
android_hardware_Camera.cpp - Library :
Client (Camera.cpp, ICameraClient.cpp, etc...)Server (CameraService.cpp, ICameraService.cpp, etc...)
- HAL :
CameraHardwareInterface.h
- Framework :
- 以上是
Camera與Android架構對層次的相關信息。
架構簡圖
- NOTE:由於 HAL 層之后的 Device Drivers 部分比較復雜,還需要一段時間去慢慢學習,所以目前先忽略這一部分的內容。
相關文件位置(Android 7.1 源碼)
- Application:(這部分不是學習的重點)
packages/apps/Camera2/src/com/android/camera/***
- Framework:
/frameworks/base/core/java/android/hardware/Camera.java
- Android Runtime:
frameworks/base/core/jni/android_hardware_Camera.cpp
- C/C++ Libraries:
- Client:
frameworks/av/camera/CameraBase.cppframeworks/av/camera/Camera.cppframeworks/av/camera/ICamera.cppframeworks/av/camera/aidl/android/hardware/ICamera.aidlframeworks/av/camera/aidl/android/hardware/ICameraClient.aidl
- Server:
frameworks/av/camera/cameraserver/main_cameraserver.cppframeworks/av/services/camera/libcameraservice/CameraService.cppframeworks/av/services/camera/libcameraservice/api1/CameraClient.cppframeworks/av/camera/aidl/android/hardware/ICameraService.aidl
- Client:
- HAL:
- HAL 1:
frameworks/av/services/camera/libcameraservice/device1/CameraHardwareInterface.h
- HAL 3:(主要學習了
HAL 1的機制,HAL 3以后再補充)
frameworks/av/services/camera/libcameraservice/device3/***
- HAL 1:
小結
- 緊接着上一篇關於
Android基本架構的介紹,先對Camera的架構有一個初步的印象。 - 根據架構簡圖可以看到,實際上
Camera的架構與Android架構是一一對應的,上層應用調用Camera相關的方法后,指令依次通過框架層、運行時環境、本地庫、硬件抽象層,最終到達具體設備。設備執行動作后,獲得的數據又會沿着反方向依次發送到最上層。 - 需要注意的是,在本地庫這一層中,涉及到一個
C/S結構:
- 即通過客戶端與服務端的交互來傳遞指令與數據。
- 實際上,只有服務端與 HAL 層進行溝通。
- 由於客戶端與服務端是不同的進程,它們之間需要依靠
IPC Binder 機制來進行通訊。(Binder 機制在參考書1中有詳細的分析)
- 在下一篇記錄中,從
Camera.java中的Open()方法開始,把打開攝像頭的一個流程(從Framework到HAL)走一遍。
- 《Android 系統源代碼情景分析(修訂版)》 ↩
