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

Esta función presenta un conjunto de métodos que permite que los clientes de la cámara agreguen y quiten superficies de salida de manera dinámica mientras la sesión de captura está activa y la transmisión de la cámara está en curso. Una salida nueva se puede asignar a una transmisión específica de cámara compartida que seleccione el usuario. Después de agregar una superficie, se puede quitar en cualquier momento.

La idea general es compartir los búferes asociados con una transmisión de cámara particular en varias plataformas de salida. Un contador de referencia interno realiza un seguimiento de los búferes a medida que se preparan para su posterior procesamiento por parte del consumidor. Cuando todos los consumidores completan sus tareas respectivas, el búfer se quita de la cola y está disponible para la cámara.

Uso compartido de búfer

Figura 1: Uso compartido de búfer

En la Figura 1, se muestra un ejemplo de situación en la que el componente divisor de flujos de la transmisión de la cámara 2 conecta y desconecta, cuenta de referencias y administra de forma dinámica los búferes dentro de una transmisión de salida compartida dedicada dentro del servicio de la cámara.

Ejemplos y fuente

La implementación principal de esta función se puede encontrar en el módulo Camera3StreamSplitter. Puedes encontrar la documentación sobre esta función en la referencia para desarrolladores:

Implementación

No se requiere implementación en el lado de la HAL de la cámara, ya que esta función se implementa en el lado del framework.

Validación

Tu implementación debe pasar casos de CTS que abarquen esta función desde el módulo MultiViewTest y la biblioteca JNI nativa para la API nativa.