O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Câmera HAL

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

A camada de abstração de hardware de câmera (HAL) do Android conecta as APIs de estrutura de câmera de nível superior em android.hardware.camera2 ao driver e hardware de câmera subjacente. A partir do Android 13, o desenvolvimento da interface HAL da câmera usa AIDL . O Android 8.0 introduziu o Treble , alternando a API Camera HAL para uma interface estável definida pela linguagem de descrição da interface HAL (HIDL). Se você desenvolveu anteriormente um módulo e um driver HAL de câmera para Android 7.0 e inferior, esteja ciente de mudanças significativas no pipeline da câmera.

Câmera AIDL HAL

Para dispositivos com Android 13 ou superior, a estrutura da câmera inclui suporte para HALs de câmera AIDL. A estrutura da câmera também suporta HALs de câmera HIDL, no entanto, os recursos de câmera adicionados no Android 13 ou superior estão disponíveis apenas por meio das interfaces HAL de câmera AIDL. Para implementar esses recursos em dispositivos atualizados para o Android 13 ou superior, os fabricantes de dispositivos devem migrar seu processo HAL de usar interfaces de câmera HIDL para interfaces de câmera AIDL.

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

Implemente a câmera AIDL HAL

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

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

Para dispositivos migrando para AIDL, os fabricantes de dispositivos podem precisar modificar a política do Android SELinux (sepolicy) e os arquivos RC, dependendo da estrutura do código.

Validar câmera AIDL HAL

Para testar a implementação de HAL da câmera AIDL, certifique-se de que o dispositivo passe em todos os testes CTS e VTS. O Android 13 apresenta o teste AIDL VTS, VtsAidlHalCameraProvider_TargetTest.cpp .

Recursos da câmera HAL3

O objetivo do redesenho da Android Camera API é aumentar substancialmente a capacidade dos aplicativos de controlar o subsistema da câmera em dispositivos Android enquanto reorganiza a API para torná-la mais eficiente e sustentável. O controle adicional facilita a criação de aplicativos de câmera de alta qualidade em dispositivos Android que podem operar de forma confiável em vários produtos e ainda usar algoritmos específicos do dispositivo sempre que possível para maximizar a qualidade e o desempenho.

A versão 3 do subsistema de 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 burst. Isso resulta em melhor controle do usuário para 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 torna mais fácil para os desenvolvedores de aplicativos usar as várias funções da câmera.

A API modela o subsistema da câmera como um pipeline que converte solicitações de entrada para capturas de quadros em quadros, em uma base de 1:1. As solicitações encapsulam todas as informações de configuração sobre a captura e o processamento de um quadro. Isso inclui resolução e formato de pixel; sensor manual, controle de lente e flash; 3A modos de operação; Controle de processamento RAW->YUV; geração de estatísticas; e assim por diante.

Em termos simples, a estrutura do aplicativo solicita um quadro do subsistema da câmera e o subsistema da câmera retorna os resultados para um fluxo de saída. Além disso, os metadados que contêm informações como espaços de cores e sombreamento da lente são gerados para cada conjunto de resultados. Você pode pensar na versão 3 da câmera como um pipeline para o fluxo unidirecional 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.
  • Um a N buffers de dados de imagem, cada um em sua 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 resolução fixa.
  • Apenas um pequeno número de superfícies pode ser configurado como saída de uma só vez (~3).

Uma solicitação contém todas as configurações de captura desejadas e a lista de superfícies de saída para enviar buffers de imagem para essa solicitação (fora do conjunto total configurado). Uma solicitação pode ser única (com capture() ), ou pode ser repetida indefinidamente (com setRepeatingRequest() ). As 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
  • Ainda Capturar

Cada modo tem capacidades ligeiramente diferentes e sobrepostas. Isso dificultou a implementação de novos recursos, como o modo burst, que fica entre dois dos 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, pois muitos dispositivos ainda dependem dela. Além disso, o serviço de câmera do Android oferece suporte à implementação de HALs (1 e 3), o que é útil quando você deseja oferecer suporte a uma câmera frontal menos capaz 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 seu próprio número de versão ), que lista vários dispositivos de câmera independentes, cada um com seu próprio número de versão. O módulo de câmera 2 ou mais recente é necessário para oferecer suporte a dispositivos 2 ou mais recentes, e esses módulos de câmera podem ter uma mistura de versões de dispositivos de câmera (é isso que queremos dizer quando dizemos que o Android suporta a implementação de ambas as HALs).