次の方法で共有


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 をターゲットとする要求が実際にデバイスに送信される前にバッファーを割り当てることが望ましい場合があります。 大きなバッファーの割り当てには時間がかかる場合があり、安定した状態の動作に達するために十分なバッファーが割り当てられるまで、要求の送信に遅延が発生する可能性があります。 このような遅延により、バーストに必要以上の時間がかかる場合や、プレビュー出力でスキップやスタッターが発生する可能性があります。

prepare() メソッドを使用して、この事前割り当てを実行できます。 これは、その Surface が要求のターゲットとして使用される前に、特定の出力 Surface に対してのみ呼び出されます。 割り当てられるバッファーの数は、コンシューマーが出力 Surface を提供するために必要な数と、パイプラインを埋めるためにカメラ デバイスに必要な最大数の合計です。 これは、安定状態の操作に実際に必要な数よりも大きくなる可能性があるため、準備を使用すると、通常のオンデマンド動作よりもメモリ消費量が多くなる可能性があります。 Prepare() は、割り当てが完了すると、スムーズなフレーム レートと引き換えに、特定の Surface への最初の出力までの時間も遅延します。

たとえば、maxImages 引数を 10 で作成 android.media.ImageReader#newInstance ImageReader し、同時に 3 つのイメージのみを使用するアプリケーションでは、通常、それらの 3 つの画像のみが割り当てられます (さらに、スムーズな操作のためにカメラ デバイスで必要なもの)。 ただし、ImageReader Surface で prepare() を使用すると、10 個のイメージがすべて割り当てられます。 そのため、このメソッドを使用するアプリケーションでは、アプリケーションに実際に必要なバッファーの数のみを要求するように注意する必要があります。

同じ出力 Surface が連続するセッションで使用されている場合 (最初のセッションを明示的に閉じず)、既に割り当てられているバッファーが引き継がれ、最初のセッションでキャプチャ要求のターゲットとして使用された場合、2 番目のセッションで準備を呼び出すことはできません。

割り当てが完了すると、 StateCallback#onSurfacePrepared このメソッドに提供された Surface で呼び出されます。 準備呼び出しと onSurfacePrepared 呼び出しの間で、準備用に提供された Surface を、このセッションに送信された CaptureRequest のターゲットとして使用することはできません。

2 つのサーフェスが同じストリームを共有する OutputConfiguration#enableSurfaceSharing 場合、 OutputConfiguration#addSurfaceprepare() は 1 つのサーフェスでのみ呼び出す必要があり StateCallback#onSurfacePrepared 、両方のサーフェスに対してトリガーされることに注意してください。

android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY デバイスは出力バッファーを事前に割り当てることができません。これらのデバイスの場合は、 StateCallback#onSurfacePrepared すぐに呼び出され、事前割り当てが行われません。

の Java ドキュメントandroid.hardware.camera2.CameraCaptureSession.prepare(android.view.Surface)

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

適用対象