1. 程式人生 > >Android [Camera 原始碼] 相機 HAL3(Camera3) Google官方文件(二)

Android [Camera 原始碼] 相機 HAL3(Camera3) Google官方文件(二)

Google原始碼網地址連結:https://source.android.com/devices/camera

該Google Camera的文件為系列文章,文章列表:

overview

Camera3

HAL Subsystem

Metadata and Controls

3A Modes and State

Output and Cropping

Errors and Streams

Request Creation

External USB Cameras

Multi-Camera Support

Motion Tracking

Session Parameters

Single Producer,Multiple Consumer

Version Support

 

相機 HAL3


Android 的相機硬體抽象層 (HAL) 可將 android.hardware.camera2 中較高級別的相機框架 API 連線到底層的相機驅動程式和硬體。Android 8.0 引入了 Treble,用於將 CameraHal API 切換到由 HAL 介面描述語言 (HIDL) 定義的穩定介面。如果您之前為舊版 Android 開發過相機 HAL 模組和驅動程式,請注意相機管道中發生的重大變化。

相機 HAL3 功能
重新設計 Android Camera API 的目的在於大幅提高應用對於 Android 裝置上的相機子系統的控制能力,同時重新組織 API,提高其效率和可維護性。藉助額外的控制能力,您可以更輕鬆地在 Android 裝置上構建高品質的相機應用,這些應用可在多種產品上穩定執行,同時仍會盡可能使用裝置專用演算法來最大限度地提升質量和效能。

版本 3 相機子系統將多個執行模式整合為一個統一的檢視,您可以使用這種檢視實現之前的任何模式以及一些其他模式,例如連拍模式。這樣一來,便可以提高使用者對聚焦、曝光以及更多後期處理(例如降噪、對比度和銳化)效果的控制能力。此外,這種簡化的檢視還能夠使應用開發者更輕鬆地使用相機的各種功能。

API 將相機子系統塑造為一個管道,該管道可按照 1:1 的基準將傳入的幀捕獲請求轉化為幀。這些請求會封裝有關幀的捕獲和處理的所有配置資訊,其中包括解析度和畫素格式;手動感測器、鏡頭和閃光燈控制元件;3A 執行模式;RAW->YUV 處理控制元件;統計資訊生成等等。

簡單來說,應用框架從相機子系統請求幀,然後相機子系統將結果返回到輸出流。此外,系統還會針對每組結果生成包含色彩空間和鏡頭陰影等資訊的元資料。您可以將相機版本 3 看作相機版本 1 的單向流管道。它會將每個捕獲請求轉化為感測器捕獲的一張影象,這張影象將被處理成:

  • 包含有關捕獲的元資料的結果物件。
  • 影象資料的 1 到 N 個緩衝區,每個緩衝區會進入自己的目的地 Surface。

可能的輸出 Surface 組經過預配置:

  • 每個 Surface 都是一個固定解析度的影象緩衝區流的目標位置。
  • 一次只能將少量 Surface 配置為輸出(約 3 個)。

一個請求中包含所需的全部捕獲設定,以及要針對該請求將影象緩衝區(從總配置組)推送到其中的輸出 Surface 的列表。請求可以只發生一次(使用 capture()),也可以無限重複(使用 setRepeatingRequest())。捕獲的優先順序高於重複請求的優先順序。

圖 2. 相機核心操作模型

 

相機 HAL1 概覽


注意:相機 HAL1 已棄用。新裝置應使用相機 HAL3。
相機子系統的第 1 個版本被設計為具有高階控制元件和以下三種執行模式的黑盒子:

  • 預覽
  • 視訊錄製
  • 靜態拍攝

三種模式具有略有不同又相互重疊的功能。這樣就難以實現介於其中兩種執行模式之間的新功能,例如連拍模式。


圖 1. 相機元件

由於很多裝置仍然依賴相機 HAL1,因此 Android 7.0 繼續支援該模組。此外,Android 相機服務還支援同時實現兩種 HAL(1 和 3),如果您希望通過相機 HAL1 支援效能略低的前置攝像頭,並通過相機 HAL3 支援更為高階的後置攝像頭,那麼這項支援將非常有用。

有一種單獨的相機 HAL 模組(擁有自己的版本號),其中列出了多種獨立的相機裝置,每種都有自己的版本號。要支援裝置 2 或更新版本,必須使用相機模組 2 或更新版本,而且此類相機模組可以具有混合的相機裝置版本(我們在上文中提到 Android 支援同時實現兩種 HAL,就是這個含義)。