我正在尝试使相机框架处于预览模式。我正在从github https://github.com/googlesamples/android-Camera2Basic运行示例项目
我遇到的问题是使框架处于预览模式。
这是代码:
private CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() {
private void process(CaptureResult result) {
switch (mState) {
case STATE_PREVIEW: {
//HERE, HOW CAN I RETRIEVE THE CURRENT FRAME?
break;
}
case STATE_WAITING_LOCK: {
...
break;
}
case STATE_WAITING_PRECAPTURE: {
...
break;
}
case STATE_WAITING_NON_PRECAPTURE: {
...
break;
}
}
}
我试图获取帧的另一件事是设置mImageReader.setOnImageAvailableListener。我期望能够获得onImageAvailable回调的帧,但是从不调用onImageAvailable。onPreviewFrame是我自己的方法,我需要将当前帧传递给它。
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), ImageFormat.JPEG, /*maxImages*/2);
mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, mBackgroundHandler);
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
mTextureView.onPreviewFrame(reader.acquireNextImage().getPlanes([0].getBuffer().array());
}
};
我做错了什么?谢谢。
该OnImageAvailableListener.onImageAvailable
回调永远不会被调用时的预览框可用,因为CaptureRequest
它被送到了CameraCaptureSession.setRepeatingRequest()
方法并没有列出ImageReader
的Surface
为输出目标。
Surface
当您将请求发送到摄像机时,您可以确定每个捕获数据要到达的输出(本质上是原始字节缓冲区)。因此,要获取“预览框架”以触发onImageAvailable()
回调,然后将其发送到您的onPreviewFrame()
方法,只需添加以下行:
mPreviewRequestBuilder.addTarget(mImageReader.getSurface());
这条线可以走了,例如,这增加了其他类似的行之后SurfaceTexture
的Surface
以相同的请求建设者。
请注意,这会将每个预览帧以及“捕获”按钮的“输出帧”发送给您的功能。您可能希望onImageAvailable()
区分回调中的某些代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句