O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Camera HAL3

A camada de abstração de hardware (HAL) da câmera do Android conecta as APIs da estrutura de câmera de nível superior em android.hardware.camera2 ao driver e ao hardware subjacentes da câmera. O Android 8.0 introduziu o Treble , alternando a API CameraHal para uma interface estável definida pela HIDL (HAL Interface Description Language). Se você já desenvolveu um módulo HAL da câmera e um driver para o Android 7.0 e inferior, esteja ciente de alterações significativas no pipeline da câmera.

Recursos da câmera HAL3

O objetivo do redesenho da API da câmera do Android é aumentar substancialmente a capacidade dos aplicativos de controlar o subsistema de câmeras nos 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 maneira confiável em vários produtos e ainda usar algoritmos específicos a dispositivos 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 visã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 visão simplificada facilita para os desenvolvedores de aplicativos usar as várias funções da câmera.

A API modela o subsistema de câmera como um pipeline que converte solicitações recebidas de captura de quadros em quadros, com base 1: 1. Os pedidos 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, lente e controle de flash; Modos de operação 3A; Controle de processamento RAW-> YUV; geração de estatísticas; e assim por diante.

Em termos simples, a estrutura do aplicativo solicita um quadro ao subsistema de câmera, e o subsistema de câmera retorna 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 canal 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 Result com metadados sobre a captura.
  • Um a N buffers de dados de imagem, cada um em seu próprio destino Surface.

O conjunto de possíveis superfícies de saída é 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ídas de uma vez (~ 3).

Uma solicitação contém todas as configurações de captura desejadas e a lista de Superfícies de saída para envio de buffers de imagem para essa solicitação (fora do conjunto total configurado). Uma solicitação pode ser de uma só vez (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 de câmeras foi projetada como uma caixa preta com controles de alto nível e os três modos operacionais a seguir:

  • Pré-visualização
  • Gravação de vídeo
  • Ainda captura

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

Diagrama de blocos da câmera

Figura 2. Componentes da câmera

O Android 7.0 continua a suportar a câmera HAL1, pois muitos dispositivos ainda dependem dela. Além disso, o serviço de câmera Android suporta a implementação de ambos os HALs (1 e 3), o que é útil quando você deseja oferecer suporte a uma câmera frontal com menos capacidade com a câmera HAL1 e uma câmera frontal mais avançada com a câmera HAL3.

Existe um módulo HAL de câmera única (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 aos 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 ambos os HALs).