AquireNextFrame() 失败并出现不同的错误

Posted

技术标签:

【中文标题】AquireNextFrame() 失败并出现不同的错误【英文标题】:AquireNextFrame() fails with different errors 【发布时间】:2021-05-03 05:07:26 【问题描述】:

我有一些工作代码循环捕获当前桌面并使用DirectX Screen Capture - Desktop Duplication API - limited frame rate of AcquireNextFrame/https://github.com/microsoft/Windows-classic-samples/tree/master/Samples/DXGIDesktopDuplication中描述的代码

这很好用,除了在一台机器上(不幸的是,我没有物理访问权限进行详细调试,只能从用户那里获取报告)。在这台机器上,当我使用超时值为 500 调用 AcquireNextFrame() 时,它反复失败,错误代码为 0x887A0027 / DXGI_ERROR_WAIT_TIMEOUT。明确一点:调用不会只失败几次,它总是失败,所以 AcquireNextFrame() 永远不会返回结果,无论多久一次

当我将超时值增加到 850 时,它会失败并出现错误 0x887A0026 / DXGI_ERROR_ACCESS_LOST。

那么...知道什么会导致这些错误以及如何防止它发生吗?

谢谢!

【问题讨论】:

【参考方案1】:

行为正常。

Windows 通常不会以 60 Hz 的频率呈现桌面,这会浪费资源和电力。 DXGI_ERROR_WAIT_TIMEOUT 仅表示计算机显示与以前相同的图像。 AcquireNextFrame 返回 S_OK 并在桌面上可见的某些窗口更新某些内容时为您提供另一个框架。

我认为一台机器不会运行任何在被捕获的桌面上不断更新 GUI 的程序。

您必须解决问题。例如,在捕获应用程序中维护桌面纹理的副本,当AcquireNextFrame 返回S_OK 时将其更新为CopyResource,当它返回DXGI_ERROR_WAIT_TIMEOUT 时使用旧的桌面纹理。

【讨论】:

我不认为这种行为是正常的:函数 always 会返回此错误代码,而不仅仅是偶尔。同时事实证明这是图形驱动程序(Intel-crap)的问题。更新后它仍然无法工作,但它失败并出现不同的错误代码

以上是关于AquireNextFrame() 失败并出现不同的错误的主要内容,如果未能解决你的问题,请参考以下文章

如果修改 XHR,则 JQuery AJAX 请求失败并出现 CORS 错误

takePicture 失败并出现与堆相关的错误

创建虚拟目录失败并出现错误:配置文件 applicationhost.config 有问题

Google Play 上新版本应用的上传失败并出现签名错误

已解决 - LookupAccountName 总是失败并出现错误 122 (ERROR_INSUFFICIENT_BUFFER)

对数据库的 Netezza 查询失败并显示 netezza.max.stmt