โหมดการเปิดรับแสงอัตโนมัติที่เพิ่มแสงในสภาวะแสงน้อย

Android 15 เปิดตัวโหมดการรับแสงอัตโนมัติ (AE) ที่เพิ่มคุณภาพในโหมดแสงน้อย ซึ่งเป็นโหมดการรับแสงอัตโนมัติแบบใหม่ที่พร้อมใช้งานทั้งใน Camera 2 และส่วนขยายกล้องโหมดกลางคืน โหมด AE การเพิ่มแสงในสภาวะแสงน้อยจะปรับความสว่างของสตรีมตัวอย่างโดยอัตโนมัติในสภาวะแสงน้อย ซึ่งแตกต่างจากวิธีที่ส่วนขยายกล้องโหมดกลางคืนสร้างภาพนิ่ง เนื่องจากโหมดกลางคืนจะรวมการถ่ายหลายรูปเพื่อสร้างรูปภาพเดียวที่ปรับปรุงแล้ว แม้ว่าโหมดกลางคืนจะทำงานได้ดีในการสร้างภาพนิ่ง แต่โหมดนี้ไม่สามารถสร้างเฟรมอย่างต่อเนื่องได้ แต่โหมด AE เพิ่มคุณภาพในที่แสงน้อยทำได้ โหมด AE เพิ่มคุณภาพในโหมดแสงน้อยจึงเปิดใช้ความสามารถใหม่ๆ ของกล้อง เช่น ต่อไปนี้

  • แสดงตัวอย่างรูปภาพที่ปรับปรุงแล้วเพื่อให้ผู้ใช้จัดเฟรมรูปภาพในที่แสงน้อยได้ดียิ่งขึ้น
  • การสแกนคิวอาร์โค้ดในที่ที่มีแสงน้อย

หากเปิดใช้โหมด AE การเพิ่มแสงในสภาวะแสงน้อย โหมดนี้จะเปิดโดยอัตโนมัติเมื่อมีระดับแสงน้อย และจะปิดเมื่อมีแสงมากขึ้น

แอปสามารถบันทึกจากสตรีมตัวอย่างในสภาพแสงน้อยเพื่อบันทึกวิดีโอที่สว่างขึ้น

คุณใช้โหมด AE เพิ่มแสงในที่แสงน้อยได้ใน Camera2 หรือผ่านส่วนขยายกล้อง เอกสารนี้อธิบายวิธีใช้โหมด AE เพิ่มคุณภาพในที่แสงน้อยกับ Camera2 นอกจากนี้ คุณยังใช้โหมด AE เพิ่มแสงน้อยร่วมกับส่วนขยายกล้องโหมดกลางคืนได้หากอุปกรณ์รองรับ

ตรวจสอบความพร้อมให้บริการ

ก่อนใช้โหมด AE เพิ่มแสงน้อย ให้ตรวจสอบว่าอุปกรณ์รองรับโหมดนี้ โหมด AE เพิ่มแสงน้อย (หากมี) จะเป็นหนึ่งในโหมดการรับแสงที่แสดงใน camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES (การเพิ่มคุณภาพในโหมดแสงน้อยเป็นการตั้งค่าการเปิดรับแสงอัตโนมัติของตัวมันเอง เนื่องจากการตั้งค่าการเปิดรับแสงอัตโนมัติอื่นๆ ใช้ไม่ได้กับการปรับให้ภาพตัวอย่างสว่างขึ้นซึ่งโหมด 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
}

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
}

เปิดใช้โหมด AE บูสต์สำหรับแสงน้อย

หากต้องการเปิดใช้โหมด AE เพิ่มแสงในที่แสงน้อยในเซสชัน Camera2 ให้ตั้งค่า CaptureRequest.CONTROL_AE_MODE เป็น ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY หลังจากดำเนินการดังกล่าวแล้ว คุณจะต้องตรวจสอบว่าโหมด AE เพิ่มแสงในโหมดแสงน้อยเปิดอยู่ โดยทำได้โดยเลือกช่อง CaptureResult.CONTROL_AE_MODE คุณต้องตรวจสอบเนื่องจากฟีเจอร์เพิ่มคุณภาพแสงน้อยใช้ไม่ได้กับการกำหนดค่ากล้องบางรายการ ตัวอย่างเช่น การบันทึกความเร็วสูงไม่รองรับโหมด AE การเพิ่มแสงในสภาวะแสงน้อย เนื่องจากข้อจำกัดด้าน FPS หากไม่ได้เปิดโหมด 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
)

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

โหมด AE เพิ่มแสงในสภาวะแสงน้อยของจอภาพ

โหมด AE เพิ่มแสงต่ำจะเพิ่มความสว่างของสตรีมแสดงตัวอย่างในสภาพแสงน้อย และจะไม่มีผลหากสภาพแวดล้อมสว่างเพียงพอสำหรับการจับภาพตามปกติอยู่แล้ว คุณสามารถตรวจสอบว่าโหมด AE เพิ่มประสิทธิภาพในที่แสงน้อยทำงานอยู่หรือไม่โดยดูที่ช่อง CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE หากคุณเปิดโหมด 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
);