dxgi_capturer.h 857 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef __DXGI_CAPTURER_H__
  2. #define __DXGI_CAPTURER_H__
  3. #include <d3d11.h>
  4. #include <dxgi1_2.h>
  5. #include "d3d/gen_frame.h"
  6. class DxgiCapturer {
  7. public:
  8. DxgiCapturer();
  9. ~DxgiCapturer();
  10. public:
  11. bool Open(int left, int top, int width, int height);
  12. void Close();
  13. public:
  14. HDC GetHdc();
  15. AVFrame* GetFrame();
  16. private:
  17. bool _bInit = false;
  18. bool _isCaptureSuccess = false;
  19. ID3D11Device* _hDevice = nullptr;
  20. ID3D11DeviceContext* _hContext = nullptr;
  21. IDXGIOutputDuplication* _hDeskDupl = nullptr;
  22. IDXGISurface1* _hStagingSurf = nullptr;
  23. ID3D11Texture2D* _gdiImage = nullptr;
  24. D3D11_TEXTURE2D_DESC _desc;
  25. bool _isAttached = false;
  26. AVFrame* _xrgbFrame = nullptr;
  27. AVFrame* _nv12Frame = nullptr;
  28. BufferFiller _xrgbBuffers;
  29. BufferFiller _nv12Buffers;
  30. D3dConverter _rgbToNv12;
  31. };
  32. #endif