我什么时候应该调用 CVPixelBufferLockBaseAddress 和 CVPixelBufferUnlockBaseAddress?

2024-04-21

在 iOS6 中,我使用 OpenGL 在 AVFoundation 视频帧上进行一些渲染。我看过很多使用 CVPixelBufferLockBaseAddress 和 CVPixelBufferUnlockBaseAddress 的示例代码,但我不清楚何时执行锁定和解锁,或者为什么要这样做。当CPU修改内存时我应该锁定地址吗?或者我应该在 GPU 读取数据时锁定它?我应该什么时候解锁?为什么我想要解锁?我见过这个堆栈溢出答案 https://stackoverflow.com/questions/6468535/cvpixelbufferlockbaseaddress-why-capture-still-image-using-avfoundation但它并没有完全回答我的问题。


您应该在每次需要使用它时锁定它,并在用完并且不再需要它时解锁。这可以防止缓冲区被覆盖,从而使其处于不一致的状态。

一位固件专家曾经向我解释过这一点:一般来说,在处理视频输出时,你应该注意有很多带有指针的间接引用,这就像在说:“嘿,它是我的,我正在使用它,指向下一个框架在其他地方”。

我无法根据您的应用程序判断何时不再需要缓冲区,但这是您应该能够弄清楚的。如果您已将缓冲区数据复制到其他地方(例如创建新对象),则意味着您可以解锁它。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候应该调用 CVPixelBufferLockBaseAddress 和 CVPixelBufferUnlockBaseAddress? 的相关文章

随机推荐