OpenShot Library | libopenshot  0.7.0
ScreenCaptureReader.h
Go to the documentation of this file.
1 
9 // Copyright (c) 2008-2026 OpenShot Studios, LLC
10 //
11 // SPDX-License-Identifier: LGPL-3.0-or-later
12 
13 #ifndef OPENSHOT_SCREENCAPTUREREADER_H
14 #define OPENSHOT_SCREENCAPTUREREADER_H
15 
16 #include "ReaderBase.h"
17 
18 #include <atomic>
19 #include <map>
20 #include <memory>
21 #include <string>
22 
23 #include "FFmpegUtilities.h"
24 
25 namespace openshot
26 {
28  {
34  };
35 
37  {
39  std::string display;
40  int x = 0;
41  int y = 0;
42  int width = 1280;
43  int height = 720;
45  bool include_cursor = true;
46  bool show_region = false;
47  bool capture_audio = false;
48  std::string audio_device;
49  int audio_sample_rate = 48000;
50  int audio_channels = 2;
51  std::map<std::string, std::string> options;
52  };
53 
55  {
56  bool is_open = false;
57  int64_t frames_read = 0;
58  int dropped_packets = 0;
59  double duration = 0.0;
60  };
61 
63  {
64  public:
65 #ifndef SWIG
67  {
68  public:
69  virtual ~CaptureBackendReader() = default;
70  virtual void Open() = 0;
71  virtual void Close() = 0;
72  virtual bool IsOpen() const = 0;
73  virtual std::shared_ptr<openshot::Frame> GetFrame(int64_t number) = 0;
74  virtual openshot::CaptureReaderStats GetStats() const = 0;
75  };
76 #endif
77 
78  explicit ScreenCaptureReader(const ScreenCaptureSettings& settings);
79  ~ScreenCaptureReader() override;
80 
81  void Close() override;
82  CacheBase* GetCache() override { return NULL; };
83  std::shared_ptr<openshot::Frame> GetFrame(int64_t number) override;
84  bool IsOpen() override;
85  std::string Name() override { return "ScreenCaptureReader"; };
86  std::string Json() const override;
87  void SetJson(const std::string value) override;
88  Json::Value JsonValue() const override;
89  void SetJsonValue(const Json::Value root) override;
90  void Open() override;
91 
93  void AddSystemAudio(std::shared_ptr<openshot::Frame> frame, int64_t output_frame_number);
94  void ResetSystemAudio();
95  ScreenCaptureSettings GetSettings() const { return settings; };
96  static bool IsBackendSupported(ScreenCaptureBackend backend);
97  static bool IsSystemAudioSupported(ScreenCaptureBackend backend);
99 
100  private:
101  void ValidateSettings() const;
102  void OpenDevice();
103  void OpenDecoder();
104  std::string InputFormatName() const;
105  std::string InputName() const;
106  std::shared_ptr<openshot::Frame> DecodeNextFrame(int64_t number);
107  bool UsesFFmpegDevice() const;
108  bool UsesWaylandPortal() const;
109  void PopulateInfo();
110 
111  ScreenCaptureSettings settings;
112 #ifndef SWIG
113  std::unique_ptr<CaptureBackendReader> backend_reader;
114 #endif
115  bool is_open;
116  int video_stream;
117  int64_t frames_read;
118  int dropped_packets;
119  AVFormatContext* format_context;
120  AVCodecContext* codec_context;
121  AVFrame* source_frame;
122  AVFrame* rgba_frame;
123  AVPacket* packet;
124  SwsContext* sws_context;
125  std::atomic<bool> close_requested;
126  bool manual_system_audio = false;
127 #ifndef SWIG
128  class SystemAudioCapture;
129  std::unique_ptr<SystemAudioCapture> system_audio;
130 #endif
131  };
132 }
133 
134 #endif
FFmpegUtilities.h
Header file for FFmpegUtilities.
openshot::ScreenCaptureReader::ScreenCaptureReader
ScreenCaptureReader(const ScreenCaptureSettings &settings)
Definition: ScreenCaptureReader.cpp:569
openshot::ScreenCaptureSettings::include_cursor
bool include_cursor
Definition: ScreenCaptureReader.h:45
openshot::ScreenCaptureReader
Definition: ScreenCaptureReader.h:62
openshot::ScreenCaptureReader::SetJson
void SetJson(const std::string value) override
Load JSON string into this object.
Definition: ScreenCaptureReader.cpp:1178
openshot::ScreenCaptureSettings::y
int y
Definition: ScreenCaptureReader.h:41
openshot::ScreenCaptureSettings::display
std::string display
Definition: ScreenCaptureReader.h:39
openshot::ScreenCaptureReader::ResetSystemAudio
void ResetSystemAudio()
Definition: ScreenCaptureReader.cpp:976
openshot
This namespace is the default namespace for all code in the openshot library.
Definition: AnimatedCurve.h:24
openshot::CaptureReaderStats
Definition: ScreenCaptureReader.h:54
openshot::ScreenCaptureReader::CaptureBackendReader
Definition: ScreenCaptureReader.h:66
openshot::Fraction
This class represents a fraction.
Definition: Fraction.h:30
openshot::SCREEN_CAPTURE_AUTO
@ SCREEN_CAPTURE_AUTO
Definition: ScreenCaptureReader.h:29
openshot::ScreenCaptureReader::IsOpen
bool IsOpen() override
Determine if reader is open or closed.
Definition: ScreenCaptureReader.cpp:612
openshot::ScreenCaptureSettings
Definition: ScreenCaptureReader.h:36
openshot::ScreenCaptureSettings::fps
openshot::Fraction fps
Definition: ScreenCaptureReader.h:44
openshot::ScreenCaptureReader::Json
std::string Json() const override
Generate JSON string of this object.
Definition: ScreenCaptureReader.cpp:1148
openshot::SCREEN_CAPTURE_MAC_AVFOUNDATION
@ SCREEN_CAPTURE_MAC_AVFOUNDATION
Definition: ScreenCaptureReader.h:33
openshot::ScreenCaptureReader::CaptureBackendReader::IsOpen
virtual bool IsOpen() const =0
openshot::CacheBase
All cache managers in libopenshot are based on this CacheBase class.
Definition: CacheBase.h:34
openshot::SCREEN_CAPTURE_WAYLAND
@ SCREEN_CAPTURE_WAYLAND
Definition: ScreenCaptureReader.h:31
openshot::ScreenCaptureReader::GetFrame
std::shared_ptr< openshot::Frame > GetFrame(int64_t number) override
Definition: ScreenCaptureReader.cpp:948
openshot::ScreenCaptureReader::GetSettings
ScreenCaptureSettings GetSettings() const
Definition: ScreenCaptureReader.h:95
openshot::ScreenCaptureReader::~ScreenCaptureReader
~ScreenCaptureReader() override
Definition: ScreenCaptureReader.cpp:607
openshot::ScreenCaptureReader::IsSystemAudioSupported
static bool IsSystemAudioSupported(ScreenCaptureBackend backend)
Definition: ScreenCaptureReader.cpp:639
openshot::ScreenCaptureReader::JsonValue
Json::Value JsonValue() const override
Generate Json::Value for this object.
Definition: ScreenCaptureReader.cpp:1153
openshot::ScreenCaptureReader::DefaultBackend
static ScreenCaptureBackend DefaultBackend()
Definition: ScreenCaptureReader.cpp:656
openshot::ScreenCaptureSettings::backend
ScreenCaptureBackend backend
Definition: ScreenCaptureReader.h:38
openshot::CaptureReaderStats::dropped_packets
int dropped_packets
Definition: ScreenCaptureReader.h:58
openshot::CaptureReaderStats::is_open
bool is_open
Definition: ScreenCaptureReader.h:56
openshot::ScreenCaptureSettings::show_region
bool show_region
Definition: ScreenCaptureReader.h:46
openshot::ScreenCaptureReader::CaptureBackendReader::Open
virtual void Open()=0
openshot::ScreenCaptureSettings::height
int height
Definition: ScreenCaptureReader.h:43
openshot::SCREEN_CAPTURE_X11
@ SCREEN_CAPTURE_X11
Definition: ScreenCaptureReader.h:30
openshot::ScreenCaptureReader::CaptureBackendReader::Close
virtual void Close()=0
openshot::ScreenCaptureBackend
ScreenCaptureBackend
Definition: ScreenCaptureReader.h:27
ReaderBase.h
Header file for ReaderBase class.
openshot::ScreenCaptureSettings::options
std::map< std::string, std::string > options
Definition: ScreenCaptureReader.h:51
openshot::ScreenCaptureReader::GetStats
openshot::CaptureReaderStats GetStats() const
Definition: ScreenCaptureReader.cpp:1134
openshot::ScreenCaptureSettings::audio_device
std::string audio_device
Definition: ScreenCaptureReader.h:48
openshot::ScreenCaptureReader::GetCache
CacheBase * GetCache() override
Get the cache object used by this reader (note: not all readers use cache)
Definition: ScreenCaptureReader.h:82
openshot::CaptureReaderStats::frames_read
int64_t frames_read
Definition: ScreenCaptureReader.h:57
openshot::ScreenCaptureSettings::x
int x
Definition: ScreenCaptureReader.h:40
openshot::ScreenCaptureReader::IsBackendSupported
static bool IsBackendSupported(ScreenCaptureBackend backend)
Definition: ScreenCaptureReader.cpp:617
openshot::ReaderBase
This abstract class is the base class, used by all readers in libopenshot.
Definition: ReaderBase.h:75
openshot::ScreenCaptureSettings::audio_sample_rate
int audio_sample_rate
Definition: ScreenCaptureReader.h:49
openshot::ScreenCaptureReader::Name
std::string Name() override
Return the type name of the class.
Definition: ScreenCaptureReader.h:85
openshot::ScreenCaptureReader::CaptureBackendReader::GetFrame
virtual std::shared_ptr< openshot::Frame > GetFrame(int64_t number)=0
openshot::ScreenCaptureSettings::width
int width
Definition: ScreenCaptureReader.h:42
openshot::ScreenCaptureSettings::audio_channels
int audio_channels
Definition: ScreenCaptureReader.h:50
openshot::ScreenCaptureReader::CaptureBackendReader::~CaptureBackendReader
virtual ~CaptureBackendReader()=default
openshot::ScreenCaptureSettings::capture_audio
bool capture_audio
Definition: ScreenCaptureReader.h:47
openshot::ScreenCaptureReader::Open
void Open() override
Open the reader (and start consuming resources, such as images or video files)
Definition: ScreenCaptureReader.cpp:789
openshot::ScreenCaptureReader::SetJsonValue
void SetJsonValue(const Json::Value root) override
Load Json::Value into this object.
Definition: ScreenCaptureReader.cpp:1187
openshot::ScreenCaptureReader::AddSystemAudio
void AddSystemAudio(std::shared_ptr< openshot::Frame > frame, int64_t output_frame_number)
Definition: ScreenCaptureReader.cpp:969
openshot::ScreenCaptureReader::CaptureBackendReader::GetStats
virtual openshot::CaptureReaderStats GetStats() const =0
openshot::SCREEN_CAPTURE_WINDOWS_GDI
@ SCREEN_CAPTURE_WINDOWS_GDI
Definition: ScreenCaptureReader.h:32
openshot::ScreenCaptureReader::Close
void Close() override
Close the reader (and any resources it was consuming)
Definition: ScreenCaptureReader.cpp:1102
openshot::CaptureReaderStats::duration
double duration
Definition: ScreenCaptureReader.h:59