简体   繁体   English

如何使用Camera2 API获取框架

[英]How to get the frame using camera2 api

I am using camera2 api to get the camera frames and this is the code I have written 我正在使用camera2 api获取相机框架,这是我编写的代码

private void startPreview() {
    SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture();
    surfaceTexture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    Surface previewSurface = new Surface(surfaceTexture);

    try {
        mCaptureRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        mCaptureRequestBuilder.addTarget(previewSurface);

        mCameraDevice.createCaptureSession(Arrays.asList(previewSurface),
                new CameraCaptureSession.StateCallback() {
                    @Override
                    public void onConfigured(@NonNull CameraCaptureSession session) {
                        try {
                            session.setRepeatingRequest(mCaptureRequestBuilder.build(),
                                    new CameraCaptureSession.CaptureCallback() {

                                        @Override
                                        public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
                                            super.onCaptureCompleted(session, request, result);
                                            Log.i("State preview", "process: frame");

                                        }
                                    }, mBackgoundThreadHandler);
                        } catch (CameraAccessException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onConfigureFailed(@NonNull CameraCaptureSession session) {
                        Toast.makeText(getApplicationContext(),
                                "Unable to setup camera preview", Toast.LENGTH_SHORT).show();
                    }
                }, null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }

}

I am able to see the frame log through this line: 我可以通过以下行看到框架日志:

session.setRepeatingRequest(mCaptureRequestBuilder.build(),
                                    new CameraCaptureSession.CaptureCallback() {

                                        @Override
                                        public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
                                            super.onCaptureCompleted(session, request, result);
                                            Log.i("State preview", "process: frame");

                                        }
                                    }, mBackgoundThreadHandler);

So from this function how do I get the frame. 因此,如何通过此功能获取框架。 I am totally new to camera2 api so could someone please help me. 我是Camera2 API的新手,所以有人可以帮助我。

Your code just currently drawing camera preview to your TextureView; 您的代码当前仅将相机预览绘制到TextureView上; if you want a second output that your application code can read, you need to create a second output and give it to camera. 如果您希望应用程序代码可以读取第二个输出,则需要创建第二个输出并将其提供给相机。

Depending on what kind of processing you want to do, you want either a ImageReader for Java-level access, a SurfaceTexture (for reading in OpenGL), or a Allocation (for RenderScript). 根据要执行的处理类型,您需要使用ImageReader进行Java级访问,使用SurfaceTexture (用于OpenGL读取)或分配 (用于RenderScript)。 From each of these, you can get a Surface to include in the session creation and in creating the capture request. 从以上每一个中,您都可以将Surface包含在会话创建和创建捕获请求中。

Each of them has a callback that fires when new frames become available. 它们每个都有一个回调,当有新框架可用时将触发该回调。 onCaptureCompleted only provides the capture metadata. onCaptureCompleted仅提供捕获元数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM