首页 > 解决方案 > Android Camera2 高速捕捉,焦点改变

问题描述

我想在高速相机捕捉中实现焦点控制(FOCUS_DISTANCE)。

在拍照过程中,我只能通过 onCaptureCompleted 回调来实现。之后,我可以在Result中通过LENS_STATE查看镜头是否移动完毕,但这只会得到镜头的当前状态,也就是说,当对焦范围很长时,这个值将始终为1(正在移动)。我想在任何地方看到镜头状态,但在回调函数中,我应该怎么做?

例如,连续高速拍摄100张照片时,我想检查拍摄照片时镜头是否在移动。我做的粗略方案是使用2个队列分别记录100个结果和100张照片,在拍摄结束时我可以得到每张照片对应的镜头状态。

谢谢你的帮助!

    private fun changeFocalWithCapture(focal: Float) {
        val captureRequest = session.device.createCaptureRequest(
                CameraDevice.TEMPLATE_PREVIEW).apply { addTarget(imageReader.surface) }
        println(captureRequest)
        captureRequest.set(CaptureRequest.CONTROL_AF_MODE, 0)
        captureRequest.set(CaptureRequest.LENS_FOCUS_DISTANCE, focal)

        session.capture(captureRequest.build(), object : CameraCaptureSession.CaptureCallback() {
            override fun onCaptureCompleted(
                    session: CameraCaptureSession,
                    request: CaptureRequest,
                    result: TotalCaptureResult) {

                val d1 = result[CaptureResult.LENS_FOCUS_DISTANCE]
                val lenState = result.get(CaptureResult.LENS_STATE)

                correctNum+=1
                val endTime = System.currentTimeMillis()

                Log.v("current Time",(endTime-beginTime).toString())
                Log.v("current num", correctNum.toString())
            }

        }, cameraHandler)
    }

标签: androidasynchronouscallbackandroid-camera2

解决方案


推荐阅读