Modo de exposição automática com aumento de pouca luz

O Android 15 apresenta o Modo de exposição automática (AE) com Modo pouca luz refinado, uma nova opção de exposição automática disponível para a Camera 2 e a extensão de câmera do modo noturno. O modo AE de aumento do modo pouca luz ajusta automaticamente o brilho do stream de visualização em condições de pouca luz. Isso é diferente de como a extensão de câmera do modo noturno cria imagens estáticas, porque o modo noturno combina uma sequência 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 AE de otimização em pouca luz pode. Assim, o modo AE de otimização em pouca luz permite novos recursos de câmera, como:

  • Oferecer uma prévia de imagem aprimorada para que os usuários possam enquadrar melhor as fotos com pouca luz.
  • Ler QR codes em locais com pouca luz.

Se você ativar o modo AE de Otimização em 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 de otimização em pouca luz na Camera2 ou com as extensões da câmera. Este documento aborda como usar o modo AE de otimização em pouca luz com a Camera2. Também é possível usar o modo AE de otimização de pouca luz com a extensão de câmera do modo noturno, se houver suporte no dispositivo.

Verificar disponibilidade

Antes de usar o modo AE de otimização em pouca luz, verifique se ele é compatível com o dispositivo. Se estiver disponível, o modo AE de Modo Pouca Luz Refinado será um dos modos de exposição listados em camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. O Modo pouca luz refinado é uma configuração de exposição automática própria, 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 do Modo pouca luz refinado.

Para verificar se o modo AE de otimização de pouca luz está disponível, chame CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) e confira se os modos retornados incluem ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY:

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.
}

Ativar o modo AE de aumento do modo pouca luz

Para ativar o modo AE de otimização em pouca luz em uma sessão da Camera2, defina CaptureRequest.CONTROL_AE_MODE como ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Depois disso, confirme se o modo AE de otimização em pouca luz foi ativado. Para isso, verifique o campo CaptureResult.CONTROL_AE_MODE. É preciso verificar, porque o recurso não é compatível com todas as configurações de câmera. Por exemplo, a gravação em alta velocidade não é compatível com o modo AE de otimização em pouca luz devido a considerações de QPS. Se o modo AE de otimização para pouca luz não estiver ativado, talvez seja necessário mudar a configuração da câmera e tentar de novo.

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
)

Monitorar o modo AE de aumento do modo pouca luz

O modo AE de aumento do modo pouca luz clareia 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 uma captura normal. Para confirmar se o modo AE de otimização em pouca luz está ativo, verifique o campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Se você tiver ativado o modo AE de Otimização em Pouca Luz e ele estiver ativo, o campo será definido como CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Em seguida, você pode mostrar um ícone de lua ou outra indicação de que a prévia está sendo clareada.

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
)