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_MACRO 和 AF_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。
连续模式不需要触发器来聚焦,这就是为什么你会看到它们发生了一些事情。
我正在尝试检测相机何时对焦(或已停止尝试对焦),因此我在 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_MACRO 和 AF_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。
连续模式不需要触发器来聚焦,这就是为什么你会看到它们发生了一些事情。