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.cpp
frameworks/av/camera/Camera.cpp
frameworks/av/camera/ICamera.cpp
frameworks/av/camera/aidl/android/hardware/ICamera.aidl
frameworks/av/camera/aidl/android/hardware/ICameraClient.aidl
- Server:
frameworks/av/camera/cameraserver/main_cameraserver.cpp
frameworks/av/services/camera/libcameraservice/CameraService.cpp
frameworks/av/services/camera/libcameraservice/api1/CameraClient.cpp
frameworks/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 系統源代碼情景分析(修訂版)》 ↩