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)
Configurações de stream recomendadas
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
:
constructDefaultRequestSettings
: Cria as configurações padrão para um tipo deCaptureRequest
especificado. A HAL é possível usar oICameraDeviceSession::constructDefaultRequestSettings
implementação.isStreamCombinationWithSettingsSupported
: Verifica se o dispositivo oferece suporte a uma combinação de stream de câmera especificada com parâmetros de sessão e outras chavesCaptureRequest
. Deve retornartrue
para combinações aceitas efalse
para não compatíveis e combinações de recursos. A HAL pode usarisStreamCombinationSupported
implementação e adicionar suporte para verificar as configurações deCaptureRequest
sendo transmitidos emsessionParams
.getSessionCharacteristics
: usa um combinação de stream com parâmetros de sessão e retorna a e 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
, 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 deCameraDevice
que pode ser usada para consultar o atributo diferentes sem precisar de uma instância deCameraDevice
.getCameraDeviceSetup
: Adquire um objetoCameraDeviceSetup
para um determinado ID de câmera seisCameraDeviceSetupSupported
retornatrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: Suporta consultas de combinação de recursos se este valor forVANILLA_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
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombineTest.java (em inglês)
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java (em inglês)
ITS da câmera