CameraCaptureSession.Prepare(Surface) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Asigne previamente todos los búferes para una Superficie de salida.
[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
Parámetros
- surface
- Surface
la superficie de salida para la que se deben asignar previamente los búferes. Debe ser una de las superficies de salida que se usan para crear esta sesión.
- Atributos
Comentarios
Asigne previamente todos los búferes para una Superficie de salida.
Normalmente, los búferes de imagen de una determinada salida Surface se asignan a petición para minimizar la latencia de inicio y la sobrecarga de memoria.
Sin embargo, en algunos casos, puede ser conveniente que los búferes se asignen antes de que las solicitudes destinadas a Surface se envíen realmente al dispositivo. Los búferes grandes pueden tardar algún tiempo en asignarse, lo que puede provocar retrasos en el envío de solicitudes hasta que se asignen suficientes búferes para alcanzar el comportamiento de estado estable. Estos retrasos pueden provocar que las ráfagas tarden más tiempo de lo deseado o que se omitan o se produzcan problemas en la salida de la versión preliminar.
El método prepare() se puede usar para realizar esta asignación previa. Solo se puede llamar a para una superficie de salida determinada antes de que Surface se use como destino para una solicitud. El número de búferes asignados es la suma del recuento necesario para el consumidor que proporciona la superficie de salida y el número máximo necesario para que el dispositivo de cámara rellene su canalización. Dado que esto puede ser un número mayor que lo que realmente es necesario para la operación de estado estable, el uso de la preparación puede dar lugar a un mayor consumo de memoria que el comportamiento normal a petición da como resultado. Prepare() también retrasará la hora de la primera salida a una determinada Surface, a cambio de velocidad de fotogramas más suave una vez completada la asignación.
Por ejemplo, una aplicación que crea un android.media.ImageReader#newInstance ImageReader
con un argumento maxImages de 10, pero solo usa 3 imágenes simultáneas a la vez normalmente solo haría que se asignaran esas 3 imágenes (además de lo que necesita el dispositivo de cámara para un funcionamiento suave). Sin embargo, el uso de prepare() en la superficie imageReader dará lugar a que se asignen todas las 10 imágenes. Por lo tanto, las aplicaciones que usan este método deben tener cuidado de solicitar solo el número de búferes realmente necesarios para su aplicación.
Si la misma salida Surface se usa en sesiones consecutivas (sin cerrar la primera sesión explícitamente), sus búferes ya asignados se transfieren y, si se usó como destino de una solicitud de captura en la primera sesión, no se puede llamar a prepare en ella en la segunda sesión.
Una vez completada la asignación, StateCallback#onSurfacePrepared
se invocará con el Surface proporcionado a este método. Entre la llamada de preparación y la llamada onSurfacePrepared, la Surface proporcionada para preparar no debe usarse como destino de un CaptureRequest enviado a esta sesión.
Tenga en cuenta que si dos superficies comparten la misma secuencia a través OutputConfiguration#enableSurfaceSharing
de y OutputConfiguration#addSurface
, solo es necesario llamar a prepare() en una superficie y StateCallback#onSurfacePrepared
se desencadenarán para ambas superficies.
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY
los dispositivos no pueden asignar previamente búferes de salida; para esos dispositivos, StateCallback#onSurfacePrepared
se llamará inmediatamente y no se realizará ninguna asignación previa.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.