Esse recurso apresenta um conjunto de métodos que permite que os clientes da câmera adicionem 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 fluxo de câmera compartilhada 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 fluxo de câmera específico em várias superfícies de saída. Um contador de referência interno rastreia os buffers à medida que eles ficam prontos para processamento 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.
Figura 1. Compartilhamento de buffer
A Figura 1 mostra um exemplo de cenário em que os buffers processados pelo fluxo da câmera 2 são anexados e desconectados dinamicamente, contados por referência e gerenciados pelo componente de divisão de fluxo em um fluxo de saída compartilhado dedicado no serviço da câmera.
Exemplos e origem
A implementação principal desse recurso pode ser encontrada no
módulo
Camera3StreamSplitter
. A documentação sobre esse recurso pode ser encontrada na referência para desenvolvedores:
Implementação
Nenhuma implementação é necessária no HAL da câmera, já que esse recurso é implementado no framework.
Validação
Sua implementação precisa passar por casos de CTS que abrangem esse recurso do módulo MultiViewTest e da biblioteca JNI nativa para a API nativa.