/* * @Author: DI JUNKUN * @Date: 2025-05-07 * Copyright (c) 2025 by DI JUNKUN, All Rights Reserved. */ #ifndef _SCREEN_CAPTURER_X11_H_ #define _SCREEN_CAPTURER_X11_H_ // forward declarations for X11 types struct _XDisplay; typedef struct _XDisplay Display; typedef unsigned long Window; struct _XRRScreenResources; typedef struct _XRRScreenResources XRRScreenResources; struct _XImage; typedef struct _XImage XImage; #include #include #include #include #include #include #include "screen_capturer.h" namespace crossdesk { class ScreenCapturerX11 : public ScreenCapturer { public: ScreenCapturerX11(); ~ScreenCapturerX11(); public: int Init(const int fps, cb_desktop_data cb) override; int Destroy() override; int Start(bool show_cursor) override; int Stop() override; int Pause(int monitor_index) override; int Resume(int monitor_index) override; int SwitchTo(int monitor_index) override; std::vector GetDisplayInfoList() override; void OnFrame(); private: void DrawCursor(XImage* image, int x, int y); private: Display* display_ = nullptr; Window root_ = 0; XRRScreenResources* screen_res_ = nullptr; int left_ = 0; int top_ = 0; int width_ = 0; int height_ = 0; std::thread thread_; std::atomic running_{false}; std::atomic paused_{false}; std::atomic monitor_index_{0}; std::atomic show_cursor_{true}; int fps_ = 60; cb_desktop_data callback_; std::vector display_info_list_; std::vector y_plane_; std::vector uv_plane_; }; } // namespace crossdesk #endif