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
以上是 Camera 與 Android 架構對層次的相關信息。
架構簡圖java
- NOTE:因爲 HAL 層以後的 Device Drivers 部分比較複雜,還須要一段時間去慢慢學習,因此目前先忽略這一部分的內容。android
相關文件位置(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
HAL:
HAL 1:
frameworks/av/services/camera/libcameraservice/device1/CameraHardwareInterface.h
HAL 3:(主要學習了 HAL 1 的機制,HAL 3 之後再補充)
frameworks/av/services/camera/libcameraservice/device3/***
小結
緊接着上一篇關於 Android 基本架構的介紹,先對 Camera 的架構有一個初步的印象。
根據架構簡圖能夠看到,實際上 Camera 的架構與 Android 架構是一一對應的,上層應用調用 Camera 相關的方法後,指令依次經過框架層、運行時環境、本地庫、硬件抽象層,最終到達具體設備。設備執行動做後,得到的數據又會沿着反方向依次發送到最上層。
須要注意的是,在本地庫這一層中,涉及到一個 C/S 結構:
即經過客戶端與服務端的交互來傳遞指令與數據。
實際上,只有服務端與 HAL 層進行溝通。
因爲客戶端與服務端是不一樣的進程,它們之間須要依靠 IPC Binder 機制 來進行通信。(Binder 機制在參考書1中有詳細的分析)
————————————————
api