让我指定一点背景。DirectDraw比Direct3d更适合流式传输吗?
我目前使用开源程序来运行我的电视调谐器(DScaler)。该软件的最终版本对Direct3D输出有一些支持,但问题在于它滞后。我一直在浏览代码并通过DirectX文档阅读,试图找到一个地方来优化代码,以便渲染与DirectX一样平滑。由于软件内置了针对关键显示例程(锁定缓冲区,解锁,翻转等)的分析,因此我知道使用Direct3D时,出现问题的点位于叠加翻转部分。我得出的结论是,向D3Device演示速度太慢,无法跟上电视调谐器的捕捉速度,结果我失去了帧数,并且没有以29fps的速度显示它们。
因为我不太了解DirectX,所以我的问题是:Direct3d不是显示视频捕捉的最佳选择,还是问题只是代码可能不是最好的?我问,因为我仍然有兴趣试图找到一种方法使其工作,所以我可以显示我的捕获在一些流(即:Xfire)。
谢谢。
我想发布,我解决滞后问题的排序。该程序最初使用D3DPRESENT_INTERVAL_ONE作为其PresentInterval。有些线程建议在某些情况下,Present()会在等待VSYNC的同时长时间阻塞CPU,而人们建议尝试使用INTERVAL_IMMEDIATE。这固定了我的滞后问题。所以我认为Present()阻塞并导致捕获缓冲区备份和丢弃帧。我仍然想知道是否解耦渲染线程将解决问题,并重新允许等待VSYNC。 – Vix 2010-10-24 01:58:35