gpt4 book ai didi

android - 如何检测相机何时完成曝光初始化?

转载 作者:行者123 更新时间:2023-11-29 01:36:53 25 4
gpt4 key购买 nike

背景

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

问题

一旦曝光合适,我会尽快拍照。最好我可以注册一个回调,以便在曝光良好时调用。我该怎么做?

我尝试过的

  • 将相机的曝光补偿配置为最大值。 (没有帮助;预览开始后相机仍需要大约一秒钟才能正确曝光。)
  • 自动对焦 API,但由于相机不支持自动对焦,它们无法正常工作。
  • 硬编码延迟一秒以等待曝光。这是次优的,因为在室外日光下,不需要这么多时间。

最佳答案

旧相机 API

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

camera2 API

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

示例代码

首先开始捕捉:

// 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
}
}

};

关于android - 如何检测相机何时完成曝光初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27398570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com