Skip to content

Trying to capture sequential screen grabs; time depends on mouse movement #7

Description

@drcdr

I would like to have a very fast screen capture in a loop, extracting a portion of this data to send to a server. To start, I made some small additions to your (great) code, to try and benchmark the capturing of multiple desktops.

  • Brought everything into Visual Studio 17, x64
  • Made changes to get things to compile, for four CComQIPtr assignments:
CComQIPtr<ID3D11Texture2D> spTextureResource = CComQIPtr<ID3D11Texture2D>(spDXGIResource);
CComQIPtr<IDXGISurface1> spDXGISurface = CComQIPtr<IDXGISurface1>(spD3D11Texture2D);
CComQIPtr<IDXGIOutput1> spDXGIOutput1 = CComQIPtr<IDXGIOutput1>(*OutputIter); 
CComQIPtr<IDXGIDevice1> spDXGIDevice = CComQIPtr<IDXGIDevice1>(spD3D11Device);
  • Added a loop around GetOutputBits, and timed it (using std::chrono, not shown)
for (int j = 0; j < 10; j++) {
	int i = 0;
	do {
		hr = g_DXGIManager.GetOutputBits(pBuf, rcDim);
		i++;
	} while (hr == DXGI_ERROR_WAIT_TIMEOUT || i < 2);
	if( FAILED(hr) ) {
		printf("GetOutputBits failed with hr=0x%08x\n", hr);
		return hr;
	}
}

When I run this, it takes a long time, if I don't move the mouse. With no mouse movement, it typically takes 3.6 - 4.2s. If I move the mouse continuously, then run, it takes 137 ms.

I don't need the mouse pointer graphics information in the screen grab. I've tried both leaving in the 'mouse pointer' code and commenting it out, but it doesn't seem to make a difference.

I've run this on both my PC (running virtual desktop) and laptop (single desktop), and the behavior is similar (~1.8s no movement; ~158 ms movement).

I've also tried both CSDesktop and CSMonitor1, the behavior is the same.

Questions:

  • Do you have any idea why the mouse might be holding up continuous acquisition?
  • If I wanted to preprocess the screen-grab on the GPU card (e.g. with CUDA code) - is there a logical place to insert this? (I'm very new to Direct3D.)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions