A camada de abstração de hardware da câmera (HAL) do Android conecta as APIs do framework de câmera de nível mais alto em android.hardware.camera2 ao driver e ao hardware da câmera. No Android 13 e versões mais recentes, o desenvolvimento da interface HAL da câmera 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 da 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. No entanto, os recursos de câmera adicionados no Android 13 ou versões mais recentes estão disponíveis apenas pela HAL de câmera de interface 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:
- Provedor da câmera:
hardware/interfaces/camera/provider/aidl/
- Dispositivo da câmera:
hardware/interfaces/camera/device/aidl/
- Metadados da câmera:
hardware/interfaces/camera/metadata/aidl/
- Tipos de dados comuns:
hardware/interfaces/camera/common/aidl/
Para dispositivos que migram para o AIDL, os fabricantes podem precisar modificar a política do Android SELinux (sepolicy) e os arquivos RC, dependendo da estrutura do código.
Validar 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 teste AIDL VTS,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Recursos da HAL3 da câmera
O objetivo do novo design da API Camera do Android é aumentar significativamente a capacidade de apps de controlar o subsistema de câmera em dispositivos Android, reorganizando a API para torná-la mais eficiente e fácil de manter. 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 um 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 facilita para os desenvolvedores de aplicativos usarem as várias funções da câmera.
A API modela o subsistema da câmera como um pipeline que converte as solicitações de capturas de frames recebidas em frames, em uma base 1:1. 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, controle manual de sensor, lente e flash, 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 do subsistema da câmera, e o subsistema da câmera retorna os resultados para um stream de saída. Além disso, os metadados que contêm informações como espaços de cor e sombreamento de lente são gerados para cada conjunto de resultados. Pense na versão 3 da câmera como um pipeline para o stream 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 na própria superfície de destino.
O conjunto de possíveis superfícies de saída é 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 por vez (cerca de três).
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 one-shot (com capture()
) ou
ser repetida indefinidamente (com setRepeatingRequest()
). As capturas
têm prioridade sobre solicitações repetidas.
![Modelo de dados da câmera](https://source.android.com/static/docs/core/camera/images/camera_simple_model.png?authuser=3&hl=pt-br)
Figura 1. Modelo de operação principal 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 modos de operação.
![Diagrama de blocos da câmera](https://source.android.com/static/docs/core/camera/images/camera_block.png?authuser=3&hl=pt-br)
Figura 2. Componentes da câmera
O Android 7.0 continua oferecendo suporte à HAL1 da câmera, já que muitos dispositivos ainda dependem dela. 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 a dispositivos 2 ou mais recentes, e esses módulos podem ter uma mistura de versões de dispositivos de câmera. Isso significa que o Android oferece suporte à implementação de ambos os HALs.