mirror of
				https://github.com/kunkundi/crossdesk.git
				synced 2025-10-26 20:25:34 +08:00 
			
		
		
		
	Update linux capture module
This commit is contained in:
		
							
								
								
									
										85
									
								
								screen_capture/linux/screen_capture_x11.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								screen_capture/linux/screen_capture_x11.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| #ifndef _SCREEN_CAPTURE_X11_H_ | ||||
| #define _SCREEN_CAPTURE_X11_H_ | ||||
|  | ||||
| #include <atomic> | ||||
| #include <functional> | ||||
| #include <string> | ||||
| #include <thread> | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| #include <libavcodec/avcodec.h> | ||||
| #include <libavdevice/avdevice.h> | ||||
| #include <libavformat/avformat.h> | ||||
| #include <libavutil/imgutils.h> | ||||
| #include <libswscale/swscale.h> | ||||
| #ifdef __cplusplus | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| typedef struct { | ||||
|   int left; | ||||
|   int top; | ||||
|   int right; | ||||
|   int bottom; | ||||
| } RECORD_DESKTOP_RECT; | ||||
|  | ||||
| typedef std::function<void(unsigned char *, int, int, int)> cb_desktop_data; | ||||
| typedef std::function<void(int)> cb_desktop_error; | ||||
|  | ||||
| class ScreenCaptureX11 { | ||||
|  public: | ||||
|   ScreenCaptureX11(); | ||||
|   ~ScreenCaptureX11(); | ||||
|  | ||||
|  public: | ||||
|   int Init(const RECORD_DESKTOP_RECT &rect, const int fps, cb_desktop_data cb); | ||||
|  | ||||
|   int Start(); | ||||
|   int Pause(); | ||||
|   int Resume(); | ||||
|   int Stop(); | ||||
|  | ||||
|   void OnFrame(); | ||||
|  | ||||
|  protected: | ||||
|   void CleanUp(); | ||||
|  | ||||
|  private: | ||||
|   std::atomic_bool _running; | ||||
|   std::atomic_bool _paused; | ||||
|   std::atomic_bool _inited; | ||||
|  | ||||
|   std::thread _thread; | ||||
|  | ||||
|   std::string _device_name; | ||||
|  | ||||
|   RECORD_DESKTOP_RECT _rect; | ||||
|  | ||||
|   int _fps; | ||||
|  | ||||
|   cb_desktop_data _on_data; | ||||
|   cb_desktop_error _on_error; | ||||
|  | ||||
|  private: | ||||
|   int i_ = 0; | ||||
|   int videoindex_ = 0; | ||||
|   int got_picture_ = 0; | ||||
|   // ffmpeg | ||||
|   AVFormatContext *pFormatCtx_ = nullptr; | ||||
|   AVCodecContext *pCodecCtx_ = nullptr; | ||||
|   AVCodec *pCodec_ = nullptr; | ||||
|   AVCodecParameters *pCodecParam_ = nullptr; | ||||
|   AVDictionary *options_ = nullptr; | ||||
|   AVInputFormat *ifmt_ = nullptr; | ||||
|   AVFrame *pFrame_ = nullptr; | ||||
|   AVFrame *pFrameNV12_ = nullptr; | ||||
|   AVPacket *packet_ = nullptr; | ||||
|   struct SwsContext *img_convert_ctx_ = nullptr; | ||||
|  | ||||
|   // thread | ||||
|   std::unique_ptr<std::thread> capture_thread_ = nullptr; | ||||
| }; | ||||
|  | ||||
| #endif | ||||
		Reference in New Issue
	
	Block a user