工作階段參數

相機用戶端可在擷取工作階段初始化階段,主動設定部分耗費資源的要求參數 (即工作階段參數),因此工作階段參數功能可減少延遲。有了這項功能,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 包含下列測試工作階段參數的新案例:

一般來說,如果特定參數屬於工作階段金鑰清單,其目前值會納入 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_SUPPORTEDfalse。這樣一來,預設的攝影機服務行為就會在每次變更工作階段參數時,觸發串流重新設定。

驗證

您可以使用 CameraHidlTest#configureStreamsWithSessionParameters 中的 VTS 測試案例,驗證工作階段重新設定查詢功能。