gpt4 book ai didi

android - 在不滞后屏幕预览的情况下获取android camera2预览帧

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:50 25 4
gpt4 key购买 nike

在原始(现已弃用)的相机 API 中,我们曾经能够在 Camera.PreviewCallback 中获取预览帧并能够对其进行处理(可能需要很长时间)并释放缓冲区以便能够接收另一帧,没有滞后于屏幕预览,一些代码如下:

public void onPreviewFrame(final byte[] data, Camera camera) {
new AsyncTask<Void, Void, Void>() {

@Override
protected Void doInBackground(Void... params) {
(... do some slow processing ...)
}

@Override
protected void onPostExecute(Void aVoid) {
mCamera.addCallbackBuffer(data); // free the buffer to be able
// to process another frame
}
}.execute();
}

只有在有另一个缓冲区可用于接收新帧时,API 才会使用新帧进行回调,而不会滞后于屏幕预览。

我正尝试在新的 Camera2 API 上复制相同的行为,但我无法找到一种方法来做到这一点而不会使屏幕预览滞后。如果我向预览请求添加第二个目标(与屏幕分辨率相同,YUV_420_888):

mPreviewRequestBuilder.addTarget(surface);
mPreviewRequestBuilder.addTarget(previewImageReader.getSurface());
mCameraDevice.createCaptureSession(
Arrays.asList(surface, previewImageReader.getSurface()), ...

屏幕预览会滞后,即使我在获取图像后立即关闭也是如此:

@Override
public void onImageAvailable(ImageReader reader) {
reader.acquireNextImage().close();
}

使用 Camera2 模拟原始相机 API 行为的正确方法是什么(即只要有空闲就拥有一个新缓冲区并且不会减慢屏幕预览速度)?

更新:如果有人想知道其余代码的样子,它只是标准 android-camera2Basic 示例的修改版本,here's what I've changed .

最佳答案

如果还有人感兴趣。

创建一个 SurfaceTextureListener 并从 onSurfaceTextureUpdated 方法调用您的异步函数。在使用 BarcodeDetection API 和 Camera 2 API 检查条形码帧时,我成功地使用了它。

关于android - 在不滞后屏幕预览的情况下获取android camera2预览帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39444314/

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