record_desktop_wgc.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #include "../WGC/export.h"
  3. #include "record_desktop.h"
  4. #include <Windows.h>
  5. namespace am {
  6. class record_desktop_wgc : public record_desktop,
  7. public wgc_session::wgc_session_observer {
  8. class wgc_session_module {
  9. using func_type_is_supported = bool (*)();
  10. using func_type_create_session = wgc_session *(*)();
  11. public:
  12. wgc_session_module() {
  13. module_ = ::LoadLibraryA("WGC.dll");
  14. if (module_) {
  15. func_is_supported_ = (func_type_is_supported)::GetProcAddress(
  16. module_, "wgc_is_supported");
  17. func_create_session_ = (func_type_create_session)::GetProcAddress(
  18. module_, "wgc_create_session");
  19. }
  20. }
  21. ~wgc_session_module() {
  22. if (module_)
  23. ::FreeModule(module_);
  24. }
  25. bool is_supported() const {
  26. return func_create_session_ && func_is_supported_();
  27. }
  28. wgc_session *create_session() const {
  29. if (!func_create_session_)
  30. return nullptr;
  31. return func_create_session_();
  32. }
  33. private:
  34. HMODULE module_ = nullptr;
  35. func_type_is_supported func_is_supported_ = nullptr;
  36. func_type_create_session func_create_session_ = nullptr;
  37. };
  38. public:
  39. record_desktop_wgc();
  40. ~record_desktop_wgc();
  41. int init(const RECORD_DESKTOP_RECT &rect, const int fps) override;
  42. int start() override;
  43. int pause() override;
  44. int resume() override;
  45. int stop() override;
  46. void on_frame(const wgc_session::wgc_session_frame &frame) override;
  47. protected:
  48. void clean_up() override;
  49. private:
  50. wgc_session *session_ = nullptr;
  51. wgc_session_module module_;
  52. };
  53. } // namespace am