我正在使用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/