Android Camera 流程學習記錄(一)—— Camera 基本架構




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
  • 以上是 CameraAndroid 架構對層次的相關信息。

架構簡圖

架構簡圖
- 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
  • 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中有詳細的分析)
  • 在下一篇記錄中,從 Camera.java 中的 Open() 方法開始,把打開攝像頭的一個流程(從 FrameworkHAL)走一遍。


  1. 《Android 系統源代碼情景分析(修訂版)》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM