O Android 10 introduz recursos que permitem aos clientes de 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 obter mais informações sobre esses recursos, consulte configurações de fluxo recomendadas e API para consultar combinações de fluxo .
Implementação de referência
Há uma implementação de referência do lado do fornecedor dos fluxos de configuração recomendados e da API para consultar recursos de combinação de fluxos. Você pode encontrar esta implementação em QCamera3HWI.cpp
Configurações de stream recomendadas
Os fornecedores de câmeras podem anunciar configurações de transmissão 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 de câmera a escolher as configurações ideais.
Embora StreamConfigurationMap forneça informações completas de configuração de fluxo para clientes de câmera, ele não fornece nenhuma informação sobre os impactos de eficiência, potência ou desempenho da escolha de 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 faz com que os clientes usem configurações de câmera e aplicativos 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. Isto resulta numa 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 preferíveis dimensões específicas em termos de potência e desempenho.
Seus mapas de configuração de fluxo recomendados não precisam ser exaustivos em comparação com 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 fluxo 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 ativar 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 no 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 streaming recomendada para um dispositivo de câmera que suporta apenas 4K e 1080p, onde 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 apenas 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 compatível com o dispositivo): o mapeamento dos formatos de imagem recomendados 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 RecommendationStreamConfigurationMap .
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 paralisação com formatos de saída como YUV_420_888 e IMPLEMENTATION_DEFINED . |
RECORD | Uma gravação de vídeo deve incluir configurações de stream 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 somente com a combinação de formato/espaço de dados (JPEG) BLOB + DATASPACE_JFIF. As configurações não devem causar falhas de visualização e devem poder rodar 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 (JPEG) BLOB + DATASPACE_JFIF. 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 do conjunto de sensores. |
ZSL (se compatível) | Se suportadas pelo dispositivo da câmera, as configurações de fluxo de entrada recomendadas só deverão ser anunciadas junto com outros formatos de saída processados ou paralisados. |
RAW (se compatível) | Se for compatível com o dispositivo da câmera, as configurações de fluxo bruto recomendadas deverão incluir apenas formatos de saída baseados em RAW. |
Outros casos de uso
Você pode fornecer fluxos de configuração adicionais recomendados para casos de uso específicos da 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 fluxo
A plataforma Android oferece suporte a uma API para consultar combinações de fluxos. A implementação desta API permite que os clientes de câmera consultem combinações de fluxo com segurança a qualquer momento após receber uma instância CameraDevice válida, eliminando a sobrecarga de inicialização de 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 de câmera recebam uma lista de combinações de fluxo compiladas de acordo com as diretrizes do CameraDevice e do nível de HW suportado. Os testes CTS estão disponíveis para garantir 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 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 HIDL isStreamCombinationSupported
. Esta interface verifica se o dispositivo de 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 oferece suporte à 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á verdadeiro se a combinação de fluxo 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 é suportada pelo dispositivo de 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 nem diminuir o desempenho da câmera. Certifique-se de que depois que o HAL da câmera validar com êxito uma combinação de fluxo, os clientes da câmera possam configurar a combinação de fluxo com êxito. 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 CTS de câmera:
Câmera VTS:
VtsHalCameraProviderV2_4TargetTest.cpp