Tăng cường ánh sáng yếu

Android 15 ra mắt Low Light Boost (Tăng cường ánh sáng yếu), một chế độ phơi sáng tự động mới dành cho cả Camera 2tiện ích máy ảnh ở chế độ ban đêm. Tính năng Tăng cường ánh sáng yếu tự động điều chỉnh độ sáng của luồng Xem trước trong điều kiện ánh sáng yếu. Điều này khác với cách tiện ích máy ảnh chế độ ban đêm tạo ra hình ảnh tĩnh, vì chế độ ban đêm kết hợp một loạt ảnh để tạo ra một hình ảnh nâng cao duy nhất. Mặc dù chế độ ban đêm hoạt động rất hiệu quả để tạo hình ảnh tĩnh, nhưng không thể tạo luồng khung hình liên tục, nhưng tính năng Tăng cường ánh sáng yếu có thể thực hiện việc này. Do đó, tính năng Tăng cường ánh sáng yếu mang đến các tính năng mới của máy ảnh, chẳng hạn như:

  • Cung cấp bản xem trước hình ảnh nâng cao để người dùng có thể lấy khung hình cho hình ảnh thiếu sáng.
  • Đang quét mã QR trong điều kiện ánh sáng yếu.

Nếu bạn bật tính năng Tăng cường ánh sáng yếu, thì tính năng này sẽ tự động bật khi trong môi trường ánh sáng yếu và tắt khi có nhiều ánh sáng hơn.

Ứng dụng có thể ghi tắt luồng Xem trước trong điều kiện ánh sáng yếu để lưu video được tăng độ sáng.

Bạn có thể sử dụng tính năng Tăng cường ánh sáng yếu trong Camera2 hoặc thông qua tiện ích máy ảnh. Tài liệu này trình bày cách sử dụng tính năng Tăng cường ánh sáng yếu bằng Camera2. Bạn cũng có thể sử dụng tính năng Tăng cường ánh sáng yếu cùng với tiện ích máy ảnh ở Chế độ ban đêm nếu thiết bị hỗ trợ tính năng này.

Kiểm tra phạm vi cung cấp

Trước khi sử dụng tính năng Tăng cường ánh sáng yếu, hãy kiểm tra xem thiết bị có hỗ trợ tính năng này hay không. Nếu có sẵn, thì tính năng Tăng cường ánh sáng yếu là một trong những chế độ phơi sáng được liệt kê trong camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (Tăng cường ánh sáng yếu là chế độ cài đặt tự động phơi sáng riêng, vì các chế độ cài đặt phơi sáng tự động khác không tương thích với cách làm sáng bản xem trước do tính năng Tăng cường ánh sáng yếu thực hiện).

Vì vậy, để kiểm tra xem có tính năng Tăng cường ánh sáng yếu hay không, hãy gọi CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) và kiểm tra xem các chế độ được trả về có bao gồm ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY hay không:

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
}

Bật tính năng Tăng cường ánh sáng yếu

Để bật tính năng Tăng cường ánh sáng yếu trong một phiên Camera2, hãy đặt CaptureRequest.CONTROL_AE_MODE thành ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Sau khi thực hiện việc này, bạn cần xác nhận rằng tính năng Tăng cường ánh sáng yếu đã bật; bạn có thể thực hiện việc này bằng cách chọn trường CaptureResult.CONTROL_AE_MODE. Bạn cần kiểm tra vì tính năng Tăng cường ánh sáng yếu không tương thích với một số cấu hình máy ảnh. Ví dụ: tính năng quay video tốc độ cao không hỗ trợ tính năng Tăng cường ánh sáng yếu do cân nhắc về FPS. Nếu tính năng Tăng cường ánh sáng yếu chưa bật, bạn có thể phải thay đổi cấu hình máy ảnh rồi thử lại.

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

Theo dõi tính năng Tăng cường ánh sáng yếu

Tính năng Tăng cường ánh sáng yếu giúp tăng độ sáng cho luồng xem trước trong điều kiện ánh sáng yếu và không có bất kỳ ảnh hưởng nào nếu môi trường đã đủ sáng để chụp ảnh thông thường. Bạn có thể xác nhận xem tính năng Tăng cường ánh sáng yếu hiện có đang hoạt động hay không bằng cách kiểm tra trường CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Nếu bạn đã bật tính năng Tăng cường ánh sáng yếu tính năng này đang hoạt động, thì trường này sẽ được đặt thành CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Sau đó, bạn có thể hiển thị biểu tượng mặt trăng hoặc một chỉ báo khác cho thấy bản xem trước đang được làm sáng.

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