Android 10 引入了一些功能,讓相機用戶端為特定用例選擇最佳相機串流,並確保相機裝置支援某些串流組合。流配置是指在相機設備中配置的單一相機流,流組合是指在相機設備中配置的一組或多組流。有關這些功能的更多信息,請參閱建議的流配置和查詢流組合的 API 。
參考實現
有推薦配置流的供應商端參考實作以及用於查詢流組合功能的 API。您可以在QCamera3HWI.cpp中找到此實現
建議的串流配置
相機供應商可以向相機用戶端宣傳針對特定用例的建議串流配置。這些建議的串流配置是StreamConfigurationMap的子集,可以幫助攝影機用戶端選擇最佳配置。
儘管StreamConfigurationMap向攝影機用戶端提供詳盡的流配置信息,但它不提供有關選擇一種流而不是另一種流的效率、功率或性能影響的任何信息。攝影機用戶端可以自由地從所有可能的串流配置中進行選擇,但在許多情況下,這會導致客戶端使用次優的攝影機配置和應用程式進行耗時的詳盡搜尋。
例如,儘管需要且必須支援某些經過處理的 YUV 格式,但相機設備可能不具有這些格式的本機支援。這會導致格式轉換需要額外的處理過程並降低效率。尺寸和相應的長寬比也可以具有類似的影響,使得特定尺寸在功率和性能方面更優選。
與StreamConfigurationMap相比,您建議的串流配置映射不需要詳盡。建議的配置映射必須遵循實作部分中的要求,並且可以包含在StreamConfigurationMap中找到的任何可用格式、大小或其他值。 StreamConfigurationMap 中找不到的隱藏格式、大小或其他值不能包含在建議的流配置映射中。
所有測試保持不變,並且不會根據建議的流配置而放鬆。
相機實現提供的建議串流配置是可選的,相機用戶端可以忽略它們。
執行
請按照以下步驟來實現此功能。
元資料條目
若要啟用此功能,相機 HAL 必須填入下列靜態元資料條目:
android.scaler.availableRecommendedStreamConfigurations
:針對特定用例建議的串流配置子集。該聲明使用簡單的點陣圖以[1 << PREVIEW | 1 << RECORD..]
的形式指示建議的用例。[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 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平台支援API來查詢流組合。實現此 API 允許相機用戶端在收到有效的CameraDevice實例後隨時安全地查詢流組合,從而消除初始化相機捕獲會話的開銷以及出現後續相機異常(包括相機損壞)的可能性,並允許更快的查詢。
此功能還允許相機用戶端接收根據 CameraDevice指南和支援的硬體層級編譯的串流組合清單。 CTS 測試可用於盡可能強制查詢結果的正確性,涵蓋最常見流組合的一小部分。
您可以選擇透過在相機 HAL 中實作額外的 HIDL API 呼叫來支援此功能。
執行
為了支援 API 查詢流組合,相機 HAL 必須提供isStreamCombinationSupported
HIDL API 介面的實作。此介面檢查攝影機設備是否支援指定的攝影機流組合。
呼叫時,API 必須傳回下列狀態碼之一:
-
OK
:流組合查詢成功。 -
METHOD_NOT_SUPPORTED
:攝影機裝置不支援流組合查詢。 -
INTERNAL_ERROR
:由於內部錯誤,流組合查詢無法完成。
如果支援流組合,則 API 傳回 true。否則,返回 false。
該框架使用公共 API isSessionConfigurationSupported
來檢查相機設備是否支援特定會話配置。
對 API 的呼叫不得對相機的正常操作產生任何副作用。 API 呼叫不得改變任何內部狀態或降低相機效能。確保相機 HAL 成功驗證串流組合後,相機用戶端可以成功配置串流組合。為了避免出現問題,請確保實作在流程組合查詢期間不會儲存任何資訊、變更其內部狀態或進行耗時的操作。
驗證
若要驗證此功能,請執行下列相機 CTS 和 VTS 測試案例:
相機CTS模組:
攝影機 VTS:
VtsHalCameraProviderV2_4TargetTest.cpp