Configurações de fluxo

O Android 10 apresenta recursos que permitem aos clientes de câmera escolher os fluxos de câmera ideais para casos de uso específicos e garantir que certas 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 configurações de stream recomendadas e 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 recursos de combinação de fluxo. Você pode encontrar esta implementação em QCamera3HWI.cpp

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 da câmera a escolher as configurações ideais.

Embora 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, potência ou desempenho de escolher um fluxo em detrimento 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 de câmera abaixo do ideal e aplicativos que fazem 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 fluxo recomendados não precisam ser exaustivos em comparação com o StreamConfigurationMap . Os mapas de configuração sugeridos devem seguir os requisitos na 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 dentro do intervalo [PUBLIC_END, VENDOR_START] são proibidos.

    Essas informações são armazenadas na marca de metadados availableRecommendedStreamConfigurations .

    O exemplo a seguir mostra uma matriz para uma configuração de transmissão recomendada para um dispositivo de câmera compatível apenas com 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 somente 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 marca de metadados availableRecommendedDepthStreamConfigurations .

Essas informações estão disponíveis para clientes de câmera por meio da APIRecomendadoStreamConfigurationMap .

Casos de uso obrigatórios

As configurações de stream 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 interrupção com formatos de saída como YUV_420_888 e IMPLEMENTATION_DEFINED .
RECORD Um registro de vídeo deve incluir configurações de transmissão 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 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 um tamanho próximo a android.sensor.info.activeArraySize com a combinação de formato/espaço de dados BLOB + DATASPACE_JFIF (JPEG). Levando em conta 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 de sensores.
ZSL (se suportado) Se for compatível com o dispositivo da câmera, as configurações de fluxo de entrada recomendadas devem ser anunciadas apenas junto com outros formatos de saída processados ​​ou paralisados.
RAW (se suportado) Se for compatível com o dispositivo da câmera, as configurações recomendadas de fluxo bruto devem 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 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 da câmera consultem combinações de fluxo com segurança a qualquer momento após receber uma instância válida de CameraDevice , 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 compatível. Os testes CTS estão disponíveis para impor 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 de API HIDL isStreamCombinationSupported . Essa interface verifica se o dispositivo de câmera oferece suporte a 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 retorna true se a combinação de stream for suportada. 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 nenhum efeito colateral 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, após o Camera HAL validar com êxito uma combinação de fluxo, os clientes da 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 as 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 da câmera:

Câmera VTS:

VtsHalCameraProviderV2_4TargetTest.cpp