Configurações de streaming

O Android inclui recursos que permitem que clientes de câmera escolham os streams de câmera ideais para casos de uso específicos e garantam que determinadas combinações de streaming sejam compatíveis com o dispositivo de câmera. Uma configuração de stream se refere a um único stream de câmera configurado no dispositivo de câmera, e uma combinação de stream se refere a um ou mais conjuntos de streams configurados no dispositivo de câmera. Para saber mais sobre esses recursos, consulte configurações de stream recomendadas e para consultar combinações de recursos.

Implementação de referência

Há uma implementação de referência do fornecedor da configuração recomendada streams e a API para consultar atributos de combinação de streams. Você pode encontrar essa implementação em QCamera3HWI.cpp.

Os fornecedores de câmeras podem anunciar as configurações de streaming recomendadas para casos de uso específicos aos clientes de câmera. Essas configurações de stream recomendadas, que são subconjuntos de StreamConfigurationMap, pode ajudar os clientes da câmera a escolher as configurações ideais.

Embora StreamConfigurationMap forneça informações completas de configuração de stream para clientes de câmera, ele não fornece informações sobre os impactos de eficiência, energia ou desempenho de escolher um stream em vez de outro. Os clientes de câmera podem escolher livremente de todas as configurações de stream possíveis, mas, em muitos casos, isso causa clientes usando apps e configurações de câmera abaixo do ideal, demoradas e exaustivas.

Por exemplo, embora alguns formatos YUV processados sejam necessários e precisem ser compatíveis, o dispositivo de 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, tornando dimensões específicas preferíveis em termos de poder e desempenho.

Os mapas de configuração de fluxo recomendados não precisam ser exaustivos em comparação com o StreamConfigurationMap. Os mapas de configuração sugeridos precisam seguir os requisitos da seção implementação e podem incluir qualquer um dos formatos, tamanhos ou outros valores disponíveis em StreamConfigurationMap. Formatos, tamanhos ou outros valores ocultos não foram encontrados no StreamConfigurationMap e não pode ser incluída nos mapas recomendados de configuração de stream.

Todos os testes permanecem inalterados e não são relaxados dependendo do nível recomendado configurações de stream.

As configurações de transmissão recomendadas fornecidas pela implementação da câmera são opcional, e o cliente da câmera pode ignorá-los.

Implementação

Siga estas etapas para implementar esse recurso.

Entradas de metadados

Para ativar esse recurso, a HAL da câmera precisa preencher as seguintes informações estáticas entradas de metadados:

  • android.scaler.availableRecommendedStreamConfigurations: o subconjunto recomendado de configurações de stream para casos de uso específicos. A declaração usa bitmaps que indicam 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 extra. Casos de uso públicos inexistentes ou qualquer outro conjunto de dados 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 transmissão 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 é sugerida 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): o espaço de dados de profundidade recomendado configurações de transmissão sugeridas para esta 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 compatível com o dispositivo): o mapeamento de formatos de imagem recomendados que são sugeridas para este dispositivo de câmera para streams 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 pela API RecommendedStreamConfigurationMap.

Casos de uso obrigatórios

As configurações de stream recomendadas precisam ser fornecidas para os seguintes casos de uso e atendam aos requisitos correspondentes:

Caso de uso Requisito
PREVIEW Uma prévia só pode incluir configurações de stream processadas sem interrupção com formatos de saída, como YUV_420_888 e IMPLEMENTATION_DEFINED.
RECORD Um registro de vídeo precisa incluir configurações de stream que correspondam aos perfis de mídia compatíveis anunciados com o formato IMPLEMENTATION_DEFINED.
VIDEO_SNAPSHOT Um resumo de vídeo deve incluir configurações de transmissão que tenham pelo menos maior que as resoluções máximas de RECORD e somente com o sinal BLOB + Combinação de formato DATASPACE_JFIF/espaço de dados (JPEG). As configurações não podem causar falhas na visualização e precisam ser executadas a 30 fps.
SNAPSHOT As configurações do stream de snapshots precisam incluir pelo menos uma com um tamanho próximo a android.sensor.info.activeArraySize com a combinação de formato/dataspace BLOB + DATASPACE_JFIF (JPEG). Levando em conta restrições de proporção, alinhamento e outras restrições específicas do fornecedor a área do tamanho máximo sugerido não pode ser menor que 97% do sensor área de tamanho da matriz.
ZSL (se houver suporte) As configurações de stream de entrada recomendadas, se compatíveis com a câmera do dispositivo somente com outros resultados processados ou paralisados formatos.
RAW (se compatível) Se compatível com o dispositivo de câmera, as configurações recomendadas de stream bruto deve incluir apenas formatos de saída baseados em RAW.

Outros casos de uso

Você pode fornecer outros fluxos de configuração recomendados para casos de uso específicos da sua implementação.

Validação

Para testar a implementação dos fluxos de configuração recomendados, execute o seguintes testes de CTS e VTS:

API para consultar combinações de recursos

A partir do Android 15, a plataforma Android oferece uma API para consultar combinações de recursos. Essa API permite que os clientes da câmera consultem uma combinação específica de recursos pode ser suportada pelo dispositivo. Essa API é necessária porque a API Camera2 modela diferentes recursos, como 4K, 60 fps, vídeo HDR, UltraHDR, zoom ultraamplo e estabilização como controles ortogonais.

Requisitos

Para oferecer suporte à API para consultar combinações de recursos, a HAL da câmera precisa implementar versão 3 da interface ICameraDevice. Para mais detalhes, consulte a seção Implementação.

Quando há suporte para a API, a estabilização da visualização precisa ser ortogonal ao e outros recursos. Isso significa que, para um dispositivo de câmera compatível com a visualização estabilização, o valor de retorno de isStreamCombinationWithSettingsSupported de uma combinação específica devem ter o mesmo valor quando a estabilização da visualização está ativado ou desativado. Isso reduz o espaço de pesquisa para consultas de combinação de atributos.

Além disso, para a classe 15 de performance de mídia, a câmera traseira principal precisa oferecer suporte à estabilização de visualização com visualização HLG10 de 10 bits para visualização de 1080p e 720p e JPEGs de tamanho máximo. Para mais detalhes sobre esses requisitos, consulte a seção 2.2.7.2. câmera do CDD.

Implementação

Para que a API consulte combinações de recursos, implemente o seguinte: de consultas por combinação de recursos na versão 3 do ICameraDevice:

Para versões anteriores à 3 da interface ICameraDevice, o HAL precisa implementar o método isStreamCombinationSupported.

Para mais informações sobre as combinações de recursos consultadas pela API, acesse documentação sobre sessionConfigurationQueryVersion em system/media/camera/docs/metadata_definitions.xml.

Para conferir uma implementação de referência desse recurso, consulte hardware/google/camera/devices/EmulatedCamera/hwl/.

APIs públicas

Os apps podem usar as seguintes APIs públicas para consultar combinações de recursos compatíveis com o dispositivo:

  • CameraDevice.CameraDeviceSetup: uma representação limitada de CameraDevice que pode ser usada para consultar combinações de recursos sem exigir uma instância de CameraDevice.

  • getCameraDeviceSetup: Adquire um objeto CameraDeviceSetup para um determinado ID de câmera se isCameraDeviceSetupSupported retorna true.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: aceita consultas de combinação de elementos se esse valor for VANILLA_ICE_CREAM ou maior.

  • OutputConfiguration: uma classe que descreve a saída da câmera, que pode conter uma superfície adiada para consultas de combinação de recursos de baixa latência.

  • SessionConfiguration: Uma classe de utilitário que descreve a configuração da sessão, incluindo stream e parâmetros de sessão, que podem ser usados para definir de combinação.

Validação

Para validar sua implementação desse recurso, use as APIs VTS, CTS e Testes do Camera ITS (CTS Verifier):

VTS

CTS

ITS da câmera