【发布时间】:2010-10-23 17:11:59
【问题描述】:
让我指定一点背景。
我目前使用开源程序来运行我的电视调谐器 (DScaler)。该软件的最终版本对 Direct3D 输出有一些支持,但问题是它滞后。我一直在阅读代码并阅读 DirectX 文档,试图找到一个优化代码的地方,以便 DirectX 的渲染与 DirectDraw 上一样流畅。因为该软件为关键的显示例程(锁定缓冲区、解锁、翻转等)内置了分析功能。我知道在使用 Direct3D 时遇到问题的地方是覆盖翻转部分。我得出的结论是,向 D3Device 演示太慢了,无法跟上电视调谐器的捕获速度,因此我会丢失帧并且无法以 29fps 显示它们。
由于我不太了解 DirectX,我的问题是:Direct3d 是否不是显示视频捕获的最佳选择,或者问题仅仅是代码可能不是最好的?我问是因为我仍然有兴趣尝试找到一种使其工作的方法,以便我可以在某些流上显示我的捕获(即:Xfire)。
谢谢。
【问题讨论】:
-
我想发布我修复了滞后问题的帖子。该程序最初使用 D3DPRESENT_INTERVAL_ONE 作为其 PresentInterval。一些线程建议在某些情况下 Present() 可以在等待 VSYNC 时长时间阻塞 CPU,人们建议尝试 INTERVAL_IMMEDIATE 代替。这解决了我的滞后问题。所以我认为 Present() 被阻塞并导致捕获缓冲区备份和丢帧。我仍然想知道解耦渲染线程是否可以解决问题并重新允许等待 VSYNC。
标签: video streaming direct3d capture directdraw