Transporte de buffer de câmera de múltiplos consumidores de único produtor

Esse recurso apresenta um conjunto de métodos que permite aos clientes de câmera adicionar e remover 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 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 determinado fluxo de câmera em várias superfícies de saída. Um contador de referência interno acompanha os buffers à medida que eles se tornam prontos para processamento adicional no lado do consumidor. Quando todos os consumidores concluem suas respectivas tarefas, o buffer é retirado 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 fluxo de câmera 2 são anexados e desanexados dinamicamente, contados por referência e gerenciados pelo componente divisor de fluxo dentro de um fluxo de saída compartilhado dedicado dentro do serviço de câmera.

Exemplos e fonte

A implementação central desse recurso pode ser encontrada no módulo Camera3StreamSplitter . A documentação sobre esse recurso pode ser encontrada na referência do desenvolvedor:

Implementação

Nenhuma implementação é necessária no lado da câmera HAL, pois esse recurso é implementado no lado da estrutura.

Validação

Sua implementação deve ser aprovada em casos CTS que cobrem esse recurso do módulo MultiViewTest e da biblioteca JNI nativa para a API nativa.