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:
- Provedor da câmera:
hardware/interfaces/camera/provider/aidl/
- Dispositivo de 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 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.
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.
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).