Android Camera2:CONTROL_AF_STATE 对于 CONTROL_AF_MODE_MACRO 始终为 0

Android Camera2: CONTROL_AF_STATE always 0 for CONTROL_AF_MODE_MACRO

我正在尝试检测相机何时对焦(或已停止尝试对焦),因此我在 onCaptureCompleted 回调方法中调用 result.get(CaptureResult.CONTROL_AF_STATE)

它适用于模式 AF_MODE_CONTINUOUS_PICTURE,摄像头报告 CONTROL_AF_STATE 1 或 2(CONTROL_AF_STATE_PASSIVE_SCAN 或 CONTROL_AF_STATE _PASSIVE_LOCKED),这很好。

然而,当相机切换到 AF_MODE_MACRO 时,无论发生什么情况,报告的 CONTROL_AF_STATE 始终为 0(INNACTIVE)。我试图参考 1 但可能我没有理解正确。

更多信息:在 AF_MODE_MACROAF_MODE_CONTINUOUS_PICTURE 之间切换模式时,我总是开始新的捕获会话,例如这个:

private void configCaptureSession(boolean macroModeNew) {
this.macroMode = macroModeNew;
try {
  // Wanna macro?
  if (macroMode) {
    LOGGER.d( "MACRO ON","");
    previewRequestBuilder.set(
            CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_MACRO);
    }

  else {
    // Continuous AF
    LOGGER.d( "MACRO OFF","");
    previewRequestBuilder.set(
            CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);

  }

  // Finally, we start displaying the camera preview.
  previewRequest = previewRequestBuilder.build();
  LOGGER.d( "SETTING NEW SESSION","");

  captureSession.setRepeatingRequest(
      previewRequest, captureCallback, backgroundHandler);

} catch (final CameraAccessException e) {
  LOGGER.e(e, "Exception!");
}

}

捕获回调:

 private final CameraCaptureSession.CaptureCallback captureCallback =
  new CameraCaptureSession.CaptureCallback() {
    @Override
    public void onCaptureProgressed(
        final CameraCaptureSession session,
        final CaptureRequest request,
        final CaptureResult partialResult) {}

    @Override
    public void onCaptureCompleted(
        final CameraCaptureSession session,
        final CaptureRequest request,
        final TotalCaptureResult result) {

        afState = result.get(CaptureResult.CONTROL_AF_STATE);

        LOGGER.i("FOKKUS-MODE:"+result.get(CaptureResult.CONTROL_AF_MODE));
        LOGGER.i("FOKKUS:"+result.get(CaptureResult.CONTROL_AF_STATE));

    }

  };

您的设备列表是否支持 https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#CONTROL_AF_AVAILABLE_MODES 中的 AF_MODE_MACRO?

如果不是,那么这是预料之中的,因为您正在尝试使用不受支持的对焦模式。

如果支持,下一个问题是我没有看到您在任何地方发出 AF trigger 命令。您是否在此处查看了 AF_STATE 的状态转换表: https://developer.android.com/reference/android/hardware/camera2/CaptureResult.html#CONTROL_AF_STATE ?

对于AF_AUTO和AF_MACRO,你需要在对焦时触发自动对焦,然后等待AF_STATE_FOCUSED_LOCKED或NOT_FOCUSED_LOCKED。

连续模式不需要触发器来聚焦,这就是为什么你会看到它们发生了一些事情。