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. O Android 8.0 introduziu o Treble, que muda a API HAL da câmera para uma interface estável definida pela linguagem de descrição de interface HAL (HIDL). Se você já desenvolveu um módulo e um driver HAL da câmera para o Android 7.0 e versões anteriores, saiba que há mudanças significativas no pipeline da câmera.

HAL de câmera AIDL

Para dispositivos com o Android 13 ou versões mais recentes, o framework da câmera 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 o Android 13 ou versões mais recentes, os fabricantes de dispositivos precisam migrar o processo HAL de interfaces de câmera HIDL para interfaces de câmera AIDL.

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

Implementar a HAL de câmera AIDL

Para conferir 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 migram para o AIDL, os fabricantes podem precisar modificar a política do SELinux do Android (sepolicy) e os arquivos RC, dependendo da estrutura do código.

Validar a HAL de câmera AIDL

Para testar a implementação da HAL da câmera AIDL, verifique se o dispositivo passa em todos os testes do CTS e do VTS. O Android 13 apresenta o VTS da AIDL testam, VtsAidlHalCameraProvider_TargetTest.cpp

Recursos da HAL3 da câmera

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. O controle adicional facilita a criação de apps de câmera de alta qualidade em dispositivos Android que podem operar de maneira confiável em vários produtos, usando algoritmos específicos do dispositivo sempre que possível para maximizar a qualidade e o desempenho.

A versão 3 do subsistema da câmera estrutura os modos de operação em uma única visualização unificada, que pode ser usada para implementar qualquer um dos modos anteriores e vários outros, como o modo de disparo contínuo. 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 encapsulam 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 stream de mão única da versão 1 da câmera. Ele converte cada solicitação de 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 stream de buffers de imagem de uma resolução fixa.
  • 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 câmera HAL1

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

  • Visualizar
  • Gravação de vídeo
  • Captura de fotos

Cada modo tem recursos ligeiramente diferentes e sobrepostos. Isso dificultou a implementação de novos recursos, como o modo de disparo, que fica entre dois dos modos de operação.

Diagrama de blocos da câmera

Figura 2. Componentes da câmera

O Android 7.0 continua oferecendo suporte ao HAL1 da câmera, já que muitos dispositivos ainda dependem dele. 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ê quer oferecer suporte a uma câmera frontal menos capaz com a HAL1 e uma câmera traseira mais avançada com a HAL3.

Há um único módulo HAL de câmera (com o próprio número de versão), 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 versões (é isso o que queremos dizer com quando dizemos que o Android suporta a implementação de ambos HALs, na sigla em inglês).