Condividi tramite


CameraCaptureSession.Prepare(Surface) Metodo

Definizione

Pre-allocare tutti i buffer per una superficie di output.

[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

Parametri

surface
Surface

Superficie di output per cui i buffer devono essere preallocati. Deve essere una delle superfici di output usate per creare questa sessione.

Attributi

Commenti

Pre-allocare tutti i buffer per una superficie di output.

In genere, i buffer di immagini per una determinata superficie di output vengono allocati su richiesta, per ridurre al minimo la latenza di avvio e il sovraccarico di memoria.

Tuttavia, in alcuni casi, potrebbe essere preferibile allocare i buffer prima che le richieste destinate a Surface vengano effettivamente inviate al dispositivo. I buffer di grandi dimensioni possono richiedere del tempo per allocare, il che può comportare ritardi nell'invio delle richieste fino a quando non vengono allocati buffer sufficienti per raggiungere il comportamento dello stato stabile. Tali ritardi possono causare interruzioni che richiedono più tempo del desiderato o causare salti o stub nell'output di anteprima.

Il metodo prepare() può essere usato per eseguire questa preallocazione. Può essere chiamato solo per un determinato surface di output prima che Surface venga usato come destinazione per una richiesta. Il numero di buffer allocati è la somma del conteggio necessario dal consumer che fornisce la superficie di output e il numero massimo necessario dal dispositivo fotocamera per riempire la pipeline. Poiché questo può essere un numero maggiore di quello effettivamente necessario per l'operazione con stato stabile, l'uso della preparazione può comportare un consumo di memoria superiore rispetto al normale comportamento su richiesta. Prepare() ritarderà anche il tempo per il primo output in una determinata superficie, in cambio della frequenza dei fotogrammi più fluida al termine dell'allocazione.

Ad esempio, un'applicazione che crea un oggetto android.media.ImageReader#newInstance ImageReader con un argomento maxImages pari a 10, ma usa solo 3 immagini simultanee in una sola volta fa in modo che queste 3 immagini vengano allocate (più quelle necessarie per il funzionamento senza problemi). Tuttavia, l'uso di prepare() in ImageReader Surface comporterà l'allocazione di tutte e 10 le immagini. Pertanto, le applicazioni che usano questo metodo devono prestare attenzione a richiedere solo il numero di buffer effettivamente necessari per l'applicazione.

Se la stessa superficie di output viene usata in sessioni consecutive (senza chiudere la prima sessione in modo esplicito), i buffer già allocati vengono eseguiti e, se è stato usato come destinazione di una richiesta di acquisizione nella prima sessione, preparare non può essere chiamato su di esso nella seconda sessione.

Al termine dell'allocazione, StateCallback#onSurfacePrepared verrà richiamato con Surface fornito a questo metodo. Tra la chiamata di preparazione e la chiamata onSurfacePrepared, surface fornito per preparare non deve essere usato come destinazione di un captureRequest inviato a questa sessione.

Si noti che se 2 superfici condividono lo stesso flusso tramite OutputConfiguration#enableSurfaceSharing e OutputConfiguration#addSurface, prepare() deve essere chiamato solo su una superficie e StateCallback#onSurfacePrepared verrà attivato per entrambe le superfici.

android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY i dispositivi non possono prea allocare buffer di output; per tali dispositivi, StateCallback#onSurfacePrepared verrà chiamato immediatamente e non viene eseguita alcuna preallocazione.

Documentazione java per android.hardware.camera2.CameraCaptureSession.prepare(android.view.Surface).

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Si applica a