Android Camera2 API - 在我们有焦点时检测

Hia*_*iam 5 android android-camera camera2

所以,我设法用我想要的方式用旧相机创建我想要的功能.

用mCamera.autoFocus(autoFocusCallback); 我检测到何时有焦点并在预览模式下运行所需的代码.

现在我很难掌握如何在camera2 API中做同样的事情.我的第一个想法是我会使用

        private void process(CaptureResult result) {
        switch (mState) {
            case STATE_PREVIEW: {
                // We have nothing to do when the camera preview is working normally.
                int afState = result.get(CaptureResult.CONTROL_AF_STATE);
                //if (CaptureResult.CONTROL_AF_STATE == afState) {
                    Log.d("SOME KIND OF FOCUS", "WE HAVE");
                //}

                break;
            }
}
Run Code Online (Sandbox Code Playgroud)

但我没有找到某种状态告诉我,我们已经得到了关注.有人知道如何使用Camera2 API完成此操作吗?

Hia*_*iam 5

对于那些感兴趣的人,我最终混合了这个:

private CameraCaptureSession.CaptureCallback mCaptureCallback
        = new CameraCaptureSession.CaptureCallback() {

    private void process(CaptureResult result) {
        switch (mState) {
            case STATE_PREVIEW: {

                int afState = result.get(CaptureResult.CONTROL_AF_STATE);
                if (CaptureResult.CONTROL_AF_TRIGGER_START == afState) {
                    if (areWeFocused) {
                        //Run specific task here
                    }
                }
                if (CaptureResult.CONTROL_AF_STATE_PASSIVE_FOCUSED == afState) {
                    areWeFocused = true;
                } else {
                    areWeFocused = false;
                }

                break;
            }
        }
    }

   @Override
    public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request,
                                    CaptureResult partialResult) {
        process(partialResult);
    }

    @Override
    public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                   TotalCaptureResult result) {
        process(result);
    }
};
Run Code Online (Sandbox Code Playgroud)

它工作得很好:)


rcs*_*ner 3

你基本上已经明白了。您可以在此处找到您可以检查的状态列表及其转换。

这取决于CONTROL_AF_MODE您使用的是什么,但通常您会检查FOCUSED_LOCKEDPASSIVE_FOCUSED,尽管您可能需要有情况NOT_FOCUSED_LOCKEDPASSIVE_UNFOCUSED以防相机无法聚焦在场景上。