gpt4 book ai didi

Android Camera2 getPreviewFrame

转载 作者:可可西里 更新时间:2023-11-01 19:05:50 24 4
gpt4 key购买 nike

我正在尝试让相机帧处于预览模式。我正在从 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 回调,因为发送到 CameraCaptureSession.setRepeatingRequest()CaptureRequest > 方法没有将 ImageReaderSurface 列为输出目标。

当您向相机发送请求时,您可以确定希望每次捕获的数据转到哪些输出 Surface(本质上是原始字节缓冲区)。因此,要让“预览帧”触发 onImageAvailable() 回调,然后发送到您的 onPreviewFrame() 方法,只需添加以下行:

mPreviewRequestBuilder.addTarget(mImageReader.getSurface());

例如,此行可以在将 SurfaceTextureSurface 添加到同一请求构建器的其他类似行之后。

请注意,这会将每个预览帧发送到您的函数,以及来自捕获按钮的“输出帧”。您可能需要 onImageAvailable() 回调中的一些代码来区分。

关于Android Camera2 getPreviewFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30195940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com