轉自:https://www.jianshu.com/p/bac0e72351e4
總體框圖
應用架構:應用代碼位于應用架構級别,它使用 Camera 2 API 與相機硬體進行互動。在内部,這些代碼會調用相應的 Binder 接口,以通路與相機互動的原生代碼。
AIDL:與 CameraService 關聯的 Binder 接口可在 frameworks/av/camera/aidl/android/hardware 中找到。生成的代碼會調用較低級别的原生代碼以擷取對實體相機的通路權限,并傳回用于在架構級别建立 CameraDevice 并最終建立 CameraCaptureSession 對象的資料。
原生架構:此架構位于
frameworks/av/
中,并提供相當于 CameraDevice 和 CameraCaptureSession 類的原生類。另請參閱 NDK camera2 參考。
Binder IPC 接口:IPC binder 接口用于實作跨越程序邊界的通信。調用相機服務的若幹個相機 Binder 類位于
frameworks/av/camera/camera/aidl/android/hardware
目錄中。 ICameraService 是相機服務的接口;ICameraDeviceUser 是已打開的特定相機裝置的接口;ICameraServiceListener 和 ICameraDeviceCallbacks 分别是對應用架構的 CameraService 和 CameraDevice 回調。
相機服務:位于 frameworks/av/services/camera/libcameraservice/CameraService.cpp 下的相機服務是與 HAL 進行互動的實際代碼。
HAL:硬體抽象層定義了由相機服務調用、且您必須實作以確定相機硬體正常運作的标準接口。