From 3f53d0e2a0e9e381e122ad06bb6f7428f7795bb8 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Sun, 26 May 2024 14:44:13 +1000 Subject: [PATCH] Try more persistently to restart capture after an error occurred. These can happen when changing resolution, or resuming from sleep. --- libsrc/grabber/dda/DDAGrabber.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/libsrc/grabber/dda/DDAGrabber.cpp b/libsrc/grabber/dda/DDAGrabber.cpp index 63ab706f..aea46046 100644 --- a/libsrc/grabber/dda/DDAGrabber.cpp +++ b/libsrc/grabber/dda/DDAGrabber.cpp @@ -157,13 +157,9 @@ int DDAGrabber::grabFrame(Image &image) } // Start the capture if it's not already running. - if (!d->desktopDuplication) + if (!d->desktopDuplication && !restartCapture()) { - if (!restartCapture()) - { - setEnabled(false); - return -1; - } + return -1; } HRESULT hr = S_OK; @@ -179,11 +175,10 @@ int DDAGrabber::grabFrame(Image &image) CComPtr desktopResource; DXGI_OUTDUPL_FRAME_INFO frameInfo; hr = d->desktopDuplication->AcquireNextFrame(INFINITE, &frameInfo, &desktopResource); - if (hr == DXGI_ERROR_ACCESS_LOST) + if (hr == DXGI_ERROR_ACCESS_LOST || hr == DXGI_ERROR_INVALID_CALL) { if (!restartCapture()) { - setEnabled(false); return -1; } return 0;