Camera2 obtiene acceso continuo a las imágenes de vista previa de la cámara

Quiero extender una aplicación de Camera1 a Camera2 dependiendo de la API. Un mecanismo central de la aplicación consiste en tomar imágenes de vista previa a una velocidad de aproximadamente 20 fotos por segundo. Con Camera1 me di cuenta de que al crear un SurfaceView, agregar una devolución de llamada en su soporte y después de la creación de la superficie accediendo a las imágenes de vista previa a través de setOneShotPreviewCallbacks periódicos. Eso fue bastante fácil y confiable.

Ahora, al estudiar Camera2, vine "desde el final" y logré convertir YUV420_888 a Bitmap (verConversión de YUV420_888 a Bitmap ) Sin embargo, ahora estoy luchando con la "técnica de captura". En el ejemplo de Google, veo que debe realizar una solicitud de captura "setRepeating" con CameraDevice.TEMPLATE_PREVIEW para mostrar la vista previa, p. en una vista de superficie. Eso está bien. Sin embargo, para tomar una foto real, necesito hacer otra solicitud de captura con (esta vez) builder.addTarget (imageReader.getSurface ()). Es decir. los datos estarán disponibles dentro del método onImageAvailable de imageReader.

El problema: la creación de captureRequest es una operación bastante pesada que tarda unos 200 ms en mi dispositivo. Por lo tanto, el uso de una solicitud de captura (ya sea con Template STILL_CAPTUR o PREVIEW) puede ser un enfoque imposible para capturar 20 imágenes por segundo, según lo necesite. Las propuestas que encontré aquí sobre SO se basan principalmente en el ejemplo de Google (educativamente moderadamente eficiente), que realmente no entiendo ...

Creo que la solución debe ser alimentar el ImageReader con un flujo continuo de imágenes de vista previa, que se pueden seleccionar desde allí en una frecuencia determinada. ¿Alguien puede dar alguna orientación sobre cómo implementar esto? Muchas gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta