当前位置:  开发笔记 > 编程语言 > 正文

setPreviewCallback()和setPreviewCallbackWithBuffer()

如何解决《setPreviewCallback()和setPreviewCallbackWithBuffer()》经验,为你挑选了1个好方法。

我有一个代码,可以从前置摄像头访问帧流,并将它们推送到后台线程处理.现在我根本没有使用任何缓冲区,一切正常(在我的手机上).

那么问题setPreviewCallback()setPreviewCallbackWithBuffer()这个特定的任务有何不同?



1> Alex Cohn..:

后台处理的差异可能很大.相机缓冲区可能很大,并且setPreviewCallback()会导致每帧的单独分配(希望每秒30个).这可能会对JVM造成巨大压力,因为缓冲区不会立即释放(并且GC不能依赖于年轻代优化).

setPreviewCallbackWithBuffer()重用预先分配的缓冲区,并涉及GC.这也提供了一种简单的机制,可以为后台处理器提供足够的帧.例如,如果您只预先分配2个帧缓冲区,那么在您发送两个帧进行处理之后,将不会捕获第三帧(减少用于复制像素的CPU使用率),直到您调用addCallbackBuffer()释放缓冲区为止.

注意不要陷入额外锁定的陷阱:如果你提前释放缓冲区,你会遭受Binder复制你实际丢弃的像素的开销.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有