저조도 증폭

Android 15에는 카메라 2야간 모드 카메라 확장 프로그램에서 모두 사용할 수 있는 새로운 자동 노출 모드인 어두운 조명 증폭이 도입되었습니다. Low Light Boost는 조명이 어두운 환경에서 미리보기 스트림의 밝기를 자동으로 조정합니다. 야간 모드 카메라 확장 프로그램이 스틸 이미지를 만드는 방법과는 다릅니다. 야간 모드에서는 여러 장의 사진을 결합하여 향상된 단일 이미지를 만들기 때문입니다. 야간 모드는 정지 이미지를 만드는 데 매우 적합하지만 연속적인 프레임 스트림을 만들 수는 없지만 Low Light Boost는 만들 수 있습니다. 따라서 Low Light Boost를 사용하면 다음과 같은 새로운 카메라 기능을 사용할 수 있습니다.

  • 사용자가 어두운 사진의 프레임을 더 잘 조정할 수 있도록 개선된 이미지 미리보기를 제공합니다.
  • 어두운 곳에서 QR 코드를 스캔 중입니다.

어두운 조명 부스트를 사용 설정하면 조명 수준이 낮을 때 자동으로 켜지고 조명이 더 많으면 자동으로 꺼집니다.

앱은 조명이 어두운 환경에서 미리보기 스트림을 녹화하여 밝게 된 동영상을 저장할 수 있습니다.

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

재고 확인

Low Light Boost를 사용하기 전에 기기에서 지원되는지 확인하세요. 사용 가능한 경우 Low Light Boost는 camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES에 나열된 노출 모드 중 하나입니다. (다른 자동 노출 설정은 Low Light Boost에서 실행하는 미리보기 밝기와 호환되지 않으므로 Low Light Boost는 자체 자동 노출 설정입니다.)

따라서 Low Light Boost를 사용할 수 있는지 확인하려면 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 (next section)
} else {
  // Proceed without Low Light Boost
}

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 (next section)
} else {
  // Proceed without Low Light Boost
}

어두운 조명 증폭 사용 설정

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

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 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 set successfully
      result.get(CaptureResult.CONTROL_AE_MODE) ==
          CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY;
    }
  },
  mCameraHandler
);

어두운 조명 증폭 모니터링

Low Light Boost는 어두운 환경에서 미리보기 스트림을 밝게 하며 환경이 이미 일반 캡처에 충분할 정도로 밝은 경우에는 아무런 영향을 미치지 않습니다. CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE 필드를 확인하여 Low Light Boost가 현재 활성 상태인지 확인할 수 있습니다. 어두운 조명 부스트를 사용 설정했고 현재 활성화되어 있다면 필드는 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 is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost state is active
        // Show Moon Icon
      } else {
        // Low Light Boost state is inactive or AE mode is not set
        // to Low Light Boost
        // 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 is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost state is active
        // Show Moon Icon
      } else {
        // Low Light Boost state is inactive or AE mode is not set
        // to Low Light Boost
        // Hide Moon Icon
      }
    }
  },
  mCameraHandler
);