@@ -790,8 +790,10 @@ class CAPTURE
790790 return 0 ;
791791
792792 // Get DXGI adapter
793+ HRESULT hr = 0 ;
794+
793795 CComPtr<IDXGIAdapter> lDxgiAdapter;
794- auto hr = lDxgiDevice->GetParent (
796+ hr = lDxgiDevice->GetParent (
795797 __uuidof (IDXGIAdapter),
796798 reinterpret_cast <void **>(&lDxgiAdapter));
797799
@@ -843,6 +845,7 @@ class CAPTURE
843845 desc.MipLevels = 1 ;
844846 desc.CPUAccessFlags = 0 ;
845847 desc.Usage = D3D11_USAGE_DEFAULT;
848+ lGDIImage = 0 ;
846849 hr = device->CreateTexture2D (&desc, NULL , &lGDIImage);
847850 if (FAILED (hr))
848851 return 0 ;
@@ -862,6 +865,7 @@ class CAPTURE
862865 desc.MipLevels = 1 ;
863866 desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
864867 desc.Usage = D3D11_USAGE_STAGING;
868+ lDestImage = 0 ;
865869 hr = device->CreateTexture2D (&desc, NULL , &lDestImage);
866870 if (FAILED (hr))
867871 return 0 ;
@@ -1087,7 +1091,6 @@ int DesktopCapture(DESKTOPCAPTUREPARAMS& dp)
10871091 if (dp.HasAudio )
10881092 hr = CoCreateInstance (__uuidof (MMDeviceEnumerator), NULL , CLSCTX_INPROC_SERVER, __uuidof (IMMDeviceEnumerator), (LPVOID*)&deviceEnumerator);
10891093
1090-
10911094 CAPTURE cap;
10921095 int wi = 0 , he = 0 ;
10931096 if (dp.HasVideo )
@@ -1660,6 +1663,23 @@ int DesktopCapture(DESKTOPCAPTUREPARAMS& dp)
16601663 &lDesktopResource);
16611664 if (hr == DXGI_ERROR_WAIT_TIMEOUT)
16621665 hr = S_OK;
1666+ if (hr == DXGI_ERROR_ACCESS_LOST)
1667+ {
1668+ cap.lDeskDupl = 0 ;
1669+ bool C = false ;
1670+ for (int i = 0 ; i < 10 ; i++)
1671+ {
1672+ if (cap.Prepare (dp.nOutput ))
1673+ {
1674+ C = true ;
1675+ break ;
1676+ }
1677+ Sleep (250 );
1678+ }
1679+ if (!C)
1680+ break ;
1681+ hr = S_OK;
1682+ }
16631683 if (FAILED (hr))
16641684 break ;
16651685
0 commit comments