gpt4 book ai didi

android - setPreviewCallback() 和 setPreviewCallbackWithBuffer()

转载 作者:太空狗 更新时间:2023-10-29 16:30:06 28 4
gpt4 key购买 nike

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

那么对于这个特定任务,setPreviewCallback()setPreviewCallbackWithBuffer() 有何不同?

最佳答案

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

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

小心不要落入的陷阱extra locks :如果您提前释放缓冲区,您将承受 Binder 复制您实际丢弃的像素的开销。

关于android - setPreviewCallback() 和 setPreviewCallbackWithBuffer(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41677543/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com