共用方式為


CameraCaptureSession.Prepare(Surface) 方法

定義

預先配置輸出 Surface 的所有緩衝區。

[Android.Runtime.Register("prepare", "(Landroid/view/Surface;)V", "GetPrepare_Landroid_view_Surface_Handler", ApiSince=23)]
public abstract void Prepare (Android.Views.Surface surface);
[<Android.Runtime.Register("prepare", "(Landroid/view/Surface;)V", "GetPrepare_Landroid_view_Surface_Handler", ApiSince=23)>]
abstract member Prepare : Android.Views.Surface -> unit

參數

surface
Surface

應預先配置緩衝區的輸出 Surface。 必須是用來建立此會話的其中一個輸出 Surface。

屬性

備註

預先配置輸出 Surface 的所有緩衝區。

一般而言,指定輸出 Surface 的映像緩衝區會依需求配置,以將啟動延遲和記憶體額外負荷降到最低。

不過,在某些情況下,在以 Surface 為目標的任何要求實際提交到裝置之前,可能需要配置緩衝區。 大型緩衝區可能需要一些時間來配置,這可能會導致提交要求延遲,直到配置足夠的緩衝區以達到穩定狀態行為為止。 這類延遲可能會導致高載花費的時間超過所需時間,或造成預覽輸出中的略過或斷斷續續。

prepare() 方法可用來執行這個預先配置。 它只能在該 Surface 做為要求的目標之前,針對指定的輸出 Surface 呼叫。 配置的緩衝區數目是取用者提供輸出 Surface 所需的計數總和,以及相機裝置填滿其管線所需的最大數目。 由於這個數目可能大於穩定狀態作業實際所需的數目,所以使用準備可能會導致記憶體耗用量高於一般隨選行為的結果。 Prepare() 也會延遲第一次輸出到指定 Surface 的時間,以換取配置完成後的更順暢幀速率。

例如,以 maxImages 自變數 10 建立 android.media.ImageReader#newInstance ImageReader 的應用程式,但一次只使用 3 個同時的影像,通常只會配置這 3 個影像(加上相機裝置需要什麼才能順利運作)。 但在 ImageReader Surface 上使用 prepare() 會導致配置所有 10 個映像。 因此,使用此方法的應用程式應該小心只要求其應用程式實際所需的緩衝區數目。

如果在連續會話中使用相同的輸出 Surface(未明確關閉第一個會話),則其已配置的緩衝區會進行傳遞,如果它作為第一個會話中擷取要求的目標,則無法在第二個會話中呼叫準備。

配置完成後, StateCallback#onSurfacePrepared 將會使用提供給此方法的 Surface 叫用。 在準備呼叫與 onSurfacePrepared 呼叫之間,提供給準備的 Surface 不得作為提交至此會話的 CaptureRequest 目標。

請注意,如果 2 個表面透過 OutputConfiguration#enableSurfaceSharingOutputConfiguration#addSurface共用相同的數據流,則 prepare() 只需要在一個介面上呼叫,而且 StateCallback#onSurfacePrepared 會針對這兩個表面觸發。

android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY 裝置無法預先配置輸出緩衝區;針對這些裝置, StateCallback#onSurfacePrepared 將會立即呼叫,且不會進行預先配置。

android.hardware.camera2.CameraCaptureSession.prepare(android.view.Surface)Java 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

適用於