放弃BufferQueue后该怎么办?

用户名

我正在使用纹理视图在我的android应用中显示相机的预览。但是,我注意到的是,每当我的应用暂停时,都会出现此错误:

03-18 18:23:44.315: W/BufferQueue(19582): [unnamed-19582-20] cancelBuffer: BufferQueue has been abandoned!

有人可以告诉我这是怎么回事吗?当我的应用程序暂停时,我要做的就是从onSurfaceTextureDestroyed()

 public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
    mCamera.setPreviewCallback(null);
    mCamera.stopPreview();
    mCamera.release();
    return true;
}
淡淡的

实际上,您正在执行的操作是TextureView文档中编写的内容,因此它应该可以工作。

该错误消息表示BufferQueue(摄像机)的“生产者”侧已抓取一个缓冲区,现在正尝试(通过cancelBuffer()取消抓取但是,“消费者”这一面SurfaceTexture已经消失了。由于“消费者”一方拥有该队列,因此将BufferQueue其视为已放弃,并且无法进行进一步的操作。

听起来这只是一个时间问题-生产者SurfaceTexture在销毁销毁后试图进行操作这没有意义,因为您要关闭生产者onSurfaceTextureDestroyed(),并且除非并且直到该回调返回,否则ST不会被释放true(在回调方法的开始和结束处添加日志消息可能很有趣,并查看“遗弃”的投诉是在它们之前还是之后发生的。logcat -v threadtime用于查看线程ID。)

所以我不太确定为什么会这样。好消息是,它不会对您的应用程序产生不利影响-生产者将正确确定消费者已经离开,并且会抱怨但不会崩溃。因此,它很嘈杂,但不令人发笑。

出于好奇,如果在Grafika中运行“实时摄像机(TextureView)”,您是否会从设备中看到类似的消息该活动直接来自TextureView文档,并且在我的设备上运行它时,我看不到任何抱怨。

(有关SurfaceTexture和BufferQueue的其他信息,可以在这里找到。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章