[host] flag paused when waiting for sec desktop

This commit is contained in:
Geoffrey McRae
2018-07-24 01:11:19 +10:00
parent 60070e6076
commit 5cabf155ab
4 changed files with 19 additions and 21 deletions

View File

@@ -72,6 +72,16 @@ DXGI::~DXGI()
{
}
bool DXGI::CanInitialize()
{
HDESK desktop = OpenInputDesktop(0, TRUE, GENERIC_READ);
if (!desktop)
return false;
CloseDesktop(desktop);
return true;
}
bool DXGI::Initialize(CaptureOptions * options)
{
if (m_initialized)
@@ -580,20 +590,6 @@ STDMETHODIMP Capture::DXGI::Invoke(IMFAsyncResult * pAsyncResult)
return status;
}
void DXGI::WaitForDesktop()
{
HDESK desktop;
do
{
desktop = OpenInputDesktop(0, TRUE, GENERIC_READ);
if (desktop)
break;
Sleep(100);
}
while (!desktop);
CloseDesktop(desktop);
}
GrabStatus Capture::DXGI::GrabFrameTexture(struct FrameInfo & frame, struct CursorInfo & cursor, ID3D11Texture2DPtr & texture, bool & timeout)
{
if (!m_initialized)
@@ -705,7 +701,6 @@ GrabStatus Capture::DXGI::GrabFrameTexture(struct FrameInfo & frame, struct Curs
// desktop switch, mode change, switch DWM on or off or Secure Desktop
case DXGI_ERROR_ACCESS_LOST:
case WAIT_ABANDONED:
WaitForDesktop();
return GRAB_STATUS_REINIT;
default:
@@ -752,7 +747,6 @@ GrabStatus Capture::DXGI::ReleaseFrame()
case WAIT_ABANDONED:
case DXGI_ERROR_ACCESS_LOST:
WaitForDesktop();
return GRAB_STATUS_REINIT;
}

View File

@@ -62,6 +62,7 @@ namespace Capture
const char * GetName() { return "DXGI"; }
bool CanInitialize();
bool Initialize(CaptureOptions * options);
void DeInitialize();
@@ -120,9 +121,6 @@ namespace Capture
GrabStatus GrabFrameRaw (struct FrameInfo & frame, struct CursorInfo & cursor);
GrabStatus GrabFrameH264 (struct FrameInfo & frame, struct CursorInfo & cursor);
void WaitForDesktop();
long m_cRef;
CaptureOptions * m_options;