Chế độ phơi sáng tự động tăng cường ánh sáng yếu

Android 15 ra mắt Chế độ tự động phơi sáng (AE) tăng cường ánh sáng yếu, một chế độ tự động phơi sáng mới có sẵn cho cả Camera 2tiện ích máy ảnh chế độ ban đêm. Chế độ AE 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 ảnh tĩnh, vì chế độ ban đêm kết hợp một loạt ảnh để tạo một ảnh duy nhất, được nâng cao. Mặc dù chế độ ban đêm hoạt động rất tốt để tạo ảnh tĩnh, nhưng không thể tạo luồng khung hình liên tục. Tuy nhiên, Chế độ AE tăng cường ánh sáng yếu có thể làm được điều này. Do đó, Chế độ AE tăng cường ánh sáng yếu sẽ hỗ trợ 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ể căn chỉnh khung hình ảnh chụp trong điều kiện ánh sáng yếu tốt hơn.
  • Quét mã QR trong điều kiện ánh sáng yếu.

Nếu bạn bật Chế độ AE tăng cường ánh sáng yếu, chế độ này sẽ tự động bật khi có mức ánh sáng yếu và tắt khi có nhiều ánh sáng hơn.

Các ứng dụng có thể quay video từ luồng Xem trước trong điều kiện ánh sáng yếu để lưu video đã làm sáng.

Bạn có thể sử dụng Chế độ AE 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 Chế độ AE tăng cường ánh sáng yếu với Camera2. Bạn cũng có thể sử dụng Chế độ AE tăng cường ánh sáng yếu với tiện ích máy ảnh Chế độ ban đêm nếu thiết bị hỗ trợ chế độ này.

Kiểm tra tình trạng còn hàng

Trước khi sử dụng Chế độ AE tăng cường ánh sáng yếu, hãy kiểm tra để đảm bảo thiết bị hỗ trợ chế độ này. Nếu có, Chế độ AE tăng cường ánh sáng yếu là một trong các chế độ phơi sáng được liệt kê trong camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (Chế độ Tăng cường ánh sáng yếu là chế độ cài đặt độ phơi sáng tự độ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 tính năng làm sáng bản xem trước do Chế độ AE Tăng cường ánh sáng yếu thực hiện.)

Vì vậy, để kiểm tra xem có Chế độ AE 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 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
}

Bật chế độ AE tăng cường ánh sáng yếu

Để bật Chế độ AE tăng cường ánh sáng yếu trong 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 chế độ AE tăng cường ánh sáng yếu đã được bật; bạn có thể thực hiện việc này bằng cách đánh dấu vào 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 tất cả cấu hình máy ảnh. Ví dụ: tính năng quay video tốc độ cao không hỗ trợ Chế độ AE tăng cường ánh sáng yếu do cần cân nhắc đến FPS. Nếu không bật Chế độ AE tăng cường ánh sáng yếu, bạn có thể cần 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 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
);

Chế độ AE tăng cường ánh sáng yếu của màn hình

Chế độ AE tăng cường ánh sáng yếu làm sáng luồng xem trước trong điều kiện ánh sáng yếu và không có hiệu lực nếu môi trường đã đủ sáng để chụp ảnh bình thường. Bạn có thể xác nhận xem Chế độ AE tăng cường ánh sáng yếu 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 Chế độ AE tăng cường ánh sáng yếu chế độ 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 số chỉ báo khác cho biết 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 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
);