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 错误
创建虚拟目录失败并出现错误:配置文件 applicationhost.config 有问题
Google Play 上新版本应用的上传失败并出现签名错误
已解决 - LookupAccountName 总是失败并出现错误 122 (ERROR_INSUFFICIENT_BUFFER)