Reputation: 3
I am trying to use CONTROL_AE_MODE_ON_AUTO_FLASH to capture a photo but it does not capture on certain devices at the first capture. The flash will work on subsequent captures after.
I tried multiple phones.
Ones that the flash worked immediately:
1. Pixel 6a
2. Pixel 7 Pro
3. Samsung Note 10
4. Pixel 7a
5. Samsung Galaxy A12
Phones that dont work but flash will work on subsequent captures:
1. Samsung Galaxy S10
2. Samsung Galaxy S21 5G
Code:
For preview
val previewRequestBuilder = device.createCaptureRequest(TEMPLATE_PREVIEW).apply {
addTarget(previewReader.surface)
set(
CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE
)
set(
CaptureRequest.CONTROL_AE_MODE,
CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH
)
set(
CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE,
CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_OFF
)
For precapture
val precaptureBuilder: CaptureRequest.Builder =
androidCameraDevice.createCaptureRequest(TEMPLATE_PREVIEW)
precaptureBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH)
precaptureBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF)
precaptureBuilder.set(
CaptureRequest.CONTROL_AF_TRIGGER,
CameraMetadata.CONTROL_AF_TRIGGER_IDLE
)
precaptureBuilder.set(
CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_IDLE
)
precaptureBuilder.addTarget(previewReader.surface)
cameraCaptureSession?.capture(
precaptureBuilder.build(),
captureCallback,
backgroundHandler
)
cameraCaptureSession?.setRepeatingRequest(
precaptureBuilder.build(),
captureCallback,
backgroundHandler
)
// now set precapture
// now set precapture
precaptureBuilder.set(
CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_START
)
cameraCaptureSession?.capture(
precaptureBuilder.build(),
captureCallback,
backgroundHandler
)
For capturing image
val imageRequestBuilder = androidCameraDevice
.createCaptureRequest(AndroidCameraDevice.TEMPLATE_STILL_CAPTURE)
imageRequestBuilder.apply {
addTarget(imageCaptureReader.surface)
set(
CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE
)
set(
CaptureRequest.CONTROL_AE_MODE,
CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH
)
}
Upvotes: 0
Views: 28