O Android inclui recursos que permitem que os clientes de câmera escolham streams de câmera ideais para casos de uso específicos e garantam que determinadas combinações de stream 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 streams se refere a um ou mais conjuntos de streams configurados no dispositivo de câmera. Para mais informações sobre esses recursos, consulte Configurações de stream recomendadas e API para consultar combinações de recursos.
Implementação de referência
Há uma implementação de referência do lado do fornecedor dos streams de configuração recomendados e da API para consultar recursos de combinação de streams. Você pode encontrar essa implementação em QCamera3HWI.cpp
Configurações de streaming recomendadas
Os fornecedores de câmeras podem anunciar configurações de streaming recomendadas para casos de uso específicos aos clientes de câmeras. Essas configurações de stream 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 sobre a configuração de stream para clientes de câmera, ele não oferece informações sobre a eficiência, a energia ou os impactos no desempenho de escolher um stream em vez de outro. Os clientes de câmera podem escolher livremente entre todas as configurações de stream possíveis, mas, em muitos casos, isso leva a clientes que usam configurações de câmera abaixo do ideal e apps que fazem pesquisas exaustivas demoradas.
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 eles. Isso resulta em uma transmissão 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 determinadas dimensões preferíveis em termos de potência e desempenho.
Os mapas de configuração de stream recomendados não precisam ser exaustivos em comparação com o StreamConfigurationMap. Os mapas de configuração sugeridos precisam 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 stream recomendados.
Todos os testes permanecem inalterados e não são flexibilizados dependendo das configurações de stream recomendadas.
As configurações de stream 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, a HAL da câmera precisa 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 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 mais uma entrada. Não são permitidos casos de uso públicos inexistentes ou outros bits definidos no intervalo[PUBLIC_END, VENDOR_START]
.Essas informações são armazenadas na tag de metadados
availableRecommendedStreamConfigurations
.O exemplo a seguir mostra uma matriz para uma configuração de stream recomendada para um dispositivo de câmera que só oferece suporte a 4K e 1080p. As duas 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 dados de profundidade recomendadas sugeridas para esse 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 streams de entrada e 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 atender aos requisitos correspondentes:
Caso de uso | Requisito |
---|---|
PREVIEW |
Uma prévia só pode incluir configurações de stream processadas sem bloqueio
com formatos de saída como YUV_420_888 e
IMPLEMENTATION_DEFINED . |
RECORD |
Uma gravação 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 instantâneo de vídeo precisa incluir configurações de stream que sejam pelo menos tão grandes quanto as resoluções máximas de GRAVAÇÃO e apenas com a combinação de formato/espaço de dados BLOB + DATASPACE_JFIF (JPEG). As configurações não podem causar falhas na visualização e precisam ser executadas a 30 fps. |
SNAPSHOT |
As configurações de fluxo de instantâneo precisam incluir pelo menos uma com um tamanho próximo a android.sensor.info.activeArraySize com a combinação de formato/espaço de dados BLOB + DATASPACE_JFIF (JPEG). Considerando as 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% da área do tamanho da matriz do sensor. |
ZSL (se compatível) |
Se compatíveis com o dispositivo de câmera, as configurações de fluxo de entrada recomendadas só poderão ser anunciadas com outros formatos de saída processados ou em espera. |
RAW (se compatível) |
Se o dispositivo de câmera for compatível, as configurações de stream bruto recomendadas só poderão incluir 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 os seguintes testes do CTS e do 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. Com essa API, os clientes de câmera podem consultar se uma combinação específica de recursos pode ser compatível com o dispositivo. Essa API é necessária porque a API camera2 modela diferentes recursos, como 4K, 60 fps, vídeo HDR, UltraHDR, zoom ultrawide e estabilização como controles ortogonais.
Requisitos
Para oferecer suporte à API de consulta de combinações de recursos, a HAL da câmera precisa implementar
a versão 3 da interface ICameraDevice
. Para mais detalhes, consulte a seção Implementação.
Quando a API é compatível, a estabilização da prévia precisa ser independente de outros recursos. Isso significa que, para um dispositivo de câmera que oferece suporte à estabilização de prévia, o valor de retorno de isStreamCombinationWithSettingsSupported
para uma combinação específica precisa ser o mesmo valor quando a estabilização de prévia está ativada ou desativada. Isso reduz o espaço de pesquisa para consultas de combinação de recursos.
Além disso, para a classe de desempenho de mídia 15, a câmera traseira principal precisa oferecer suporte à estabilização de prévia com prévia HLG10 de 10 bits para prévia 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 oferecer suporte à API de consulta de combinações de recursos, implemente as seguintes APIs de consulta de combinações de recursos na versão 3 do ICameraDevice
:
constructDefaultRequestSettings
: cria as configurações padrão para um tipo deCaptureRequest
especificado. A HAL pode usar a implementaçãoICameraDeviceSession::constructDefaultRequestSettings
.isStreamCombinationWithSettingsSupported
: verifica se um dispositivo é compatível com uma combinação especificada de streams de câmera com parâmetros de sessão e outras chavesCaptureRequest
. Precisa retornartrue
para combinações aceitas efalse
para combinações de recursos não aceitas. A HAL pode usar a implementaçãoisStreamCombinationSupported
e adicionar suporte para verificar as configurações deCaptureRequest
transmitidas emsessionParams
.getSessionCharacteristics
: usa uma combinação de streams compatível com parâmetros de sessão e retorna as características específicas da sessão.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: lista todas as configurações de sessão usadas com frequência. Essas configurações são verificadas por testes de conformidade.
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, consulte a
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 compatíveis com o dispositivo:
CameraDevice.CameraDeviceSetup
: uma representação limitada deCameraDevice
que pode ser usada para consultar combinações de recursos sem exigir uma instânciaCameraDevice
.getCameraDeviceSetup
: adquire um objetoCameraDeviceSetup
para um determinado ID de câmera seisCameraDeviceSetupSupported
retornartrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: aceita consultas de combinação de recursos se esse valor forVANILLA_ICE_CREAM
ou maior.OutputConfiguration
: uma classe que descreve a saída da câmera e pode conter uma superfície adiada para consultas de combinação de recursos de baixa latência.SessionConfiguration
: uma classe utilitária que descreve a configuração da sessão, incluindo combinações de fluxos e parâmetros de sessão, que podem ser usados para consultas de combinação de recursos.
Validação
Para validar a implementação desse recurso, use os seguintes testes de VTS, CTS e ITS da câmera (Verificador do CTS):
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
Camera ITS