HAL da câmera

A camada de abstração de hardware (HAL) da câmera do Android conecta a camada superior Camera Framework APIs no android.hardware.camera2 (link em inglês) ao driver e ao hardware da câmera. No Android 13 e versões mais recentes, a interface HAL da câmera desenvolvimento usa a AIDL. Lançamento do Android 8.0 Treble, alternando a API HAL da câmera. para uma interface estável definida pela linguagem de descrição da interface HAL (HIDL). Se você já desenvolveu um driver e um módulo HAL de câmera para o Android 7.0 e menores, esteja ciente de impactos mudanças no pipeline da câmera.

HAL de câmera AIDL

Em dispositivos com o Android 13 ou mais recente, O framework inclui suporte a HALs de câmera AIDL. O framework da câmera também oferece suporte a HALs de câmera HIDL, mas os recursos de câmera adicionados O Android 13 ou versões mais recentes estão disponíveis apenas no Interfaces HAL de câmera AIDL. Para implementar esses recursos em dispositivos que estão fazendo upgrade para Android 13 ou versões mais recentes, os fabricantes dos dispositivos precisam migrar o processo HAL das interfaces de câmera HIDL para a câmera AIDL do Google Cloud.

Para saber mais sobre as vantagens da AIDL, consulte AIDL para HALs:

Implementar a HAL de câmera AIDL

Para uma implementação de referência de uma HAL de câmera AIDL, consulte hardware/google/camera/common/hal/aidl_service/.

As especificações da HAL da câmera AIDL estão nos seguintes locais:

Para dispositivos que estão migrando para AIDL, os fabricantes podem precisar modificar o Política SELinux do Android (sepolicy) e arquivos RC, dependendo do código na estrutura dos preços.

Validar a HAL de câmera AIDL

Para testar a implementação da HAL da câmera AIDL, verifique se o dispositivo transmite Testes CTS e VTS. O Android 13 introduz o VTS da AIDL testam, VtsAidlHalCameraProvider_TargetTest.cpp.

Recursos da câmera HAL3

O objetivo do novo design da API Android Camera é aumentar substancialmente capacidade de apps controlar o subsistema da câmera em dispositivos Android enquanto reorganizando a API para torná-la mais eficiente e sustentável. A camada facilita a criação de apps de câmera de alta qualidade no Android que podem operar de forma confiável em vários produtos algoritmos específicos do dispositivo sempre que possível para maximizar a qualidade desempenho.

A versão 3 do subsistema da câmera estrutura os modos de operação em uma Visualização unificada que pode ser usada para implementar qualquer um dos modos anteriores e vários outros, como o modo burst. Isso resulta em melhor controle do usuário foco e exposição, e mais pós-processamento, como redução de ruído, contraste e nitidez. Além disso, essa visualização simplificada facilita que os desenvolvedores usem as diversas funções da câmera.

A API modela o subsistema da câmera como um pipeline que converte os dados solicitações de capturas de frames em frames individualmente. As solicitações todas as informações de configuração sobre a captura e o processamento de um frame. Isso inclui resolução e formato de pixel; sensor, lente e flash manuais controle Modos de operação 3A Controle de processamento RAW->YUV; geração de estatísticas; e assim por diante.

Em termos simples, o framework do aplicativo solicita um frame da câmera que retorna os resultados a um stream de saída. Em além de metadados que contêm informações como espaços de cor e lentes O sombreamento é gerado para cada conjunto de resultados. Pense na versão 3 da câmera como um pipeline para o fluxo unidirecional da versão 1 da câmera. Ele converte cada captura em uma imagem capturada pelo sensor, que é processada em:

  • Um objeto de resultado com metadados sobre a captura.
  • De um a N buffers de dados de imagem, cada um na própria superfície de destino.

O conjunto de superfícies de saída possíveis é pré-configurado:

  • Cada superfície é um destino para um fluxo de buffers de imagem de um e resolução.
  • Apenas um pequeno número de plataformas pode ser configurado como saídas de uma vez (cerca de três).

Uma solicitação contém todas as configurações de captura desejadas e a lista de saídas superfícies para enviar buffers de imagem para essa solicitação (do total definido). Uma solicitação pode ser one-shot (com capture()) ou pode ser pode ser repetido indefinidamente (com setRepeatingRequest()). Capturas têm prioridade sobre solicitações repetidas.

Modelo de dados da câmera

Figura 1. Modelo de operação do núcleo da câmera

Visão geral da HAL1 da câmera

A versão 1 do subsistema de câmera foi projetada como uma caixa preta com alto nível e os três modos de operação a seguir:

  • Visualizar
  • Gravação de vídeo
  • Captura estática

Cada modo tem recursos um pouco diferentes e sobrepostos. Assim, difícil de implementar novos recursos, como o modo burst, que fica entre dois os modos de operação.

Diagrama de bloco da câmera

Figura 2. Componentes da câmera

O Android 7.0 continua a oferecer suporte à câmera HAL1, já que muitos dispositivos ainda dependem dela reimplantá-lo. Além disso, o serviço de câmera do Android oferece suporte à implementação de ambas as HALs (1 e 3), o que é útil quando você deseja oferecer suporte a um sistema de gerenciamento com câmera HAL1 e uma câmera traseira mais avançada com câmera HAL3

Há um único módulo HAL de câmera (com o próprio versão número), que lista vários dispositivos de câmera independentes, cada um com o próprio número de versão. O módulo de câmera 2 ou mais recente é necessário para oferecer suporte dispositivos 2 ou mais recentes, e esses módulos de câmera podem ter uma combinação de dispositivos de câmera (é isso o que queremos dizer com quando dizemos que o Android suporta a implementação de ambos HALs, na sigla em inglês).