O Android 15 apresenta o Modo de exposição automática (AE) com reforço de pouca luz, um novo modo de exposição automática disponível para a Câmera 2 e a extensão de câmera do modo noturno. O modo AE de aumento de pouca luz ajusta automaticamente o brilho do fluxo de visualização em condições de pouca luz. Isso é diferente de como a extensão da câmera no modo noturno cria imagens estáticas, porque o modo noturno combina uma série de fotos para criar uma única imagem aprimorada. Embora o modo noturno funcione muito bem para criar uma imagem estática, ele não pode criar um fluxo contínuo de frames, mas o modo de AE de aumento de pouca luz pode. Assim, o Modo AE de reforço de pouca luz ativa novos recursos da câmera, como estes:
- Fornecer uma visualização de imagem aprimorada para que os usuários possam enquadrar melhor as fotos com pouca luz.
- Leitura de QR codes em locais com pouca luz.
Se você ativar o modo AE de reforço de pouca luz, ele será ativado automaticamente quando houver um nível de luz baixo e desativado quando houver mais luz.
Os apps podem gravar o fluxo de visualização em condições de pouca luz para salvar um vídeo mais claro.
É possível usar o modo AE com o Modo pouca luz na Camera2 ou nas extensões da câmera. Este documento aborda como usar o modo AE de reforço de pouca luz com a Camera2. Também é possível usar o modo AE de aumento de luz baixa com a extensão da câmera do Modo noturno se o dispositivo oferecer suporte a ele.
Verificar a disponibilidade
Antes de usar o modo AE de reforço de pouca luz, verifique se ele é compatível com o dispositivo.
Se estiver disponível, o Modo AE de reforço de pouca luz é um dos modos de exposição listados
em camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
. O Modo pouca luz
é uma configuração de exposição automática, já que outras configurações de exposição automática
não são compatíveis com o clareamento de visualização realizado pelo Modo AE de Modo pouca luz.
Para verificar se o modo de AE de reforço de pouca luz está disponível, chame
CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
e verifique se os modos retornados incluem ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
:
Kotlin
val characteristics = cameraManager.getCameraCharacteristics(cameraId) val autoExposureModes = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)!! val lowLightBoostSupported = autoExposureModes.contains( CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY) if (lowLightBoostSupported) { // Enable Low Light Boost AE Mode (next section) } else { // Proceed without Low Light Boost AE Mode }
Java
CameraCharacteristics characteristics = mCameraManager.getCameraCharacteristics(cameraId); int[] autoExposureModes = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES); boolean lowLightBoostSupported = autoExposureModes.contains( CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY); if (lowLightBoostSupported) { // Enable Low Light Boost AE Mode (next section) } else { // Proceed without Low Light Boost AE Mode }
Ativar o modo de otimização de pouca luz
Para ativar o modo AE do Modo pouca luz refinado em uma sessão do Camera2, defina
CaptureRequest.CONTROL_AE_MODE
como
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
. Depois disso, você vai precisar
confirmar se o modo de AE de reforço de pouca luz foi ativado. Para isso, marque
o campo CaptureResult.CONTROL_AE_MODE
. É necessário verificar porque o aumento
do modo pouca luz não é compatível com todas as configurações de câmera. Por exemplo,
a gravação de alta velocidade não oferece suporte ao modo AE de aumento de pouca luz devido a considerações
de QPS. Se o modo de AE de reforço de pouca luz não estiver ativado, talvez seja necessário
mudar a configuração da câmera e tentar novamente.
Kotlin
val captureRequestBuilder = camera.createCaptureRequest( CameraDevice.TEMPLATE_PREVIEW) if (isLowLightBoostAvailable(cameraId)) { captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY ) } // other capture request params session.setRepeatingRequest( captureRequestBuilder.build(), object : CaptureCallback() { @Override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) { // verify Low Light Boost AE Mode AE mode set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY } }, cameraHandler )
Java
CaptureRequest.Builder captureRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); if (isLowLightBoostAvailable(cameraId)) { captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY); } // other capture request params mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // verify Low Light Boost AE Mode AE mode set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY; } }, mCameraHandler );
Monitorar o modo AE de aumento de pouca luz
O modo de AE com reforço de pouca luz ilumina o fluxo de visualização em condições de pouca luz
e não tem efeito se o ambiente já estiver claro o suficiente para
a captura normal. Para confirmar se o modo de AE de reforço de baixa luminosidade está
ativo, marque o campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
.
Se você ativou o modo AE de reforço de pouca luz e ele estiver ativo, o
campo será definido como
CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
.
Você pode mostrar um ícone de lua ou outra indicação de que a visualização está
sendo iluminada.
Kotlin
session.setRepeatingRequest( captureRequestBuilder.build(), object : CaptureCallback() { @Override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) { // check if Low Light Boost AE Mode is active or inactive if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) { // Low Light Boost AE Mode state is active // Show Moon Icon } else { // Low Light Boost AE Mode state is inactive or AE mode is not set // to Low Light Boost AE Mode // Hide Moon Icon } } }, cameraHandler )
Java
mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // check if Low Light Boost AE Mode is active or inactive if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) { // Low Light Boost AE Mode state is active // Show Moon Icon } else { // Low Light Boost AE Mode state is inactive or AE mode is not set // to Low Light Boost AE Mode // Hide Moon Icon } } }, mCameraHandler );