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