record_desktop.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef RECORD_DESKTOP
  2. #define RECORD_DESKTOP
  3. #include "record_desktop_define.h"
  4. #include "headers_ffmpeg.h"
  5. #include <atomic>
  6. #include <functional>
  7. #include <string>
  8. #include <thread>
  9. namespace am {
  10. typedef std::function<void(AVFrame *frame)> cb_desktop_data;
  11. typedef std::function<void(int)> cb_desktop_error;
  12. class record_desktop
  13. {
  14. public:
  15. record_desktop();
  16. virtual ~record_desktop();
  17. virtual int init(const RECORD_DESKTOP_RECT &rect, const int fps) = 0;
  18. virtual int start() = 0;
  19. virtual int pause() = 0;
  20. virtual int resume() = 0;
  21. virtual int stop() = 0;
  22. inline const AVRational &get_time_base() { return _time_base; }
  23. inline int64_t get_start_time() { return _start_time; }
  24. inline AVPixelFormat get_pixel_fmt() { return _pixel_fmt; }
  25. public:
  26. inline bool is_recording() { return _running; }
  27. inline const std::string &get_device_name() { return _device_name; }
  28. inline const RECORD_DESKTOP_DATA_TYPES get_data_type() { return _data_type; }
  29. inline void registe_cb(cb_desktop_data on_data, cb_desktop_error on_error)
  30. {
  31. _on_data = on_data;
  32. _on_error = on_error;
  33. }
  34. inline const RECORD_DESKTOP_RECT &get_rect() { return _rect; }
  35. inline const int get_frame_rate() { return _fps; }
  36. protected:
  37. virtual void clean_up() = 0;
  38. protected:
  39. std::atomic_bool _running;
  40. std::atomic_bool _paused;
  41. std::atomic_bool _inited;
  42. std::thread _thread;
  43. std::string _device_name;
  44. RECORD_DESKTOP_RECT _rect;
  45. RECORD_DESKTOP_DATA_TYPES _data_type;
  46. int _fps;
  47. cb_desktop_data _on_data;
  48. cb_desktop_error _on_error;
  49. AVRational _time_base;
  50. int64_t _start_time;
  51. AVPixelFormat _pixel_fmt;
  52. };
  53. } // namespace am
  54. #endif