0

我正在使用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 工作。(有些图片我会省略,只有在没有其他类似线程的情况下才会创建一个新线程。)

为了获取图像,我使用带有setRepeatingRequest函数的CameraCaptureSession 。而且我在处理之前对每个图像缓冲区进行了克隆。所以,我的问题是为什么会发生错误以及如何克服它?

4

1 回答 1

2

完成读取每个缓冲区后是否调用Image.close() ?

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

如果您只是删除对 Image 的所有引用,它最终会被垃圾收集并返回到队列中,但这可能需要比您预期的更长的时间,因此手动关闭它更可靠。

于 2020-04-09T17:55:23.630 回答