相機 HAL

Android 的相機硬體抽象層 (HAL) 會連接較高等級 相機架構 API android.hardware.camera2 內建的相機驅動程式和硬體 從 Android 13 開始,相機 HAL 介面開發作業會使用 AIDL。Android 8.0 推出了 Treble,將相機 HAL API 切換至由 HAL 介面描述語言 (HIDL) 定義的穩定介面。如果您先前已開發 Android 7.0 的相機 HAL 模組和驅動程式 但請留意 變更相機管道的擷取作業

AIDL 相機 HAL

對於搭載 Android 13 以上版本的裝置,相機架構則支援 AIDL 相機 HAL。相機架構也支援 HIDL 相機 HAL,但在 Android 13 以上版本中新增的相機功能只能透過 AIDL 相機 HAL 介面使用。如要在升級至 Android 13 以上版本的裝置上實作這類功能,裝置製造商必須將 HAL 程序從使用 HIDL 相機介面,遷移至 AIDL 相機介面。

若要瞭解 AIDL 的優點,請參閱: HAL 適用的 AIDL

導入 AIDL 相機 HAL

如需 AIDL 相機 HAL 的參考實作參考資料,請參閱 hardware/google/camera/common/hal/aidl_service/

AIDL 相機 HAL 規格位於以下位置:

對於要遷移至 AIDL 的裝置,裝置製造商可能需要修改 根據程式碼而定的 Android SELinux 政策 (sepolicy) 和 RC 檔案 成本中心的架構

驗證 AIDL 相機 HAL

如要測試 AIDL 相機 HAL 實作,請確保裝置通過所有 CTS 和 VTS 測試。Android 13 導入 AIDL VTS 測試 VtsAidlHalCameraProvider_TargetTest.cpp

相機 HAL3 功能

重新設計 Android Camera API 的目標,是大幅提升應用程式控制 Android 裝置相機子系統的能力,同時重新整理 API 以提升效率和可維護性。有了額外的控制選項,您就能更輕鬆地在 Android 裝置上建構高品質相機應用程式,在多種產品上穩定運作,同時盡可能使用裝置專屬演算法,盡可能提高品質和效能。

第 3 版相機子系統將運作模式結構為 單一整合式資料檢視,可用來導入任何先前模式 還有節拍模式等其他選項這樣一來,您就能進一步掌控 聚焦與曝光,以及更多後續處理,例如雜訊抑制、對比度 以及銳化此外,這個簡化的檢視畫面可讓應用程式開發人員更輕鬆地使用相機的各種功能。

API 會將相機子系統建立成管道,藉此將傳入的傳入資料 將擷取的影格擷取到影格中,並按 1:1 進行。請求 封裝與裝置擷取和處理詳細資料相關的所有設定資訊 相框。包括解析度和像素格式、手動感應器、鏡頭和閃光燈控制、3A 運作模式、RAW 至 YUV 處理控制、統計資料產生等。

簡單來說,應用程式架構會向相機子系統要求影格,而相機子系統會將結果傳回至輸出串流。於 此外,中繼資料也包含色域、透鏡等資訊 系統會為每組結果產生陰影。請想到相機第 3 版 並當做是相機第 1 版單向串流的管道。它會將每個擷取要求轉換為感應器所擷取的單一圖片,並將該圖片處理成:

  • 結果物件,其中包含擷取畫面相關的中繼資料。
  • 一到 N 個圖片資料緩衝區,每個都會放入專屬的目的地途徑。

可能的輸出介面已預先設定:

  • 每個途徑都是固定解析度的圖片緩衝區串流目的地。
  • 一次只能將少數幾個介面設定為輸出 (約 3 個)。

要求中包含所有需要的擷取設定和輸出清單 將圖片緩衝區推送至這項要求的介面 (佔所有要求的 )。要求可以是一次性 (使用 capture()) 或 可能會無限期重複 (搭配 setRepeatingRequest())。擷取內容 優先順序高於重複要求

相機資料模型

圖 1. 相機核心作業模式

相機 HAL1 總覽

相機子系統第 1 版的設計為黑盒子,具有高階控制選項和下列三種操作模式:

  • 預覽
  • 錄影
  • 靜態擷取

每種模式的功能略有不同且重疊。這使得難以實作連拍模式等新功能,因為連拍模式介於兩種運作模式之間。

攝影機模塊圖

圖 2. 相機元件

Android 7.0 仍支援相機 HAL1,因為許多裝置仍仰賴這項功能。此外,Android 相機服務也支援實作這兩種 HAL (1 和 3),如果您要支援功能較差的前端介面 相機 HAL1 和更高階的後置鏡頭 HAL3:

單一相機 HAL 模組 (具有專屬版本號碼) 會列出多個獨立的相機裝置,每個裝置都有專屬的版本號碼。必須安裝 2 以上版本的相機模組才能支援 裝置 2 以上版本,這類相機模組可能會混用不同相機裝置 版本 (我們稱 Android 支援同時實作這兩種方法) HAL)。