user25778714
user25778714

Reputation: 3

CONTROL_AE_MODE_ON_AUTO_FLASH does not capture flash during initial capture but works on every subsequent capture

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

Answers (0)

Related Questions