AquireNextFrame() не работает с разными ошибками

У меня есть рабочий код, который циклически захватывает текущий рабочий стол и использует код, описанный в DirectX Screen Capture — Desktop Duplication API — ограниченная частота кадров AcquireNextFrame / https://github.com/microsoft/Windows-classic-samples/tree/master/Образцы/DXGIDesktopDuplication

Это работает хорошо, за исключением одной машины (где у меня, к сожалению, нет физического доступа для подробной отладки, а я получаю только отчеты от пользователей). На этой машине, когда я вызываю AcquireNextFrame() со значением тайм-аута 500, она неоднократно завершается с ошибкой с кодом 0x887A0027/DXGI_ERROR_WAIT_TIMEOUT. Чтобы было понятно: вызов не завершается ошибкой всего несколько раз, он терпит неудачу все время, поэтому AcquireNextFrame() никогда не возвращает результат, независимо от того, как часто

Когда я увеличиваю значение тайм-аута до 850, происходит сбой с ошибкой 0x887A0026/DXGI_ERROR_ACCESS_LOST.

Итак... есть идеи, что может вызвать эти ошибки и как их предотвратить?

Спасибо!


person Elmi    schedule 03.05.2021    source источник


Ответы (1)


Поведение нормальное.

Windows обычно не отображает рабочий стол с частотой 60 Гц, что было бы пустой тратой ресурсов и электроэнергии. DXGI_ERROR_WAIT_TIMEOUT просто означает, что компьютер показывает то же изображение, что и раньше. AcquireNextFrame возвращает S_OK и дает вам еще один кадр, когда какое-то окно, видимое на рабочем столе, что-то обновило.

Я думаю, что ни на одной машине не запущены какие-либо программы, которые постоянно обновляют графический интерфейс на захватываемом рабочем столе.

Вы должны обходной путь. Например, сохраните копию текстуры рабочего стола в приложении захвата, когда AcquireNextFrame вернет S_OK, обновите ее с помощью CopyResource, а когда вернет DXGI_ERROR_WAIT_TIMEOUT, используйте старую текстуру рабочего стола.

person Soonts    schedule 14.05.2021
comment
Я не считаю такое поведение нормальным: функция всегда возвращает этот код ошибки, а не только время от времени. Между тем выясняется, что это проблема с графическим драйвером (Intel-дерьмо). После обновления он по-прежнему не работает, но с другим кодом ошибки. - person Elmi; 08.07.2021