[英]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.