CameraCaptureSession.Prepare(Surface) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
預先分配所有緩衝區以分配輸出 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,緩衝區應預先分配。 一定是用來建立這個會話的輸出 Surfaces之一。
- 屬性
備註
預先分配所有緩衝區以分配輸出 Surface。
通常,特定輸出 Surface 的影像緩衝區會按需分配,以降低啟動延遲與記憶體負擔。
然而,在某些情況下,緩衝區在針對 Surface 的請求實際提交前,可能會更理想。 大型緩衝區可能需要一段時間才能分配,這可能導致請求提交延遲,直到分配足夠緩衝區以達到穩態行為。 這種延遲可能導致突發播放時間比預期更長,或在預覽輸出中出現跳針或卡頓。
可用 prepare() 方法來執行此預配置。 只有在該 Surface 被用作請求目標之前,才能對該 Surface 進行呼叫。 分配的緩衝區數量是消費者提供輸出 Surface 所需的數量與攝影機裝置填滿管線所需的最大數量之和。 由於這可能比穩態運作所需的數量還要多,使用 prepare 可能會導致記憶體消耗比一般隨選行為更高的。 Prepare() 也會延遲首次輸出到特定 Surface 的時間,以換取分配完成後更平滑的幀率。
例如,一個應用程式如果建立 android.media.ImageReader#newInstance ImageReader 一個 maxImages 參數為 10,但同時只使用 3 張影像,通常只會分配這 3 張影像(加上相機裝置為了順暢運作所需的數量)。 但在 ImageReader Surface 使用 prepare() 時,會分配全部 10 張圖片。 因此,使用此方法的應用程式應謹慎只請求其實際需要的緩衝區數量。
若同一輸出 Surface 在連續多個會話中使用(且未明確關閉第一個會話),則其已分配的緩衝區會被帶入;若該緩衝區在第一個會話中作為擷取請求的目標,則無法在第二個會話中呼叫 premere。
一旦分配完成,StateCallback#onSurfacePrepared將使用提供給此方法的 Surface 來調用。 在準備呼叫與 onSurfacePrepared 呼叫之間,準備所提供的 Surface 不得作為提交給此會話的擷取請求的目標。
請注意,如果兩個曲面共用同一串流,OutputConfiguration#enableSurfaceSharingOutputConfiguration#addSurface且 ,prepare() 只需在其中一個曲面呼叫,且StateCallback#onSurfacePrepared會同時觸發兩個曲面。
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY 裝置無法預先分配輸出緩衝區;對於這些裝置, StateCallback#onSurfacePrepared 會立即被呼叫,且不會進行預先配置。
Java 文件 android.hardware.camera2.CameraCaptureSession.prepare(android.view.Surface)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。