7

所以,我设法按照我想要的方式用旧相机创建了我想要的功能。

使用 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;
            }
}

但我找不到某种状态告诉我我们已经集中注意力。有人知道如何使用 Camera2 API 做到这一点吗?

4

2 回答 2

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);
    }
};

它工作得很好:)

于 2015-04-30T12:33:48.753 回答
3

你基本上已经掌握了。您可以检查的状态列表及其转换可以在这里找到。

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

于 2015-04-29T17:02:15.493 回答