android - 无法从Android相机获取输出缓冲区

标签 android opencv android-camera2 android-threading

我正在使用Android Camera2 API,并在使用Android 6.0(API 23)的智能手机上从相机中获取了一组照片后得到了此照片:

2020-04-09 20:36:58.556 260-9342/? E/Camera3-Stream: getBuffer: wait for output buffer return timed out after 3000ms
2020-04-09 20:36:58.556 260-9342/? E/Camera3-Device: RequestThread: Can't get output buffer, skipping request: Connection timed out

在此错误之后,相机将阻止,图像停止发送,我需要重新打开CameraDevice以获取一组新图像。

我正在使用BackgroundHandler处理在BackgroundThread中获取相机图像。然后,我创建其他BackgroundThread以使用OpenCV库函数处理每个图像。但是,我同时只有一个工作附加的BackgroundThread。 (有些图像仅在没有其他类似线程的情况下才会保留,并创建一个新线程。)

为了获取图像,我将CameraCaptureSession与 setRepeatingRequest 函数一起使用。而且我在处理每个图像缓冲区之前都要对其进行克隆。因此,我的问题是为什么会发生错误以及如何解决错误?

最佳答案

读取完每个缓冲区后,您要调用Image.close()吗?

ImageReader中只有固定数量的缓冲区,如果不将Image返回到队列(通过关闭它们),最终将使捕获管道停止。

如果仅丢弃对Image的所有引用,则最终将对其进行垃圾回收并将其返回到队列,但这可能比您期望的时间更长,因此手动关闭它会更可靠。

关于android - 无法从Android相机获取输出缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61123298/

相关文章:

java - 三星 S8+ 中的自动对焦

android - android中的shell脚本给出[: not found

android - 如何在 Google 识别器 Intent (语音识别)Android 中增加语音聆听时间

c - OpenCV(C) : calculating moments FROM contour

python - 同时运行两个视频编写器会产生失真的输出文件

android - 将 CameraKit 与 Kotlin 一起使用时应用程序崩溃

Android App Inventor : Is it worth learning (yet)?

java - putExtra() 不适用于按钮 :onClick

visual-studio-2010 - opencv 2.1崩溃

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