會話參數功能通過使相機客戶端能夠主動配置成本高昂的請求參數子集(即會話參數)來減少延遲,作為捕獲會話初始化階段的一部分。使用此功能,您的 HAL 實現在流配置階段而不是第一個捕獲請求期間接收客戶端參數,並且可以根據它們的值更有效地準備和構建內部管道。
在 Android 10 中,您可以使用可選的會話重新配置查詢功能來提高性能,以更好地控制內部會話參數重新配置邏輯。有關詳細信息,請參閱會話重新配置查詢。
示例和來源
參考會話參數實現已經是CameraHal的一部分。此 HAL 使用舊版 Hal API。實現相機HIDL API 的綁定 CameraHal 必須使用相應的 HIDL sessionParams條目在流配置期間訪問任何新的傳入會話參數。
相機客戶端可以通過調用getAvailableSessionKeys()
來查詢所有支持的會話參數的鍵,並最終通過setSessionParameters()
設置它們的初始值。
執行
您的 CameraHal 實現必須在相應的靜態相機元數據中填充ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
並提供ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
的子集,其中包含難以按幀應用的鍵列表,並且在捕獲會話生命週期期間修改時可能導致意外延遲。
典型示例包括需要耗時的硬件重新配置或內部相機管道更改的參數。對會話參數的控制仍然可以在捕獲請求中進行,但是客戶端應該意識到並期望在他們的應用程序中出現延遲。
該框架監控所有傳入的請求,如果它檢測到會話參數值的變化,它會在內部重新配置相機。然後,傳遞給 CameraHal 的新流配置包括更新的會話參數值,這些值用於更有效地配置相機管道。
定制
您可以在 CameraHal 端填充的可用會話參數列表中定義標籤。如果 CameraHal 將可用會話參數列表留空,則此功能無效。
驗證
CTS 包括以下用於測試會話參數的新案例:
-
CameraDeviceTest#testSessionConfiguration
-
CameraDeviceTest#testCreateSessionWithParameters
-
CameraDeviceTest#testSessionParametersStateLeak
-
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
通常,在某個參數成為會話密鑰列表的一部分後,其當前值將作為在 HAL 層的流配置期間傳遞的會話參數的一部分。
必須仔細選擇會話參數。這些值不應在流配置之間頻繁更改(如果有的話)。頻繁更改的參數(例如捕獲意圖)不合適,將它們添加到會話參數列表可能會由於過多的內部重新配置而導致 CTS 失敗。
會話重配置查詢
Android 10 引入了可選的會話重新配置查詢功能以提高性能,因為會話參數值修改導致的內部流重新配置可能會降低性能。為解決此問題,HIDL ICameraDeviceSession
3.5 版及更高版本支持isReconfigurationRequired
方法,該方法提供對內部會話參數重新配置邏輯的細粒度控制。使用這種方法,可以在需要時精確地進行流重新配置。
isReconfigurationRequired
的參數提供有關每個掛起的會話參數修改的所需信息,允許進行各種特定於設備的自定義。
此功能僅在相機服務和相機 HAL 中實現。沒有面向公眾的 API。如果實現了此功能,相機客戶端在使用會話參數時應該會看到性能改進。
執行
要支持會話重新配置查詢,您必須實現isReconfigurationRequired
方法來檢查新會話參數值是否需要完整的流重新配置。
如果客戶端更改任何公佈的會話參數的值,相機框架將調用isReconfigurationRequired
方法。根據具體值,HAL 決定是否需要完整的流重新配置。如果 HAL 返回false
,則相機框架會跳過內部重新配置。如果 HAL 返回true
,則框架會重新配置流並相應地傳遞新的會話參數值。
在向 HAL 提交帶有新參數的請求之前,框架可以調用isReconfigurationRequired
方法,並且可以在提交之前取消請求。因此,HAL 不得使用此方法調用以任何方式改變其行為。
HAL 實現必須滿足以下要求:
- 框架必須能夠在活動會話配置後隨時調用
isReconfigurationRequired
方法。 - 對掛起的攝像頭請求的性能不得有任何影響。特別是,在正常的攝像機流式傳輸過程中不得出現任何故障或延遲。
設備和 HAL 實現必須滿足以下性能要求:
- 不得更改硬件和軟件相機設置。
- 不得對相機性能造成用戶可見的影響。
isReconfigurationRequired
方法採用以下參數:
-
oldSessionParams
:上一個會話的會話參數。通常是現有的會話參數。 -
newSessionParams
:客戶端設置的新會話參數。
預期的返回狀態代碼是:
-
OK
:成功重新配置需要查詢。 -
METHOD_NOT_SUPPORTED
:相機設備不支持重新配置查詢。 -
INTERNAL_ERROR
:由於內部錯誤,重新配置查詢無法完成。
返回值為:
-
true
:需要重新配置流。 -
false
:不需要重新配置流。
要忽略會話重新配置查詢,HAL 返回METHOD_NOT_SUPPORTED
或false
。這會導致默認的攝像機服務行為,其中在每次會話參數更改時觸發流重新配置。
驗證
可以使用CameraHidlTest#configureStreamsWithSessionParameters
中的 VTS 測試用例驗證會話重新配置查詢功能。