Productor único Consumidor múltiple Transporte de búfer de cámara

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

La idea general es compartir los búferes asociados con un flujo de cámara en particular dentro de varias superficies de salida. Un contador de referencia interno realiza un seguimiento de los búferes a medida que están listos para su posterior procesamiento en el lado del consumidor. Cuando todos los consumidores completan sus respectivas tareas, el búfer se elimina de la cola y está 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 búferes procesados ​​por el flujo de cámara 2 se adjuntan y separan 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 central 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 HAL de la cámara, ya que esta característica se implementa en el lado del marco.

Validación

Su implementación debe aprobar los casos de CTS que cubren esta función del módulo MultiViewTest y la biblioteca JNI nativa para la API nativa.