O Android 10 apresenta recursos que permitem aos clientes da câmera escolher fluxos de câmera ideais para casos de uso específicos e garantir que determinadas combinações de fluxo sejam compatíveis com o dispositivo da câmera. Uma configuração de fluxo refere-se a um único fluxo de câmera configurado no dispositivo de câmera e uma combinação de fluxo refere-se a um ou mais conjuntos de fluxos configurados no dispositivo de câmera. Para saber mais sobre esses recursos, consulte as configurações de stream recomendadas e a API para consultar combinações de stream .
Implementação de referência
Há uma implementação de referência do lado do fornecedor dos fluxos de configuração recomendados e a API para consultar os recursos de combinação de fluxo. Você pode encontrar esta implementação em QCamera3HWI.cpp
Configurações de stream recomendadas
Os fornecedores de câmeras podem anunciar configurações de fluxo recomendadas para casos de uso específicos para clientes de câmeras. Essas configurações de fluxo recomendadas, que são subconjuntos de StreamConfigurationMap , podem ajudar os clientes da câmera a escolher as configurações ideais.
Embora o StreamConfigurationMap forneça informações exaustivas de configuração de fluxo para clientes de câmera, ele não fornece nenhuma informação sobre os impactos de eficiência, energia ou desempenho de escolher um fluxo em vez de outro. Os clientes de câmera podem escolher livremente entre todas as configurações de fluxo possíveis, mas, em muitos casos, isso leva os clientes a usar configurações e aplicativos de câmera abaixo do ideal, fazendo pesquisas exaustivas e demoradas.
Por exemplo, embora alguns formatos YUV processados sejam necessários e devam ser suportados, o dispositivo da câmera pode não ter suporte nativo para os formatos. Isso resulta em uma passagem de processamento adicional para a conversão de formato e reduz a eficiência. O tamanho e a proporção correspondente também podem ter um impacto semelhante, tornando as dimensões específicas preferíveis em termos de potência e desempenho.
Seus mapas de configuração de stream recomendados não precisam ser exaustivos em comparação com o StreamConfigurationMap . Os mapas de configuração sugeridos devem seguir os requisitos da seção de implementação e podem incluir qualquer um dos formatos, tamanhos ou outros valores disponíveis encontrados em StreamConfigurationMap . Formatos, tamanhos ou outros valores ocultos não encontrados em StreamConfigurationMap não podem ser incluídos nos mapas de configuração de stream recomendados.
Todos os testes permanecem inalterados e não são relaxados dependendo das configurações de fluxo recomendadas.
As configurações de fluxo recomendadas fornecidas pela implementação da câmera são opcionais e o cliente da câmera pode ignorá-las.
Implementação
Siga estas etapas para implementar esse recurso.
Entradas de metadados
Para habilitar esse recurso, o Camera HAL deve preencher as seguintes entradas de metadados estáticos:
android.scaler.availableRecommendedStreamConfigurations
: o subconjunto recomendado de configurações de stream para casos de uso específicos. A declaração usa bitmaps simples indicando os casos de uso sugeridos na forma de[1 << PREVIEW | 1 << RECORD..]
. Os casos de uso estendem a tupla regular (formato, largura, altura, entrada) com uma entrada adicional. Casos de uso público inexistentes ou quaisquer outros bits definidos dentro do intervalo[PUBLIC_END, VENDOR_START]
são proibidos.Essas informações são armazenadas na tag de metadados
availableRecommendedStreamConfigurations
.O exemplo a seguir mostra uma matriz para uma configuração de fluxo recomendada para um dispositivo de câmera que oferece suporte apenas a 4K e 1080p, em que ambas as resoluções são preferidas para gravação de vídeo, mas apenas 1080p é sugerido para visualização.
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
android.depth.availableRecommendedDepthStreamConfigurations
(disponível somente se compatível com o dispositivo): as configurações de fluxo de espaço de dados de profundidade recomendadas sugeridas para este dispositivo de câmera. Semelhante à entrada de metadados acima, um bitmap de caso de uso adicional indica os casos de uso sugeridos.Essas informações são armazenadas na tag de metadados
availableRecommendedInputOutputFormatsMap
.android.scaler.availableRecommendedInputOutputFormatsMap
(disponível apenas se suportado pelo dispositivo): O mapeamento dos formatos de imagem recomendados que são sugeridos para este dispositivo de câmera para fluxos de entrada, para seus formatos de saída correspondentes.Essas informações são armazenadas na tag de metadados
availableRecommendedDepthStreamConfigurations
.
Essas informações estão disponíveis para clientes de câmera por meio da API RecommendedStreamConfigurationMap .
Casos de uso obrigatórios
As configurações de fluxo recomendadas devem ser fornecidas para os seguintes casos de uso e atender aos requisitos correspondentes:
Caso de uso | Requerimento |
---|---|
PREVIEW | Uma visualização deve incluir apenas configurações de fluxo processado sem travamento com formatos de saída como YUV_420_888 e IMPLEMENTATION_DEFINED . |
RECORD | Um registro de vídeo deve incluir configurações de fluxo que correspondam aos perfis de mídia suportados anunciados com o formato IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT | Um instantâneo de vídeo deve incluir configurações de fluxo que sejam pelo menos tão grandes quanto as resoluções máximas de RECORD e apenas com a combinação de formato/espaço de dados BLOB + DATASPACE_JFIF (JPEG). As configurações não devem causar falhas de visualização e devem ser executadas a 30 fps. |
SNAPSHOT | As configurações de fluxo de instantâneo devem incluir pelo menos um com tamanho próximo a android.sensor.info.activeArraySize com a combinação de formato/espaço de dados BLOB + DATASPACE_JFIF (JPEG). Levando em consideração as restrições de proporção, alinhamento e outras restrições específicas do fornecedor, a área do tamanho máximo sugerido não deve ser inferior a 97% da área do tamanho da matriz do sensor. |
ZSL (se suportado) | Se suportado pelo dispositivo da câmera, as configurações de fluxo de entrada recomendadas só devem ser anunciadas junto com outros formatos de saída processados ou travados. |
RAW (se suportado) | Se compatível com o dispositivo da câmera, as configurações de fluxo bruto recomendadas devem incluir apenas formatos de saída baseados em RAW. |
Outros casos de uso
Você pode fornecer fluxos de configuração recomendados adicionais para casos de uso específicos para sua implementação.
Validação
Para testar sua implementação dos fluxos de configuração recomendados, execute os seguintes testes CTS e VTS:
API para consultar combinações de stream
A plataforma Android oferece suporte a uma API para consultar combinações de fluxo. A implementação dessa API permite que os clientes de câmera consultem com segurança combinações de fluxo em qualquer ponto após receber uma instância CameraDevice válida, removendo a sobrecarga de inicializar uma sessão de captura de câmera e o potencial de ter exceções de câmera subsequentes, incluindo quebra de câmera, e permitindo consultas mais rápidas.
Esse recurso também permite que os clientes da câmera recebam uma lista de combinações de fluxo compiladas de acordo com as diretrizes para CameraDevice e o nível de HW suportado. Os testes CTS estão disponíveis para reforçar a exatidão dos resultados da consulta, tanto quanto possível, cobrindo um subconjunto menor das combinações de fluxo mais comuns.
Você pode optar por oferecer suporte a esse recurso implementando uma chamada de API HIDL adicional no Camera HAL.
Implementação
Para oferecer suporte a uma API para consultar combinações de fluxo, o Camera HAL deve fornecer uma implementação para a interface da API isStreamCombinationSupported
isStreamCombinationSupported. Essa interface verifica se o dispositivo da câmera suporta uma combinação de fluxo de câmera especificada.
Quando chamada, a API deve retornar um dos seguintes códigos de status:
-
OK
: A consulta de combinação de fluxo foi bem-sucedida. -
METHOD_NOT_SUPPORTED
: O dispositivo da câmera não suporta a consulta de combinação de fluxo. -
INTERNAL_ERROR
: A consulta de combinação de fluxo não pode ser concluída devido a um erro interno.
A API retornará true se a combinação de stream for compatível. Caso contrário, retorna falso.
A estrutura usa a API pública isSessionConfigurationSupported
para verificar se a configuração de sessão específica é compatível com o dispositivo da câmera.
As chamadas para a API não devem ter efeitos colaterais na operação normal da câmera. As chamadas de API não devem alterar nenhum estado interno ou diminuir o desempenho da câmera. Certifique-se de que, depois que o Camera HAL validar com sucesso uma combinação de fluxo, os clientes de câmera possam configurar com êxito a combinação de fluxo. Para evitar problemas, certifique-se de que a implementação não armazene nenhuma informação durante consultas de combinação de fluxo, altere seu estado interno ou se envolva em operações demoradas.
Validação
Para validar esse recurso, execute os seguintes casos de teste de câmera CTS e VTS:
Módulos de câmera CTS:
Câmera VTS:
VtsHalCameraProviderV2_4TargetTest.cpp