Configurações de streaming

O Android inclui recursos que permitem clientes de câmera para escolher a câmera ideal transmissões para casos de uso específicos e garantir que certas combinações de transmissões compatíveis com a câmera. Uma configuração de stream se refere a um único stream da câmera configurado no dispositivo da câmera, e uma combinação de stream se refere a um ou mais conjuntos de streams configurados na 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ê encontra este a implementação em QCamera3HWI.cpp (link em inglês)

Os fornecedores de câmeras podem anunciar as configurações de transmissão recomendadas para uso específico capas para clientes da 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 (link em inglês) fornece informações abrangentes de configuração de stream para clientes da câmera, não fornece informações sobre a eficiência, a potência ou o desempenho impactos de escolher uma transmissão em vez de outra. Os clientes de câmera podem escolher livremente de todas as configurações de stream possíveis, mas, em muitos casos, isso causa clientes que usam configurações e apps de câmera abaixo do ideal, demoradas e exaustivas.

Por exemplo, embora alguns formatos YUV processados sejam necessários e devam ser suportado, a 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 stream recomendados não precisam incluir todos os detalhes em comparação com StreamConfigurationMap padrão. Os mapas de configuração sugeridos precisam seguir os requisitos da implementação e pode incluir qualquer um formatos, tamanhos ou outros valores disponíveis encontrados em StreamConfigurationMap padrão. 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 imagens estáticas entradas de metadados:

  • android.scaler.availableRecommendedStreamConfigurations: o subconjunto recomendado de configurações de stream para casos de uso específicos. A usa bitmaps que indicam os casos de uso sugeridos em na forma de [1 << PREVIEW | 1 << RECORD..]. Os casos de uso estendem tupla regular (formato, largura, altura, entrada) com uma entrada adicional. 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 availableRecommendedStreamConfigurations tag de metadados.

    O exemplo a seguir mostra uma matriz para um stream recomendado padrão para um dispositivo de câmera que só oferece suporte a 4K e 1080p, em que as duas resoluções são preferidas para gravação de vídeo, mas somente 1080p é sugeridos 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 ao acima da entrada de metadados, outro bitmap de caso de uso indica o em diferentes casos de uso de negócios.

    Essas informações são armazenadas availableRecommendedInputOutputFormatsMap tag de metadados.

  • 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 availableRecommendedDepthStreamConfigurations tag de metadados.

Essas informações estão disponíveis para os clientes da câmera por meio do RecommendedStreamConfigurationMap API.

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 que não causam interrupções 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 ao perfis de mídia compatíveis 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 causará falhas de visualização e poderá ser executado a 30 fps.
SNAPSHOT As configurações de stream de snapshot precisam incluir pelo menos uma com tamanho próximo para android.sensor.info.activeArraySize com o BLOB + Combinação de formato DATASPACE_JFIF/espaço de dados (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 compatível) As configurações de stream de entrada recomendadas, se compatíveis com a câmera do dispositivo só pode ser anunciado 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 fluxos de configuração adicionais recomendados para casos de uso específicas para 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 atributos. 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ário porque a API Camera2 modela recursos diferentes, como 4K, 60fps, Vídeo HDR, UltraHDR, zoom ultra grande angular 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 de desempenho de mídia 15, a câmera traseira principal precisa Suporte à estabilização da visualização com HLG10 de 10 bits em 1080p e 720p e JPEGs de tamanho máximo. Para mais detalhes sobre esses requisitos, consulte 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, a HAL precisa implementar 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 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 com suporte para o dispositivo:

  • CameraDevice.CameraDeviceSetup: Uma representação limitada de CameraDevice que pode ser usada para consultar o atributo diferentes sem precisar de 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: Suporta consultas de combinação de recursos se este valor for VANILLA_ICE_CREAM ou superior.

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

  • SessionConfiguration: Uma classe de utilitário que descreve a configuração da sessão, incluindo o 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