Gin*_*ane 5 avfoundation ios opengl-es-2.0 gpuimage
在 iOS6 中,我使用 OpenGL 在 AVFoundation 视频帧上进行一些渲染。我看过很多使用 CVPixelBufferLockBaseAddress 和 CVPixelBufferUnlockBaseAddress 的示例代码,但我不清楚何时执行锁定和解锁,或者为什么要这样做。当CPU修改内存时我应该锁定地址吗?或者我应该在 GPU 读取数据时锁定它?我应该什么时候解锁?为什么我想要解锁?我已经看到了Stack Overflow 的答案,但它并没有完全回答我的问题。
您应该在每次需要使用它时锁定它,并在用完并且不再需要它时解锁。这可以防止缓冲区被覆盖,从而使其处于不一致的状态。
一位固件专家曾经向我解释过这一点:一般来说,在处理视频输出时,你应该注意有很多带有指针的间接引用,这就像在说:“嘿,它是我的,我正在使用它,指向下一个框架在其他地方”。
我无法根据您的应用程序判断何时不再需要缓冲区,但这是您应该能够弄清楚的。如果您已将缓冲区数据复制到其他地方(例如创建新对象),则意味着您可以解锁它。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
3393 次 |
| 最近记录: |