會話參數功能使攝影機用戶端能夠主動配置昂貴的請求參數子集(即會話參數)作為捕獲會話初始化階段的一部分,從而減少延遲。借助此功能,您的 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
,框架將重新配置流並相應地傳遞新的會話參數值。
isReconfigurationRequired
方法可以在將帶有新參數的請求提交到 HAL 之前的某個時間由框架調用,並且可以在提交之前取消該請求。因此,HAL 不得使用此方法呼叫以任何方式更改其行為。
HAL 實現必須滿足以下要求:
- 框架必須能夠在活動會話配置後隨時呼叫
isReconfigurationRequired
方法。 - 不得對待處理的相機請求的效能產生影響。特別是,在正常的攝影機串流傳輸過程中不得出現任何故障或延遲。
設備和 HAL 實作必須滿足以下性能要求:
- 不得更改硬體和軟體相機設定。
- 對相機效能不得產生使用者可見的影響。
isReconfigurationRequired
方法採用以下參數:
-
oldSessionParams
:上一個會話的會話參數。通常是現有的會話參數。 -
newSessionParams
:客戶端設定的新會話參數。
預期返回狀態代碼為:
-
OK
:成功重新配置所需的查詢。 -
METHOD_NOT_SUPPORTED
:相機設備不支援重新配置查詢。 -
INTERNAL_ERROR
:由於內部錯誤,重新配置查詢無法完成。
傳回值為:
-
true
:需要重新配置流程。 -
false
:不需要流重新配置。
若要忽略會話重新配置查詢,HAL 傳回METHOD_NOT_SUPPORTED
或false
。這會導致預設的攝影機服務行為,其中每次會話參數變更都會觸發串流重新配置。
驗證
可以使用CameraHidlTest#configureStreamsWithSessionParameters
中的 VTS 測試案例來驗證會話重新配置查詢功能。