record_desktop_wgc.h 1.8 KB

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