如何检测相机何时完成曝光?

问题描述 投票:2回答:1

Background

当我开始相机预览时,特别是在室内时,使用takePicture拍摄的预览帧和照片最初是黑暗的。在下一秒钟,相机的曝光将自动调整,直到曝光最佳。当我在手机上打开相机应用程序时,也会发生此行为。

Problem

一旦曝光正确,我正试图尽快拍照。优选地,我可以在曝光良好时注册要调用的回调。我怎样才能做到这一点?

What I've tried

  • 将相机的曝光补偿配置为最大值。 (没有帮助;在相机预览开始后,它仍然需要大约一秒才能正常曝光。)
  • 自动对焦API,但由于相机不支持自动对焦,因此无效。
  • 硬编码延迟一秒钟等待曝光。这不是最理想的,因为在户外日光下,不需要这么多时间。
android camera android-camera
1个回答
1
投票

Legacy camera API

不幸的是,带有传统相机驱动程序的设备似乎不支持此功能。所以最好的选择似乎是开始预览,然后等待一秒钟。

camera2 API

使用camera2 API,您可以通过检查CaptureResult.CONTROL_AE_STATE的值来检查自动曝光状态。

Example code

首先开始捕捉:

// Auto-exposure only seems to start after the first picture has been taken
// And on the Pixel 3 XL, it finishes fastest when you make a lot of captures
captureSession.setRepeatingRequest(request, captureCallback, null);

并使用此样板代码来监控自动曝光:

private CaptureResult firstResult;

private final CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {

    @Override
    public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
        super.onCaptureCompleted(session, request, result);

        if (firstResult == null)
            firstResult = result;

        boolean aeAcquired;
        Integer aeState = lastResult.get(CaptureResult.CONTROL_AE_STATE);
        if (aeState == null) {
            // This camera doesn't support monitoring of auto-exposure, so we'll just have to wait a bit and then assume it's adjusted.
            long nanosSinceFirstResult = result.get(CaptureResult.SENSOR_TIMESTAMP) - firstResult.get(CaptureResult.SENSOR_TIMESTAMP);
            long millisSinceFirstResult = nanosSinceFirstResult / 1000 / 1000;
            aeAcquired = millisSinceFirstResult >= 750;
        } else {
            aeAcquired = aeState == CameraMetadata.CONTROL_AE_STATE_CONVERGED || aeState == CameraMetadata.CONTROL_AE_STATE_FLASH_REQUIRED;
        }

        if (aeAcquired) {
            // Auto-exposure has finished
        }   
    }

};
© www.soinside.com 2019 - 2024. All rights reserved.