Esta página detalha as diferenças de versão em HALs de câmera, APIs e testes associados do Compatibility Test Suite (CTS). Ele também aborda várias mudanças arquitetônicas feitas para proteger e reforçar o framework da câmera no Android 7.0, a mudança para o Treble no Android 8.0 e as atualizações que os fornecedores precisam fazer para oferecer suporte a essas mudanças nas implementações de câmera.
Terminologia
Os seguintes termos são usados nesta página:
- API Camera1
- O framework de câmera no nível do app em dispositivos com Android 4.4 e versões anteriores, exposto
pela classe
android.hardware.Camera
. - API Camera2
- O framework de câmera no nível do app em dispositivos Android 5.0 e mais recentes, exposto
pelo pacote
android.hardware.camera2
. - HAL da câmera
- A camada do módulo de câmera implementada pelos fornecedores de SoC. Os frameworks públicos no nível do app são criados com base na HAL da câmera.
- Câmera HAL3.1
- Versão da HAL do dispositivo de câmera lançada com o Android 4.4.
- HAL3.2 da câmera
- Versão da HAL do dispositivo de câmera lançada com o Android 5.0.
- CTS da API Camera1
- Conjunto de testes CTS da câmera executados na API Camera1.
- CTS da API Camera2
- Conjunto adicional de testes do CTS da câmera executados na API Camera2.
- Agudo
- Separa a implementação do fornecedor (software específico do dispositivo e de nível inferior escrito por fabricantes de hardware) do framework do SO Android por uma nova interface do fornecedor.
- HIDL
- Linguagem de definição da interface HAL introduzida com o Treble e usada para especificar a interface entre uma HAL e os usuários dela.
- VTS O
- pacote de testes de fornecedor foi lançado junto com o Treble.
APIs de câmera
O Android inclui as seguintes APIs de câmera.
API Camera1
O Android 5.0 descontinuou a API Camera1, que continua sendo desativada à medida que o novo desenvolvimento da plataforma se concentra na API Camera2. No entanto, o período de descontinuação será longo, e as versões do Android continuarão oferecendo suporte aos apps da API Camera1 por algum tempo. Especificamente, o suporte continua para:
- Interfaces da API Camera1 para apps. Os apps de câmera criados com base na API 1 da câmera devem funcionar como em dispositivos com versões mais antigas do Android.
- Versões da HAL da câmera. Inclui suporte para Camera HAL 1.0.
API Camera2
A estrutura Camera API2 expõe o controle de câmera de nível mais baixo ao app, incluindo fluxos eficientes de burst/streaming sem cópia e controles por frame de exposição, ganho, ganhos de balanço de branco, conversão de cores, remoção de ruído, nitidez, e muito mais. Para mais detalhes, assista a visão geral em vídeo do Google I/O.
O Android 5.0 e versões mais recentes incluem a API Camera2, mas os dispositivos com essas versões podem não oferecer suporte a todos os recursos da API. A propriedade
android.info.supportedHardwareLevel
, que os apps podem consultar
pelas interfaces da API Camera2, informa um dos seguintes níveis de
suporte:
LEGACY
: esses dispositivos expõem recursos aos apps pelas interfaces da API Camera2, que são aproximadamente os mesmos recursos expostos aos apps pelas interfaces da API Camera1. O conceito de código dos frameworks legados traduz conceitualmente as chamadas da API Camera2 em chamadas da API Camera1. Os dispositivos legados não são compatíveis com recursos da API Camera2, como controles por frame.LIMITED
: esses dispositivos são compatíveis com alguns recursos da API Camera2 (mas não todos) e precisam usar o HAL 3.2 da câmera ou uma versão mais recente.FULL
: esses dispositivos são compatíveis com todos os principais recursos da API Camera2 e precisam usar a HAL da câmera 3.2 ou mais recente e o Android 5.0 ou mais recente.LEVEL_3
: esses dispositivos são compatíveis com o reprocessamento de YUV e a captura de imagens RAW, além de outras configurações de stream de saída.EXTERNAL
: esses dispositivos são semelhantes aosLIMITED
, com algumas exceções. Por exemplo, algumas informações de sensor ou lente podem não ser informadas ou ter taxas de frames menos estáveis. Esse nível é usado para câmeras externas, como webcams USB.
Os recursos individuais são expostos pela propriedade
android.request.availableCapabilities
nas interfaces
Camera API2. Os dispositivos FULL
exigem os recursos MANUAL_SENSOR
e MANUAL_POST_PROCESSING
, entre outros. A funcionalidade
RAW
é opcional, mesmo para dispositivos FULL
.
Os dispositivos LIMITED
podem anunciar qualquer subconjunto desses recursos, incluindo nenhum deles. No entanto, a capacidade BACKWARD_COMPATIBLE
sempre precisa ser definida.
O nível de hardware compatível do dispositivo, bem como os recursos específicos da API Camera 2 que ele oferece suporte, estão disponíveis como as seguintes flags de recurso para permitir a filtragem do Google Play de apps de câmera da API Camera2.
android.hardware.camera.hardware_level.full
android.hardware.camera.capability.raw
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.manual_post_processing
Requisitos do CTS
Os dispositivos com o Android 5.0 e versões mais recentes precisam passar nos testes do CTS da API1 e API2 da câmera e do CTS Verifier.
Os dispositivos que não têm uma implementação do HAL3.2 de câmera e não são capazes de oferecer suporte a todas as interfaces da API Camera2 ainda precisam passar nos testes do CTS da API Camera2. No entanto, o dispositivo é executado no modo
LEGACY
da API Camera2 (em que as chamadas da API Camera2 são mapeadas conceitualmente
para chamadas da API Camera1). Portanto, todos os testes do CTS da API Camera2 relacionados a recursos ou
capacidades além da API Camera1 são ignorados automaticamente.
Em dispositivos legados, os testes CTS da API Camera2 executados usam as interfaces e recursos públicos da API Camera1 atuais sem novos requisitos. Os bugs expostos (e que causam uma falha no CTS da API2 da câmera) já estão presentes na HAL da câmera do dispositivo e, portanto, seriam encontrados por apps da API1 da câmera. Não esperamos muitos bugs dessa natureza. No entanto, todos eles precisam ser corrigidos para passar nos testes do CTS da API Camera2.
Requisitos do VTS
Os dispositivos que executam o Android 8.0 e versões mais recentes com implementações de HAL binderizadas precisam passar nos testes VTS da câmera.
Aumento da proteção do framework da câmera
Para reforçar a segurança da mídia e do framework da câmera, o Android 7.0 move o serviço de câmera para fora do mediaserver. A partir do Android 8.0, cada HAL de câmera binderizado é executado em um processo separado do serviço de câmera. Os fornecedores talvez precisem fazer mudanças na HAL da câmera, dependendo das versões da API e da HAL em uso. As seções a seguir detalham as mudanças de arquitetura nas AP1 e AP2 para HAL1 e HAL3, além dos requisitos gerais.
Mudanças arquitetônicas para a API1
A gravação de vídeo da API1 pode presumir que a câmera e o codificador de vídeo estão no mesmo processo. Ao usar a API1 em:
- HAL3, em que o serviço de câmera usa BufferQueue para transmitir buffers entre
processos, não é necessária uma atualização do fornecedor.
Figura 1. Câmera e pilha de mídia do Android 7.0 na API1 no HAL3
- HAL1, que oferece suporte à transmissão de metadados em buffers de vídeo, os fornecedores precisam
atualizar a HAL para usar
kMetadataBufferTypeNativeHandleSource
. (kMetadataBufferTypeCameraSource
não é mais compatível com o Android 7.0.)Figura 2. Pilha de mídia e câmera do Android 7.0 na API1 no HAL1
Mudanças arquitetônicas para a API2
Para API2 no HAL1 ou HAL3, o BufferQueue transmite buffers para que esses caminhos continuem funcionando. A arquitetura do Android 7.0 para API2 em:
- A HAL1 não é afetada pela movimentação do cameraservice, e nenhuma atualização do fornecedor é necessária.
- O HAL3 é afetado, mas nenhuma atualização do fornecedor é
necessária:
Figura 3. Pilha de mídia e câmera do Android 7.0 na API2 no HAL3
Outros requisitos
As mudanças arquitetônicas feitas para reforçar a segurança da mídia e da estrutura da câmera incluem os seguintes requisitos adicionais do dispositivo.
- Geral. Os dispositivos exigem mais largura de banda devido à IPC, o que pode afetar casos de uso de câmera sensíveis ao tempo, como gravação de vídeo em alta velocidade. Os fornecedores podem medir o impacto real executando
android.hardware.camera2.cts.PerformanceTest
e o app Google Câmera para gravação de vídeo em alta velocidade de 120/240 FPS. Os dispositivos também precisam de uma pequena quantidade de RAM adicional para criar o novo processo. - Transmitir metadados em buffers de vídeo (somente HAL1). Se o HAL1
armazenar metadados em vez de dados de frame YUV reais em buffers de vídeo, ele precisará
usar
kMetadataBufferTypeNativeHandleSource
como o tipo de buffer de metadados e transmitirVideoNativeHandleMetadata
em buffers de vídeo. (kMetadataBufferTypeCameraSource
não é mais compatível com o Android 7.0.) Com oVideoNativeHandleMetadata
, as estruturas de câmera e mídia podem transmitir os buffers de vídeo entre processos serializando e desserializando os identificadores nativos corretamente. - O endereço do identificador de buffer nem sempre armazena o mesmo buffer (somente HAL3). Para cada solicitação de captura, o HAL3 recebe endereços de identificadores de buffer. O HAL não pode usar os endereços para identificar buffers porque eles podem armazenar outro identificador de buffer depois que o HAL retorna o buffer. Atualize a HAL para usar identificadores de buffer e identificar os buffers. Por exemplo, a HAL recebe um endereço A de identificador de buffer, que armazena o identificador de buffer A. Depois que a HAL retorna o identificador de buffer A, o endereço do identificador de buffer A pode armazenar o identificador de buffer B na próxima vez que a HAL o receber.
- Atualize as políticas do SELinux para o cameraserver. Se as políticas do SELinux específicas do dispositivo concederem permissões ao mediaserver para executar a câmera, atualize as políticas do SELinux para conceder permissões adequadas ao cameraserver. Não recomendamos replicar as políticas do SELinux do mediaserver para o cameraserver, já que eles geralmente exigem recursos diferentes no sistema. O cameraserver só pode ter as permissões necessárias para realizar funcionalidades de câmera, e todas as permissões desnecessárias relacionadas à câmera no mediaserver precisam ser removidas.
- Separação entre a HAL da câmera e o servidor de câmera. O Android 8.0 e versões mais recentes também separam a HAL de câmera vinculada em um processo diferente do cameraserver. O IPC passa por interfaces definidas por HIDL.
Validação
Para todos os dispositivos que incluem uma câmera e executam o Android 7.0, verifique a implementação executando o CTS do Android 7.0. Embora o Android 7.0 não inclua novos testes do CTS que verificam mudanças no serviço de câmera, os testes atuais falham se você não tiver feito as atualizações indicadas acima.
Para todos os dispositivos que incluem uma câmera e executam o Android 8.0 ou versões mais recentes, verifique a implementação do fornecedor executando o VTS.
Histórico de versões da HAL da câmera
Para conferir uma lista de testes disponíveis para avaliar a HAL da câmera do Android, consulte a Lista de verificação de testes da HAL da câmera.
Android 10
O Android 10 traz as seguintes atualizações.
API da câmera
- Melhorias na funcionalidade de várias câmeras que permitem o uso de câmeras físicas individualmente ou por câmeras lógicas correspondentes, ocultando os IDs das câmeras físicas. Consulte Compatibilidade com várias câmeras.
- Capacidade de verificar se uma configuração de sessão específica é compatível sem a sobrecarga de desempenho da criação de uma nova sessão.
Consulte
CameraDevice
. - Capacidade de recuperar configurações de stream recomendadas para um determinado caso de uso, tornando o cliente mais eficiente em termos de energia e desempenho. Consulte
getRecommendedStreamConfigurationMap
. - Compatibilidade com o formato de imagem JPEG de profundidade. Para mais detalhes, consulte a especificação de profundidade dinâmica.
- Compatibilidade com o formato de imagem HEIC. Consulte Tecnologia HEIF.
- Melhorias de privacidade. Algumas chaves são necessárias para que o cliente tenha permissões de
CAMERA
antes de serem recuperadas deCameraCharacteristics
. ConsultegetKeysNeedingPermission
.
HAL da câmera
As seguintes versões da HAL da câmera foram atualizadas no Android 10.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: As informações estáticas da câmera para um ID de câmera física que apoia um dispositivo de câmera lógica. Consulte Compatibilidade com várias câmeras. isStreamCombinationSupported
: esse método oferece suporte a uma API pública que ajuda os clientes a consultar se uma configuração de sessão é compatível. Consulte API para consultar combinações de streams.
ICameraDeviceSession
-
isReconfigurationNeeded
: Método que informa ao framework da câmera se uma reconfiguração completa do stream é necessária para possíveis novos valores de parâmetro de sessão. Isso ajuda a evitar atrasos desnecessários na reconfiguração da câmera. Consulte Consulta de reconfiguração de sessão. - APIs de gerenciamento de buffer da HAL: essas APIs permitem que a HAL da câmera solicite buffers do framework da câmera somente quando necessário, em vez de acoplar cada solicitação de captura com os buffers associados em todo o pipeline da câmera, resultando em uma economia de memória potencialmente significativa.
-
signalStreamFlush
: sinaliza para a HAL que o serviço de câmera está prestes a executarconfigureStreams_3_5
e que a HAL precisa retornar todos os buffers de streams designados. -
configureStreams_3_5
: semelhante aICameraDevice3.4.configureStreams
, mas, além disso, o contadorstreamConfigCounter
é fornecido para verificar uma condição de corrida entre as chamadasconfigureStreams_3_5
esignalStreamFlush
.
-
Atualizações do ICameraDeviceCallback
:
-
requestStreamBuffers
: Callback síncrono que a HAL da câmera chama para pedir buffers ao servidor da câmera. ConsulterequestStreamBuffers
. -
returnStreamBuffers
: Callback síncrono para o HAL da câmera retornar buffers de saída ao servidor de câmera. ConsultereturnStreamBuffers
.
3.4
As seguintes chaves são adicionadas aos metadados da câmera no Android 10.
- Formatos de imagem
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- Tags de metadados da câmera
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
ANDROID_HEIC_INFO_SUPPORTED
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
- Recursos
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- Valores para a chave
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- Configurações de stream de profundidade dinâmica disponíveis
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
- Configurações de stream HEIC disponíveis
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
Módulo de câmera
As seguintes versões do módulo de câmera foram atualizadas no Android 10.
2.5
- Adiciona o método
notifyDeviceStateChange
para que os dispositivos notifiquem a HAL da câmera quando mudanças físicas, como dobrar, afetam a câmera e o roteamento.
2.4
- Os dispositivos lançados com o nível 29 da API ou mais recente PRECISAM informar
true
paraisTorchModeSupported
.
Android 9
A versão do Android 9 introduz as seguintes atualizações na API2 da câmera e na interface HAL.
API da câmera
- Apresenta a API de várias câmeras para oferecer melhor suporte a dispositivos com várias câmeras apontando na mesma direção, permitindo recursos como bokeh e zoom contínuo. Isso permite que os apps vejam várias câmeras em um dispositivo como uma unidade lógica (câmera lógica). As solicitações de captura também podem ser enviadas para dispositivos de câmera individuais abrangidos por uma câmera lógica. Consulte Compatibilidade com várias câmeras.
- Apresenta os parâmetros de sessão. Os parâmetros de sessão são um subconjunto dos parâmetros de captura disponíveis que podem causar atrasos graves no processamento quando modificados. Esses custos podem ser reduzidos se os clientes transmitirem os valores iniciais durante a inicialização da sessão de captura. Consulte Parâmetros de sessão.
- Adiciona chaves de dados de estabilização óptica (OIS, na sigla em inglês) para estabilização e
efeitos no nível do app. Consulte
STATISTICS_OIS_SAMPLES
. - Adiciona suporte a flash externo. Consulte
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. - Adiciona uma intent de rastreamento de movimento em
CAPTURE_INTENT
. ConsulteCONTROL_CAPTURE_INTENT_MOTION_TRACKING
. - Descontinua
LENS_RADIAL_DISTORTION
e adicionaLENS_DISTORTION
no lugar dele. - Adiciona modos de correção de distorção em
CaptureRequest
. ConsulteDISTORTION_CORRECTION_MODE
. - Adiciona suporte para câmeras USB/UVC externas em dispositivos compatíveis. Consulte
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
HAL da câmera
3.4
Atualizações do ICameraDeviceSession
-
configureStreams_3_4
: Adiciona suporte asessionParameters
e câmeras lógicas. -
processCaptureRequest_3_4
: Adiciona suporte para incluir IDs de câmeras físicas na estrutura de stream.
Atualizações do ICameraDeviceCallback
-
processCaptureResult_3_4
: adiciona metadados da câmera física aos resultados da captura.
3.3
As seguintes chaves são adicionadas aos metadados da câmera no Android 9.
- Recursos
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- Tags de metadados da câmera
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
ANDROID_STATISTICS_OIS_DATA_MODE
ANDROID_STATISTICS_OIS_TIMESTAMPS
ANDROID_STATISTICS_OIS_X_SHIFTS
ANDROID_STATISTICS_OIS_Y_SHIFTS
Android 8.0
O lançamento do Android 8.0 introduz o Treble. Com o Treble, as implementações de HAL da câmera do fornecedor precisam ser binderizadas. O Android 8.0 também contém estas melhorias principais no serviço de Câmera:
- Superfícies compartilhadas: permitem que várias superfícies compartilhem o mesmo
OutputConfiguration
- API do sistema para modos de câmera personalizados
onCaptureQueueEmpty
Consulte as seções abaixo para mais informações sobre esses recursos.
Superfícies compartilhadas
Esse recurso permite que apenas um conjunto de buffers acione duas saídas, como prévia e codificação de vídeo, o que reduz o consumo de energia e memória. Para oferecer suporte a esse recurso, os fabricantes de dispositivos precisam garantir que as implementações de HAL da câmera e gralloc HAL possam criar buffers gralloc usados por vários consumidores diferentes (como o compositor de hardware/GPU e o codificador de vídeo), em vez de apenas um consumidor. O serviço de câmera transmite as flags de uso do consumidor para a HAL da câmera e a HAL do gralloc. Elas precisam alocar os tipos certos de buffers ou a HAL da câmera precisa retornar um erro informando que essa combinação de consumidores não é compatível.
Consulte a
enableSurfaceSharing
documentação para desenvolvedores para mais detalhes.
API do sistema para modos de câmera personalizados
A API pública de câmera define dois modos de operação: gravação normal e de alta velocidade restrita. Elas têm semânticas bem diferentes. Por exemplo, o modo de alta velocidade é limitado a no máximo duas saídas específicas por vez. Vários OEMs expressaram interesse em definir outros modos personalizados para recursos específicos de hardware. Por baixo dos panos, o modo é apenas um número inteiro
transmitido para configure_streams
. Consulte:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Esse recurso inclui uma chamada de API do sistema que os apps de câmera OEM podem usar para ativar um modo personalizado. Esses modos precisam começar com o valor inteiro 0x8000 para evitar conflitos com modos futuros adicionados à API pública.
Para oferecer suporte a esse recurso, os OEMs só precisam adicionar o novo modo ao HAL, acionado por esse número inteiro transmitido ao HAL em configure_streams, e fazer com que o app de câmera personalizado use a API do sistema.
O nome do método é
android.hardware.camera2.CameraDevice#createCustomCaptureSession
.
Consulte:
frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueEmpty
O objetivo dessa API é reduzir a latência de mudanças de controle, como zoom, mantendo a fila de solicitações o mais vazia possível. onCaptureQueueEmpty
não exige trabalho de HAL. É apenas uma adição do lado do framework. Os apps que
quiserem aproveitar esse recurso precisam adicionar um listener a esse callback e responder
de maneira adequada. Geralmente, isso é feito enviando outra solicitação de captura para o dispositivo
de câmera.
Interface HIDL da câmera
A interface HIDL da câmera é uma revisão completa da interface HAL da câmera que usa APIs estáveis definidas em HIDL. Todos os recursos e funcionalidades da câmera introduzidos nas versões legadas mais recentes 3.4 e 2.4 (para o módulo de câmera) também fazem parte das definições de HIDL.
3.4
Pequenas adições aos metadados compatíveis e mudanças no suporte a data_space:
- Adicione metadados estáticos
ANDROID_SENSOR_OPAQUE_RAW_SIZE
como obrigatórios se o formatoRAW_OPAQUE
for compatível. - Adicione metadados estáticos
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
como obrigatórios se algum formato RAW for compatível. - Mude o campo
camera3_stream_t data_space
para uma definição mais flexível, usando a definição da versão 0 de codificação do espaço de dados. - Adições gerais de metadados disponíveis para uso no HALv3.2 ou mais recente:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
ANDROID_SENSOR_OPAQUE_RAW_SIZE
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
Revisão secundária do HAL de capacidade expandida:
- Atualizações da API de reprocessamento OPAQUE e YUV.
- Suporte básico para buffers de saída de profundidade.
- O campo
data_space
foi adicionado acamera3_stream_t
. - Adição do campo de rotação a
camera3_stream_t
. - Adição do modo de operação de configuração de fluxo camera3 a
camera3_stream_configuration_t
.
3.2
Revisão secundária do HAL de capacidade expandida:
- Descontinua
get_metadata_vendor_tag_ops
. Useget_vendor_tag_ops
emcamera_common.h
. - Descontinua
register_stream_buffers
. Todos os buffers gralloc fornecidos pelo framework para a HAL emprocess_capture_request
podem ser novos a qualquer momento. - Adição de suporte a resultados parciais.
process_capture_result
pode ser chamado várias vezes com um subconjunto dos resultados disponíveis antes que o resultado completo esteja disponível. - Adicione um modelo manual a
camera3_request_template
. Os apps podem usar esse modelo para controlar as configurações de captura diretamente. - Refaça as especificações de fluxo de entrada e bidirecional.
- Mude o caminho de retorno do buffer de entrada. O buffer é retornado em
process_capture_result
em vez deprocess_capture_request
.
3.1
Revisão secundária do HAL de capacidade expandida:
- O
configure_streams
transmite flags de uso do consumidor para a HAL. - Chamada de limpeza para descartar todas as solicitações/buffers em andamento o mais rápido possível.
3.0
Primeira revisão do HAL de capacidade expandida:
- Mudança na versão principal porque a ABI é completamente diferente. Não há mudanças nos recursos de hardware ou no modelo operacional necessários da versão 2.0.
- Interfaces de solicitação de entrada e fila de stream reformuladas: o framework chama o HAL com a próxima solicitação e buffers de stream já removidos da fila. O suporte ao framework de sincronização está incluído e é necessário para implementações eficientes.
- Movemos os gatilhos para solicitações e a maioria das notificações para resultados.
- Consolidei todos os callbacks no framework em uma estrutura e todos os métodos de configuração em uma única chamada
initialize()
. - Transformamos a configuração de stream em uma única chamada para simplificar o gerenciamento.
Fluxos bidirecionais substituem a construção
STREAM_FROM_STREAM
. - Semântica do modo limitado para dispositivos de hardware mais antigos/limitados.
2.0
Versão inicial do HAL de capacidade expandida (Android 4.2) [camera2.h]:
- Suficiente para implementar a API
android.hardware.Camera
existente. - Permite a fila ZSL na camada de serviço da câmera.
- Não testado para novos recursos, como controle manual de captura, captura Bayer RAW, reprocessamento de dados RAW etc.
1.0
HAL inicial da câmera do Android (Android 4.0) [camera.h]:
- Convertida da camada de abstração C++ CameraHardwareInterface.
- Compatível com a API
android.hardware.Camera
.
Histórico de versões do módulo de câmera
Esta seção contém informações sobre o controle de versões do módulo de hardware da câmera, com base em camera_module_t.common.module_api_version
. Os dois dígitos hexadecimais mais significativos representam a versão principal, e os dois menos significativos representam a versão secundária.
2.4
Esta versão do módulo de câmera adiciona as seguintes mudanças na API:
- Compatibilidade com o modo de lanterna. O framework pode ativar o modo de lanterna para qualquer dispositivo de câmera com flash sem abrir o dispositivo. O dispositivo de câmera tem uma prioridade maior de acesso à unidade de flash do que o módulo de câmera. Abrir um dispositivo de câmera desativa a lanterna se ela tiver sido ativada pela interface do módulo. Quando há conflitos de recursos, como
open()
sendo chamado para abrir um dispositivo de câmera, o módulo HAL da câmera precisa notificar o framework pelo callback de status do modo de iluminação que o modo foi desativado. - Suporte para câmera externa (por exemplo, câmera USB hot-plug). As atualizações da
API especificam que as informações estáticas da câmera só estão disponíveis quando ela está
conectada e pronta para uso em câmeras externas com hot-plug. As chamadas para receber informações estáticas são inválidas quando o status da câmera não é
CAMERA_DEVICE_STATUS_PRESENT
. O framework conta apenas com callbacks de mudança de status do dispositivo para gerenciar a lista de câmeras externas disponíveis. - Dicas de arbitragem da câmera. Adiciona suporte para indicar explicitamente
o número de dispositivos de câmera que podem ser abertos e usados simultaneamente. Para especificar combinações válidas de dispositivos, os campos
resource_cost
econflicting_devices
precisam sempre ser definidos na estruturacamera_info
retornada pela chamadaget_camera_info
. - Método de inicialização do módulo. Chamado pelo serviço de câmera depois que o módulo HAL é carregado para permitir a inicialização única da HAL. Ele é chamado antes de qualquer outro método do módulo ser invocado.
2.3
Esta versão do módulo de câmera adiciona suporte a dispositivos HAL de câmera legada aberta.
A estrutura pode usar isso para abrir o dispositivo de câmera como uma versão HAL de dispositivo inferior
HAL se o mesmo dispositivo for compatível com várias versões da API do dispositivo.
A chamada aberta do módulo de hardware padrão (common.methods->open
) continua abrindo o dispositivo de câmera com a versão compatível mais recente, que também é a versão listada em camera_info_t.device_version
.
2.2
Essa versão do módulo de câmera adiciona suporte a tags de fornecedor do módulo e
descontinua as antigas vendor_tag_query_ops
que antes só eram
acessíveis com um dispositivo aberto.
2.1
Esta versão do módulo de câmera adiciona suporte a callbacks assíncronos ao
framework do módulo HAL da câmera, que é usado para notificar o framework
sobre mudanças no estado do módulo de câmera. Os módulos que fornecem um método set_callbacks()
válido precisam informar pelo menos esse número de versão.
2.0
Os módulos de câmera que informam esse número de versão implementam a segunda versão
da interface HAL do módulo de câmera. Os dispositivos de câmera que podem ser abertos por esse
módulo podem oferecer suporte à versão 1.0 ou 2.0 da interface HAL do dispositivo de câmera. O campo device_version
de camera_info é sempre válido. O campo static_camera_characteristics
de camera_info
é válido se o campo device_version
for 2.0 ou superior.
1.0
Os módulos de câmera que informam esses números de versão implementam a interface inicial
HAL do módulo de câmera. Todos os dispositivos de câmera que podem ser abertos por este
módulo oferecem suporte apenas à versão 1 do HAL do dispositivo de câmera. Os campos
device_version
e static_camera_characteristics
de camera_info
não são válidos. Somente a API
android.hardware.Camera
pode ser compatível com esse módulo e os
dispositivos dele.