Freigeben über


CameraCaptureSession.Prepare(Surface) Methode

Definition

Weisen Sie alle Puffer für eine Ausgabeoberfläche 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

die Ausgabeoberfläche, für die 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 eine Ausgabeoberfläche vorab zu.

Normalerweise werden die Bildpuffer für eine bestimmte Ausgabeoberfläche bei Bedarf zugewiesen, 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 für das Surface tatsächlich an das Gerät übermittelt werden. Große Puffer können einige Zeit in Anspruch nehmen, um Zuweisungen zuzuweisen, was zu Verzögerungen beim Senden von Anforderungen führen kann, bis ausreichende Puffer zugewiesen werden, um das Verhalten des stabilen Zustands zu erreichen. Solche Verzögerungen können dazu führen, dass Brüche länger als gewünscht dauern oder übersprungen oder stuttert in der Vorschauausgabe verursacht werden.

Die Prepare()-Methode kann verwendet werden, um diese Präallocation durchzuführen. Es kann nur für eine bestimmte Ausgabeoberfläche aufgerufen werden, bevor Surface als Ziel für eine Anforderung verwendet wird. Die Anzahl der zugeteilten Puffer ist die Summe der Vom Verbraucher benötigten Anzahl, die die Ausgabeoberfläche bereitstellt, und die maximale Anzahl, die vom Kameragerät benötigt wird, um die Pipeline auszufüllen. Da dies eine größere Zahl sein kann als das, was tatsächlich für den Stabil-Zustand-Betrieb erforderlich ist, kann die Verwendung der Vorbereitung zu einem höheren Speicherverbrauch führen als das normale On-Demand-Verhalten führt zu einer höheren Auslastung. Prepare() verzögert auch die Zeit für die erste Ausgabe an ein bestimmtes Surface, um eine reibungslosere Framerate zu erhalten, sobald die Zuordnung abgeschlossen ist.

Beispielsweise würde eine Anwendung, die ein android.media.ImageReader#newInstance ImageReader MaxImages-Argument von 10 erstellt, aber nur 3 gleichzeitige Bilder gleichzeitig verwendet, würde normalerweise nur dazu führen, dass diese 3 Bilder zugeordnet werden (plus 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 zugewiesen werden. Daher sollten Anwendungen, die diese Methode verwenden, nur die Anzahl der Puffer anfordern, die tatsächlich für ihre Anwendung erforderlich sind.

Wenn dieselbe Ausgabeoberfläche in aufeinander folgenden Sitzungen verwendet wird (ohne die erste Sitzung explizit zu schließen), werden die bereits zugewiesenen Puffer übertragen und wenn sie als Ziel einer Aufnahmeanforderung in der ersten Sitzung verwendet wurde, kann die Vorbereitung nicht in der zweiten Sitzung aufgerufen werden.

Sobald die Zuordnung abgeschlossen ist, wird das Surface aufgerufen, StateCallback#onSurfacePrepared das dieser Methode zur Verfügung gestellt wird. Zwischen dem Vorbereiten des Anrufs und dem onSurfacePrepared-Aufruf darf das für die Vorbereitung bereitgestellte Surface nicht als Ziel einer an diese Sitzung übermittelten CaptureRequest verwendet werden.

Beachten Sie, dass 2 Oberflächen denselben Datenstrom OutputConfiguration#enableSurfaceSharing über und OutputConfiguration#addSurfacevorbereiten() nur auf einer Oberfläche aufrufen müssen und StateCallback#onSurfacePrepared für beide Oberflächen ausgelöst werden.

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

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

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: