Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

相機HAL3

Android的相機硬件抽象層(HAL)將android.hardware.camera2中的更高級別的相機框架API連接到基礎相機驅動程序和硬件。 Android 8.0引入了Treble ,將CameraHal API切換到由HAL接口描述語言(HIDL)定義的穩定接口。如果您以前開發了適用於Android 7.0及更低版本的相機HAL模塊和驅動程序,請注意相機管道中的重大更改。

相機HAL3功能

重新設計Android Camera API的目的是在重新組織API以使其更加有效和可維護的同時,大幅提高應用程序控制Android設備上的相機子系統的能力。附加控件使在Android設備上構建可在多個產品上可靠運行的高質量相機應用程序變得更加容易,同時盡可能使用設備特定的算法來最大化質量和性能。

攝像機子系統的版本3將操作模式構造為一個統一的視圖,該視圖可用於實現任何以前的模式以及其他幾種模式,例如連拍模式。這樣可以更好地控制焦點和曝光,並進行更多的後處理,例如降噪,對比度和銳化。此外,這種簡化的視圖使應用程序開發人員可以更輕鬆地使用相機的各種功能。

API將相機子系統建模為管道,以1:1的方式將傳入的幀捕獲請求轉換為幀。這些請求封裝了有關幀捕獲和處理的所有配置信息。這包括分辨率和像素格式;手動傳感器,鏡頭和閃光燈控制; 3A工作模式; RAW-> YUV加工控制;統計生成;等等。

簡而言之,應用程序框架從攝像機子系統請求幀,然後攝像機子系統將結果返回到輸出流。此外,還會為每組結果生成包含諸如色彩空間和鏡頭陰影之類信息的元數據。您可以將攝像機版本3視為通往攝像機版本1的單向流的管道。它將每個捕獲請求轉換為傳感器捕獲的一個圖像,並將其處理為:

  • 具有有關捕獲的元數據的Result對象。
  • 圖像數據的一到N個緩衝區,每個緩衝區到其自己的目標Surface中。

可能的輸出表面集已預先配置:

  • 每個Surface是固定分辨率的圖像緩衝區流的目標。
  • 一次只能將少量Surface配置為輸出(〜3)。

一個請求包含所有所需的捕獲設置以及為此請求將圖像緩衝區推入的輸出Surface的列表(在總配置集中)。一個請求可以是單發(使用capture() ),也可以無限期地重複(使用setRepeatingRequest() )。捕獲優先於重複請求。

相機數據模型

圖1.攝像頭核心操作模型

相機HAL1概述

攝像機子系統的版本1設計為具有高級控件和以下三種操作模式的黑匣子:

  • 預習
  • 錄像帶
  • 靜止捕捉

每種模式具有略微不同且重疊的功能。這使得難以實現新功能,例如突發模式,該模式介於兩種操作模式之間。

相機方框圖

圖2.相機組件

Android 7.0繼續支持相機HAL1,因為許多設備仍依賴它。此外,Android相機服務支持同時實現HAL(1和3),當您想要支持功能不那麼強的帶有相機HAL1的前置相機以及更高級的帶有相機HAL3的背面相機時,這很有用。

有一個攝像機HAL 模塊 (具有自己的版本號 ),該模塊列出了多個獨立的攝像機設備,每個設備都有自己的版本號。相機模塊2或更高版本需要支持設備2或更高版本,並且這樣的相機模塊可以具有相機設備版本的混合(這就是我們所說的Android支持同時實現兩個HAL的意思)。