Freigeben über


CameraCaptureSession.Prepare(Surface) Methode

Definition

Weisen Sie alle Puffer für ein Ausgabe-Surface vorab zu.

[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

Parameter

surface
Surface

das Ausgabe-Surface, für das Puffer vorab zugeordnet werden sollen. Muss eine der Ausgabeoberflächen sein, die zum Erstellen dieser Sitzung verwendet werden.

Attribute

Hinweise

Weisen Sie alle Puffer für ein Ausgabe-Surface vorab zu.

Normalerweise werden die Bildpuffer für ein bestimmtes Ausgabe-Surface bedarfsgesteuert zugeordnet, um die Startlatenz und den Arbeitsspeicheraufwand zu minimieren.

In einigen Fällen kann es jedoch wünschenswert sein, dass die Puffer zugewiesen werden, bevor Anforderungen, die auf das Surface abzielen, tatsächlich an das Gerät übermittelt werden. Die Zuweisung großer Puffer kann einige Zeit in Anspruch nehmen, was zu Verzögerungen bei der Übermittlung von Anforderungen führen kann, bis genügend Puffer zugeordnet sind, um das Verhalten im stabilen Zustand zu erreichen. Solche Verzögerungen können dazu führen, dass Bursts länger als gewünscht dauern oder zu Übergängen oder Stottern in der Vorschauausgabe führen.

Die prepare()-Methode kann verwendet werden, um diese Vorabzuordnung durchzuführen. Es kann nur für ein angegebenes Ausgabe-Surface aufgerufen werden, bevor Surface als Ziel für eine Anforderung verwendet wird. Die Anzahl der zugeordneten Puffer ist die Summe der Anzahl, die vom Consumer benötigt wird, der das Ausgabe-Surface bereitstellt, und der maximalen Anzahl, die das Kameragerät benötigt, um seine Pipeline zu füllen. Da dies eine größere Zahl sein kann, als für den Stabilzustandsbetrieb tatsächlich erforderlich ist, kann die Verwendung von Prepare zu einem höheren Speicherverbrauch führen, als das normale On-Demand-Verhalten zur Folge hat. Prepare() verzögert auch die Zeit für die erste Ausgabe an einem bestimmten Surface, im Gegenzug für eine gleichmäßigere Bildrate, sobald die Zuordnung abgeschlossen ist.

Beispielsweise würde eine Anwendung, die ein android.media.ImageReader#newInstance ImageReader mit dem maxImages-Argument 10 erstellt, aber nur 3 gleichzeitige Bilder verwendet, normalerweise nur dazu führen, dass diese drei Bilder zugeordnet werden (plus das, was vom Kameragerät für einen reibungslosen Betrieb benötigt wird). Die Verwendung von prepare() auf dem ImageReader Surface führt jedoch dazu, dass alle 10 Bilder zugeordnet werden. Anwendungen, die diese Methode verwenden, sollten daher darauf achten, nur die Anzahl von Puffern anzufordern, die für ihre Anwendung tatsächlich erforderlich sind.

Wenn das gleiche Ausgabe-Surface in aufeinanderfolgenden Sitzungen verwendet wird (ohne die erste Sitzung explizit zu schließen), werden die bereits zugeordneten Puffer übertragen, und wenn es in der ersten Sitzung als Ziel einer Erfassungsanforderung verwendet wurde, kann die Vorbereitung in der zweiten Sitzung nicht aufgerufen werden.

Sobald die Zuordnung abgeschlossen ist, wird mit dem Surface aufgerufen, StateCallback#onSurfacePrepared das für diese Methode bereitgestellt wird. Zwischen dem Prepare-Aufruf und dem onSurfacePrepared-Aufruf darf das für die Vorbereitung bereitgestellte Surface nicht als Ziel einer CaptureRequest verwendet werden, die an diese Sitzung übermittelt wird.

Beachten Sie, dass prepare() nur auf einer Oberfläche aufgerufen werden muss und für beide Oberflächen ausgelöst wird, StateCallback#onSurfacePrepared wenn zwei Oberflächen denselben Datenstrom über OutputConfiguration#enableSurfaceSharing und OutputConfiguration#addSurfacegemeinsam nutzen.

android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY Geräte können Ausgabepuffer nicht vorab zuordnen. für diese Geräte StateCallback#onSurfacePrepared wird sofort aufgerufen, und es wird keine Vorabzuordnung durchgeführt.

Java-Dokumentation für android.hardware.camera2.CameraCaptureSession.prepare(android.view.Surface).

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: