Transporte de búfer de cámara de un solo productor y múltiples consumidores

Esta característica presenta un conjunto de métodos que permite a los clientes de cámara agregar y eliminar superficies de salida dinámicamente mientras la sesión de captura está activa y la transmisión de la cámara está en curso. Una nueva salida se puede asignar a una secuencia de cámara compartida específica seleccionada por el usuario. Una vez agregada una superficie, se puede quitar en cualquier momento.

La idea general es compartir los buffers asociados con una secuencia de cámara particular dentro de varias superficies de salida. Un contador de referencia interno realiza un seguimiento de los buffers a medida que están listos para su posterior procesamiento por parte del consumidor. Cuando todos los consumidores completan sus respectivas tareas, el búfer se retira de la cola y queda disponible para la cámara.

Compartir búfer

Figura 1. Compartir búfer

La Figura 1 muestra un escenario de ejemplo en el que los buffers procesados ​​por el flujo de cámara 2 se conectan y desconectan dinámicamente, se cuentan las referencias y se administran mediante el componente divisor de flujo dentro de un flujo de salida compartido dedicado dentro del servicio de cámara.

Ejemplos y fuente

La implementación principal de esta función se puede encontrar en el módulo Camera3StreamSplitter . La documentación sobre esta característica se puede encontrar en la referencia del desarrollador:

Implementación

No se requiere implementación en el lado de la cámara HAL ya que esta característica se implementa en el lado del marco.

Validación

Su implementación debe pasar los casos CTS que cubren esta característica del módulo MultiViewTest y la biblioteca JNI nativa para la API nativa.