Android 具有允許相機用戶端的功能 以便選擇最適合的相機 以及確保特定串流組合 都受到相機裝置支援「串流設定」是指在相機裝置中設定的單一相機串流,「串流組合」則是指在相機裝置中設定的一或多組串流。如要進一步瞭解 這些功能,請見 建議的串流設定和 透過 API 查詢特徵組合。
參照實作
建議的設定串流和 API 可查詢串流組合功能,皆有供應商端參考實作項目。您可以 導入 QCamera3HWI.cpp
建議的串流設定
攝影機供應商可針對特定用途宣傳建議的串流設定 要將案件提供給相機用戶端這些建議的串流設定是 StreamConfigurationMap 的子集,可協助攝影機用戶端選擇最佳設定。
雖然 StreamConfigurationMap 向相機用戶端提供詳盡的串流設定資訊 沒有提供任何關於效率、電力或效能的資訊 選擇串流的影響相機用戶端可自由選擇 所有可能的串流設定,但在許多情況下,這會導致 客戶的相機設定和應用程式 非常耗時的詳盡搜尋
舉例來說,雖然系統需要並支援某些經過處理的 YUV 格式,但相機裝置可能不支援這些格式。這個 會產生額外的格式轉換處理過程,並減少 效率。尺寸和對應的顯示比例也可以 因此,就讓某些維度的權力和影響力 才需進行
與 StreamConfigurationMap 相比,建議的串流設定對應項目不必完整。建議的設定對應必須符合 部分,且可包含 廣告空間名稱包含格式、大小或其他值 StreamConfigurationMap。 在 StreamConfigurationMap 中找不到隱藏的格式、大小或其他值 無法加入建議的串流設定對應。
所有測試都保持不變,不會根據建議的串流設定放寬。
以下為實作相機提供的建議串流設定: 選用,而相機用戶端可以忽略這些參數。
實作
請按照下列步驟實作這項功能。
中繼資料項目
如要啟用此功能,相機 HAL 必須填入下列靜態資料 中繼資料項目:
android.scaler.availableRecommendedStreamConfigurations
: 針對特定用途,建議一部分的串流設定。宣告會使用位圖,以[1 << PREVIEW | 1 << RECORD..]
的形式指出建議的用途。這些用途會將常規 (格式、寬度、高度、輸入) 元組擴充至一個額外的項目。非現有公開用途,或是範圍中設定的其他位元 禁止使用[PUBLIC_END, VENDOR_START]
。這類資訊會儲存在
availableRecommendedStreamConfigurations
中繼資料標記。以下範例顯示建議串流的陣列 且僅支援 4K 和 1080p 畫質的相機裝置,其中 兩種解析度都適合錄影,但只支援 1080p 建議用於預覽。
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
android.depth.availableRecommendedDepthStreamConfigurations
(僅限裝置支援時提供):建議的深度資料空間串流設定,適用於此攝影機裝置。與上述中繼資料項目類似,額外的用途點陣圖會指出建議的用途。這類資訊會儲存在
availableRecommendedInputOutputFormatsMap
中繼資料標記。android.scaler.availableRecommendedInputOutputFormatsMap
(可用 僅限裝置支援):建議圖片格式的對應建議圖片格式 推薦給這部相機裝置 以及對應的輸出格式這項資訊會儲存在
availableRecommendedDepthStreamConfigurations
中繼資料標記中。
相機用戶端可透過 RecommendedStreamConfigurationMap 也能使用 Google Cloud CLI 或 Compute Engine API
必要用途
必須為下列用途提供建議的串流設定 並符合相關規定:
用途 | 規定 |
---|---|
PREVIEW |
預覽畫面只能包含非停滯的處理串流設定,並使用 YUV_420_888 和 IMPLEMENTATION_DEFINED 等輸出格式。 |
RECORD |
影片記錄必須包含與通告相符的串流設定
支援的媒體設定檔
格式為 IMPLEMENTATION_DEFINED 。 |
VIDEO_SNAPSHOT |
影片快照必須包含的串流設定,至少須符合 最大 RECORD 解析度,且僅適用於 BLOB + DATASPACE_JFIF 格式/資料空間組合 (JPEG)。設定 應該不會造成預覽出現問題,且應能以 30 fps 放送。 |
SNAPSHOT |
快照串流設定必須至少包含一個大小接近 android.sensor.info.activeArraySize 的 BLOB + DATASPACE_JFIF 格式/資料空間組合 (JPEG)。考量中
長寬比、一致性和其他供應商特有限制的限制;
建議大小上限的面積不應小於感應器的 97%
陣列大小區域。 |
ZSL (如有支援) |
如果相機裝置支援,建議輸入串流設定 只能與其他已處理或延遲的輸出內容同時進行通告 格式。 |
RAW (如有支援) |
如果相機裝置支援,建議的原始串流設定必須只包含以 RAW 為基礎的輸出格式。 |
其他使用情況
您可以針對用途,提供其他建議的設定串流 專用於您實作的特定項目
驗證
如要測試您實作建議的設定串流,請執行下列 CTS 和 VTS 測試:
用於查詢特徵組合的 API
自 Android 15 起,Android 平台會提供 API 來查詢功能組合。這個 API 可讓相機用戶端查詢 裝置可支援的特定功能組合。這個 API 因為 camera2 API 建構不同的功能,例如 4K、60fps HDR 影片、UlHDR、超廣角變焦和穩定技術做為立體控制。
需求條件
如要支援 API 查詢功能組合,相機 HAL 必須實作 ICameraDevice
介面的第 3 版。詳情請參閱「實作」一節。
支援 API 時,預覽畫面穩定功能必須與其他功能呈直角。因此適用於支援預覽的相機裝置
穩定度,傳回 isStreamCombinationWithSettingsSupported
的值
預覽穩定度時,特定組合的值必須相同。
開啟或關閉。這樣可以減少特徵組合查詢的搜尋空間。
此外,如果是媒體效能類別 15,主要後置鏡頭必須 支援 10 位元 HLG10 預覽 (1080p 和 720p) 預覽穩定功能 預覽畫面和 JPEG 的大小上限如要進一步瞭解這些規定,請參閱第 2.2.7.2 節。CDD 的「攝影機」。
實作
如要支援 API 查詢地圖項目組合,請在 ICameraDevice
3 版中實作下列地圖項目組合查詢 API:
constructDefaultRequestSettings
:為指定的CaptureRequest
類型建立預設設定。HAL 可以使用ICameraDeviceSession::constructDefaultRequestSettings
。isStreamCombinationWithSettingsSupported
: 檢查指定的攝影機串流組合裝置是否支援 搭配工作階段參數和其他CaptureRequest
鍵必須針對支援的組合傳回true
,針對不支援的功能組合傳回false
。HAL 可以使用isStreamCombinationSupported
並新增支援來檢查CaptureRequest
設定 在sessionParams
中傳遞的資料getSessionCharacteristics
:採用支援的 包含工作階段參數的串流組合,並傳回 每個工作階段的特性INFO_SESSION_CONFIGURATION_QUERY_VERSION
: 列出所有常用的工作階段設定。這些設定 並通過法規遵循測試。
若是 ICameraDevice
介面 3 以下版本,HAL
應該將
isStreamCombinationSupported
方法。
如要進一步瞭解 API 查詢的功能組合,請參閱 system/media/camera/docs/metadata_definitions.xml
中的 sessionConfigurationQueryVersion
說明文件。
如需這項功能的參考實作,請參閱
hardware/google/camera/devices/EmulatedCamera/hwl/
。
公用 API
應用程式可以使用下列公用 API 查詢支援的功能組合 :
CameraDevice.CameraDeviceSetup
:CameraDevice
的有限表示法,可用於查詢地圖項目組合,而不需要CameraDevice
例項。getCameraDeviceSetup
: 針對指定相機 ID 取得CameraDeviceSetup
物件 (如果)isCameraDeviceSetupSupported
會傳回true
。INFO_SESSION_CONFIGURATION_QUERY_VERSION
: 支援特徵組合查詢 (如果這個值為VANILLA_ICE_CREAM
或更高版本。OutputConfiguration
:描述相機輸出的類別,可包含延遲介面,以便進行低延遲功能組合查詢。SessionConfiguration
: 說明工作階段設定 (包括串流) 的公用程式類別 用於功能 組合查詢。
驗證
如要驗證您實作這項功能的結果,請使用下列 VTS、CTS 和 Camera ITS (CTS 驗證工具) 測試:
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
相機 ITS