Transporte do buffer da câmera de vários consumidores com produtor único

Esse recurso apresenta um conjunto de métodos que permite que os clientes da câmera incluam e removam superfícies de saída dinamicamente enquanto a sessão de captura está ativa e o streaming da câmera está em andamento. Uma nova saída pode ser mapeada para um stream de câmera compartilhado específico selecionado pelo usuário . Depois que uma superfície é adicionada, ela pode ser removida a qualquer momento.

A ideia geral é compartilhar os buffers associados a um stream de câmera específico em várias superfícies de saída. Um contador de referência interno acompanha os buffers à medida que eles ficam prontos para processamento adicional no lado do consumidor. Quando todos os consumidores concluem as respectivas tarefas, o buffer é removido da fila e fica disponível para a câmera.

Compartilhamento de buffer

Figura 1. Compartilhamento de buffer

A Figura 1 mostra um cenário de exemplo em que os buffers processados pelo stream de câmera 2 são anexados e desanexados dinamicamente, contados por referência e gerenciados pelo componente divisor de stream em um stream de saída compartilhado dedicado no serviço de câmera.

Exemplos e origem

A implementação principal desse recurso pode ser encontrada no Camera3StreamSplitter módulo. A documentação sobre esse recurso está disponível na referência do desenvolvedor:

Implementação

Nenhuma implementação é necessária no lado do HAL da câmera, já que esse recurso é implementado no lado do framework.

Validação

A implementação precisa passar nos casos de CTS que abrangem esse recurso do módulo MultiViewTest e da biblioteca JNI nativa para a API nativa.