O bokeh da câmera é um efeito de profundidade de campo rasa criado desfocando partes de uma cena para que elas não fiquem em foco. Em câmeras de dispositivos móveis, o bokeh é atingido usando informações de profundidade adquiridas da visão estéreo de duas câmeras ou de dois fotodiodos (PDs) de uma única câmera.
A partir do Android 11, a plataforma Android oferece suporte a implementações de bokeh e fornece APIs para disponibilizar o recurso a apps de terceiros.
Implementação
Para disponibilizar o recurso de desfoque da câmera no seu dispositivo, faça o seguinte:
Anunciar
ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES
:Essa tag está no formato de uma matriz de tupla de três números inteiros, com cada tupla no formato de
{mode, maxWidth, maxHeight}
. Além de{ANDROID_CONTROL_EXTENDED_SCENE_MODE_DISABLED, 0, 0}
, a HAL da câmera também precisa listar um ou ambos os modosANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE
eANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS
com os tamanhos máximos de streaming correspondentes.Anunciar
ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES
:Essa tag está no formato de uma matriz
{minZoomRatio, maxZoomRatio}
, que contém todos os intervalos de proporção de zoom para um modo de cena estendida ativado, na mesma ordem que emANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES
. Um intervalo de zoom de[1.0, 1.0]
significa que o zoom não é compatível.Preencha
ANDROID_CONTROL_USE_EXTENDED_SCENE_MODE
emANDROID_CONTROL_AVAILABLE_MODES
.
Para acionar o recurso de bokeh, o app precisa definir ANDROID_CONTROL_MODE
como ANDROID_CONTROL_USE_EXTENDED_SCENE_MODE
e
ANDROID_CONTROL_EXTENDED_SCENE_MODE
como um dos modos de cena estendidos compatíveis.
A implementação do bokeh pode levar ao consumo extra de memória devido à
computação estéreo.
Se um modo de cena estendida compatível não puder ser aplicado por frame e resultar em
atrasos inesperados quando ativado/desativado, inclua
ANDROID_CONTROL_EXTENDED_SCENE_MODE
em
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
. Ao mesmo tempo, implemente o
método ICameraDeviceSession::isReconfigurationRequired()
para evitar
a reconfiguração de modos de cena estendidos que não exigem isso.
Validação
Para validar o recurso bokeh no seu dispositivo, execute os seguintes testes de CTS, VTS e CTS Verifier:
CtsCameraTestCases
VtsHalCameraProviderV2_4TargetTest
CameraBokehTest
no CTS Verifier