어두운 조명 모드 자동 노출 모드

Android 15에서는 Camera 2야간 모드 카메라 확장 프로그램에서 모두 사용할 수 있는 새로운 자동 노출 모드인 어두운 조명 AE 모드를 도입합니다. 어두운 조명 AE 모드는 저조도 환경에서 미리보기 스트림의 밝기를 자동으로 조정합니다. 야간 모드는 연속 촬영한 사진을 결합하여 하나의 향상된 이미지를 만들기 때문에 야간 모드 카메라 확장 프로그램이 정지 이미지를 만드는 방식과는 다릅니다. 야간 모드는 정지 이미지를 만드는 데 매우 효과적이지만 연속 프레임 스트림을 만들 수는 없습니다. 하지만 저조도 부스트 AE 모드는 가능합니다. 따라서 어두운 조명 AE 모드를 사용하면 다음과 같은 새로운 카메라 기능을 사용할 수 있습니다.

  • 사용자가 저조도 사진을 더 잘 찍을 수 있도록 향상된 이미지 미리보기를 제공합니다.
  • 저조도에서 QR 코드 스캔

어두운 조명 AE 모드를 사용 설정하면 조명이 어두울 때 자동으로 켜지고 밝을 때 꺼집니다.

앱은 저조도 환경에서 미리보기 스트림을 녹화하여 밝기가 향상된 동영상을 저장할 수 있습니다.

어두운 조명 AE 모드는 Camera2 또는 카메라 확장 프로그램을 통해 사용할 수 있습니다. 이 문서에서는 Camera2에서 어두운 조명 AE 모드를 사용하는 방법을 설명합니다. 기기에서 지원하는 경우 야간 모드 카메라 확장 프로그램과 함께 어두운 조명 AE 모드를 사용할 수도 있습니다.

사용 가능 여부 확인

어두운 조명 AE 모드를 사용하기 전에 기기에서 지원되는지 확인하세요. 사용 가능한 경우 어두운 조명 AE 모드는 camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES에 나열된 노출 모드 중 하나입니다. 어두운 조명 AE 모드에서 실행되는 미리보기 밝기 조정과 다른 자동 노출 설정이 호환되지 않으므로 어두운 조명 AE 모드는 자체 자동 노출 설정입니다.

따라서 어두운 조명 AE 모드를 사용할 수 있는지 확인하려면 CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)를 호출하고 반환된 모드에 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
}

자바

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
}

어두운 조명 AE 모드 사용 설정

Camera2 세션에서 어두운 조명 AE 모드를 사용 설정하려면 CaptureRequest.CONTROL_AE_MODEON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY로 설정합니다. 그런 다음 어두운 조명 AE 모드가 사용 설정되었는지 확인해야 합니다. CaptureResult.CONTROL_AE_MODE 필드를 선택하면 됩니다. 어두운 조명 모드는 일부 카메라 구성과 호환되지 않으므로 확인해야 합니다. 예를 들어 FPS 고려사항으로 인해 고속 녹화는 어두운 조명 AE 모드를 지원하지 않습니다. 어두운 조명 AE 모드가 사용 설정되어 있지 않으면 카메라 구성을 변경하고 다시 시도해야 할 수 있습니다.

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
)

자바

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
);

어두운 조명 AE 모드 모니터링

어두운 조명 AE 모드는 저조도 환경에서 미리보기 스트림을 밝게 조정하며, 환경이 이미 일반 캡처에 충분히 밝은 경우에는 아무런 영향을 미치지 않습니다. CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE 필드를 선택하여 어두운 조명 AE 모드가 현재 활성 상태인지 확인할 수 있습니다. 어두운 조명 AE 모드를 사용 설정했고 현재 이 모드가 활성 상태인 경우 이 필드는 CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE로 설정됩니다. 그런 다음 달 아이콘이나 미리보기가 밝아지고 있음을 나타내는 기타 표시를 표시할 수 있습니다.

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
);