Jump to content
  • Advertisement

Jack Fu

  • Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About Jack Fu

  • Rank

Personal Information

  • Interests
  1. Yes, you are right about that, I am now able to grab two instances of swap chain, one is for presenting local camera video, the other one is for presenting remote video. The problem is I can't figure out a way to identify which swap chain is for local video, and which one is for remote video, any advise to identify this? P.S. the local video is always on the right corner of the skype window during the call. Thanks in advance.
  2. SkypeHost.exe is the process render the data, there is no DComp loaded, and there is no methods of IDXGISwapChainX called either... BTW, which debugger do you use? I can't find any working debugger to debug the UWP app.
  3. Hi SoldierOfLight, thanks for your reply. Skype UWP doesn't use DComp libary since there is no according .dll found in the process. Besides, it doesn't use IDXGIFactory2 CreateSwapChain methods either, since I have hooked all the methods of IDXGIFactory2/IDXGISwapChainX, it just never called, only IDXGISwapChain is created. Any ideas?
  4. Oh, sorry, the "Skype" means the "Skype UWP"/"Skype For Windows 10" version instead of the desktop version. The strange thing is the "OutputWindow" is NULL.
  5. Yes, actually I tried this as well, see the code below: ID3D11Texture2D* pbackBuffer = nullptr; hr = pswap->GetBuffer(0, __uuidof(*pbackBuffer), (LPVOID*)&pbackBuffer); if (hr != S_OK) { OutputDebugStringA("++++++++ IDXGISwapChain::GetBuffer failed++++++"); SafeRelease(device); SafeRelease(pcontext); return hr; } ID3D11RenderTargetView *pRenderTargetView = NULL; // use the back buffer address to create the render target hr = device->CreateRenderTargetView(pbackBuffer, NULL, &pRenderTargetView); if (hr != S_OK) { OutputDebugStringA("++++++++ IDXGISwapChain::CreateRenderTargetView failed++++++"); SafeRelease(device); SafeRelease(pcontext); return hr; } pcontext->OMSetRenderTargets(1, &pRenderTargetView, NULL); ID3D11Resource* pRenderTRes = NULL; pRenderTargetView->GetResource(&pRenderTRes); hr = SaveWICTextureToFile(pcontext, pRenderTRes, GUID_ContainerFormatJpeg, strScreenPath); The image captured is still either the local camera or the remote camera, not the mixing finial image show in the call window..
  6. Hi piluve, Thanks for your reply, I checked the OutputWindow in the DXGI_SWAP_CHAIN_DESC, the value is NULL. And there is only one swap chain instance as well.
  7. I am writing code for capturing Skype video call for windows 10, I am facing an issue as following: 1). Skype use Directx11, and I am able to hook into the IDXGISwapChain::Present, and use code as below to capture the screenshot: ID3D11Device *device = NULL; HRESULT hr = pswap->GetDevice(__uuidof(ID3D11Device), (void**)&device); if (hr != S_OK) { OutputDebugStringA("++++++++ GetDevice failed ++++++"); return; } ID3D11DeviceContext *context; device->GetImmediateContext(&context); ID3D11Texture2D* backBuffer = nullptr; hr = pswap->GetBuffer(0, __uuidof(*backBuffer), (LPVOID*)&backBuffer); if (hr != S_OK) { OutputDebugStringA("++++++++ IDXGISwapChain::GetBuffer failed++++++"); return; } //Save to a JPG file hr = SaveWICTextureToFile(context, backBuffer, GUID_ContainerFormatJpeg, strScreenPath); SafeRelease(device); SafeRelease(context); SafeRelease(backBuffer); The problem is what I captured is either the local video frame(camera) or the remote video frame, what I want to capture is synthetic image, just like I see on the Skype window during a video call, I remember that in D3D9, there is a GetRenderTargetData() to retrieve the raw data from the back buffer, and it contains the rendered scene which is the same as I see on the Skype window during the video call, but I can't find a way to do this in D3D11.... Any advise is appreciated.
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!