Objective c Cocoa IOSurface并通过Quicktime与后台任务拉帧同步

Objective c Cocoa IOSurface并通过Quicktime与后台任务拉帧同步,objective-c,cocoa,ipc,quicktime,Objective C,Cocoa,Ipc,Quicktime,我有一个关于可可豆表面的问题。 在进行了将OPENGL实时应用程序切换到64位所需的广泛研究之后,我选择了支持Quicktime回放的唯一路径,生成了一个后台线程,该线程通过安装帧就绪回调,然后使用QTVisualContextCopyImageForTime,并通过RPC将IOSurfaceRef传递给父进程 一切正常,但有一个主要问题。在我的32位应用程序中,我能够通过渲染一个帧,为下一个过程提取QT帧,然后等待下一个V-sync来序列化对GL子系统的任何调用。这产生了一个非常平滑和稳定的结

我有一个关于可可豆表面的问题。 在进行了将OPENGL实时应用程序切换到64位所需的广泛研究之后,我选择了支持Quicktime回放的唯一路径,生成了一个后台线程,该线程通过安装帧就绪回调,然后使用QTVisualContextCopyImageForTime,并通过RPC将IOSurfaceRef传递给父进程

一切正常,但有一个主要问题。在我的32位应用程序中,我能够通过渲染一个帧,为下一个过程提取QT帧,然后等待下一个V-sync来序列化对GL子系统的任何调用。这产生了一个非常平滑和稳定的结果

当我的应用程序绘制帧和后台进程从quicktime电影中提取iSurface时,使用iSurface技术使我无法同步。结果是,在随机的基础上,我体验了世爵的表演。事实上,在我的64位应用程序中,使用OPENGL驱动程序监视器会将CPU等待周期提高到10%,而在32位应用程序下,我的CPU等待图为0%

这里有人在现实世界的应用程序中使用了IOSurface,并面临类似这样的问题吗?我曾经考虑过进程间互斥锁/锁定,但考虑到我需要锁定/解锁大约120次x秒,我无法找到有效的解决方案,达尔文似乎没有Win32中可用的命名信号

有什么建议吗,或者我应该采取完全不同的方法来解决这个问题


谢谢

你解决过这个问题吗?你找到另一种方法了吗?我也在使用CVDisplaylink驱动一个OpenGL视图,在一个四边形上显示quicktime图像。我知道QTVisualContextRef在64个bt版本上不起作用,我自己也在寻找t IOSurfaces作为解决方案。是的,在生成的进程中使用IOSurfaces,但只要使用相同的IOSurfaces,就可以将其直接绑定到OGL纹理,并且在进程之间不进行任何握手的情况下进行更改。您有任何代码示例吗?我现在正在做的(一年多后我再次访问这个项目)是从IOSurface生成一个mach_端口。我将那个mach_端口整数发送到另一个进程,并尝试从那个mach端口创建一个IOSurfaceRef。如果我传递一个IOSurfaceID,我可以正确地实例化IOSurface,但是如果我传递一个mach\u port\t,我就不能。根据您提到的内容,您创建了一个IOSurfaceRef,只需将其绑定到纹理一次。你的IOSurfaceRef在背后更新。是吗?是的,只要将iSurface烘焙到纹理,就可以将ID传递到另一个进程并自动更新纹理,这就是apple在多gpu渲染示例中使用的。。。。