Agora C++ API Reference for All Platforms
NGIAgoraExtensionScreenSource.h
1 //
2 // Agora SDK
3 //
4 // Copyright (c) 2021 Agora.io. All rights reserved.
5 //
6 
7 #pragma once // NOLINT(build/header_guard)
8 
9 #include "AgoraBase.h"
10 #include "IAgoraLog.h"
11 #include "AgoraRefPtr.h"
12 #include "NGIAgoraVideoFrame.h"
13 #include "AgoraMediaBase.h"
14 #if defined(WEBRTC_IOS)
15 #include <coreVideo/CVPixelBuffer.h>
16 #endif
17 namespace agora {
18 namespace rtc {
19 
28  uint32_t target_fps;
29  uint32_t real_capture_fps;
30  uint32_t capture_out_fps;
31  uint32_t drop_fps;
32 
38  capture_out_fps(0), drop_fps(0) {}
39 };
40 
42  public:
43  class Control : public RefCountInterface {
44  public:
45  virtual int postEvent(const char* key, const char* value) = 0;
46  virtual void printLog(commons::LOG_LEVEL level, const char* format, ...) = 0;
47  virtual void printLog(commons::LOG_LEVEL level, const char* fromat, va_list) = 0;
48  virtual int pushAudioFrame(const media::IAudioFrameObserver::AudioFrame& captured_frame) = 0;
49  virtual bool timeToPushVideo() = 0;
50  virtual int pushVideoFrame(const agora::agora_refptr<IVideoFrame>& captured_frame) = 0;
52 #if defined(WEBRTC_IOS)
53  virtual int pushVideoFrame(CVPixelBufferRef pixelBuffer, int64_t timestamp_ms, uint32_t rotation) = 0;
54 #endif
55 #if defined(WEBRTC_WIN)
56  virtual void recycleVideoCache() = 0;
57 #endif
58  };
59 
61  uint32_t volume;
65  };
66 
67 #if defined (__ANDROID__) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
70  int frameRate;
72  : dimensions(640, 360), frameRate(15) {}
73  };
74 #else
75  struct VideoCaptureConfig {
76  #if !defined(__linux__)
77  enum class CapturerMode {
78  kUnspecified = 0,
79  // Mac only
80  kScreenCaptureKit = 10,
81  kCoreGraphic = 11,
82  kAVFoundation = 12,
83  };
84  #endif
85 
86  enum CaptureType {
89  };
93  int64_t display_id;
95 
97 
98  // Mac only
100  #if !defined(__linux__)
102 
103  bool captureAudio = false;
105  int audio_sample_rate = 48000;
107  #endif
109 
112  };
113 #endif
114 
124  };
125 
126  enum CaptureMode {
127  kPull, // SDK needs to poll the captured frame actively
128  kPush // Capture source pushes the captured frame to sdk
129  };
130 
131 
133 
134  virtual int initializeCapture(const agora_refptr<Control>& control) = 0;
135 
136  virtual int initVideo(const VideoCaptureConfig& config) = 0;
137  // Start video capture interface for desktop capturing
138  virtual int startVideoCapture(const VideoCaptureConfig& config) = 0;
139  virtual int stopVideoCapture() = 0;
140  virtual int stopVideoCaptureAsync() = 0;
141 
143 
144  // Implementation of the following interfaces are not mandatory
145  virtual bool isAudioCaptureSupported() {
146  return false;
147  }
148  virtual int startAudioCapture(const AudioCaptureConfig& config) {
149  return -ERR_NOT_SUPPORTED;
150  }
151  virtual int stopAudioCapture() {
152  return -ERR_NOT_SUPPORTED;
153  }
154  virtual int setAudioVolume(uint32_t volume) {
155  return -ERR_NOT_SUPPORTED;
156  }
157  virtual int setFrameRate(int fps) {
158  return -ERR_NOT_SUPPORTED;
159  }
160 
162  return -ERR_NOT_SUPPORTED;
163  }
164  virtual int updateCaptureRegion(const agora::rtc::Rectangle& captureRegion) {
165  return -ERR_NOT_SUPPORTED;
166  }
167  virtual int setExcludeWindowList(void* const * handles, int count) {
168  return -ERR_NOT_SUPPORTED;
169  }
170  virtual int captureMouseCursor(bool capture) {
171  return -ERR_NOT_SUPPORTED;
172  }
174  return -ERR_NOT_SUPPORTED;
175  }
177  return -ERR_NOT_SUPPORTED;
178  }
179  virtual int getScreenDimensions(int& width, int& height) {
180  return ERR_NOT_SUPPORTED;
181  }
182  virtual int setProperty(const char* key, const char* json_value) {
183  return -ERR_NOT_SUPPORTED;
184  }
185  virtual int setCustomContext(const char* key, const void* context) {
186  return -ERR_NOT_SUPPORTED;
187  }
188  virtual int getProperty(const char* key, char* json_value, int& length) {
189  return -ERR_NOT_SUPPORTED;
190  }
191  virtual int setHighLight(bool isHighLight, unsigned int color, int width) {
192  return -ERR_NOT_SUPPORTED;
193  }
194  virtual int setContentType(int contentType) {
195  return -ERR_NOT_SUPPORTED;
196  }
197  virtual void* getCustomContext(const char* key) {
198  return NULL;
199  }
200  virtual void* getScreenCaptureSources(const ScreenSourceListOption& option) {
201  return NULL;
202  }
203  virtual void setFrameCopy(bool frameCopy) {};
204 #if defined(WEBRTC_ANDROID) && !defined(RTC_EXCLUDE_JAVA)
205  virtual void setSmoothCapture(bool smoothCapture) {};
206  virtual void setResetVitualDisplay(bool reset) {};
207 #endif
208 #if defined(WEBRTC_ANDROID)
209  virtual int setExternalMediaProjection(void* mediaProjection) {
210  return -ERR_NOT_SUPPORTED;
211  }
212 #endif
213 };
214 
215 } // namespace rtc
216 } // namespace agora
agora::rtc::ScreenCaptureProfilingStatistics::ScreenCaptureProfilingStatistics
ScreenCaptureProfilingStatistics()
Definition: NGIAgoraExtensionScreenSource.h:33
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::CaptureScreen
@ CaptureScreen
Definition: NGIAgoraExtensionScreenSource.h:88
agora::rtc::IScreenCaptureSource::Control::pushAudioFrame
virtual int pushAudioFrame(const media::IAudioFrameObserver::AudioFrame &captured_frame)=0
agora::rtc::ScreenCaptureProfilingStatistics
Definition: NGIAgoraExtensionScreenSource.h:20
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::CapturerMode::kCoreGraphic
@ kCoreGraphic
agora::rtc::IScreenCaptureSource::Control::timeToPushVideo
virtual bool timeToPushVideo()=0
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::rtc::ScreenCaptureProfilingStatistics::captured_frame_height
uint32_t captured_frame_height
Definition: NGIAgoraExtensionScreenSource.h:23
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::excludeCurrentProcessAudio
bool excludeCurrentProcessAudio
Definition: NGIAgoraExtensionScreenSource.h:106
agora::rtc::IScreenCaptureSource::initVideo
virtual int initVideo(const VideoCaptureConfig &config)=0
agora::rtc::IScreenCaptureSource::isAudioCaptureSupported
virtual bool isAudioCaptureSupported()
Definition: NGIAgoraExtensionScreenSource.h:145
agora::rtc::IScreenCaptureSource::Control::postEvent
virtual int postEvent(const char *key, const char *value)=0
agora::rtc::IScreenCaptureSource::Control::pushVideoFrame
virtual int pushVideoFrame(CVPixelBufferRef pixelBuffer, int64_t timestamp_ms, uint32_t rotation)=0
agora::rtc::IScreenCaptureSource::stopVideoCaptureAsync
virtual int stopVideoCaptureAsync()=0
agora::rtc::Rectangle
Definition: AgoraBase.h:2220
agora::view_t
void * view_t
Definition: AgoraBase.h:814
agora::rtc::ScreenCaptureProfilingStatistics::drop_fps
uint32_t drop_fps
Definition: NGIAgoraExtensionScreenSource.h:31
agora::media::IAudioFrameObserverBase::AudioFrame
Definition: AgoraMediaBase.h:1282
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::audio_sample_rate
int audio_sample_rate
Definition: NGIAgoraExtensionScreenSource.h:105
agora::rtc::IScreenCaptureSource::getProfilingStats
virtual int getProfilingStats(ScreenCaptureProfilingStatistics &stats)
Definition: NGIAgoraExtensionScreenSource.h:176
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::CaptureWindow
@ CaptureWindow
Definition: NGIAgoraExtensionScreenSource.h:87
agora::rtc::IScreenCaptureSource::setAudioVolume
virtual int setAudioVolume(uint32_t volume)
Definition: NGIAgoraExtensionScreenSource.h:154
agora::rtc::IScreenCaptureSource::ScreenSourceListOption::unfiltered
bool unfiltered
Definition: NGIAgoraExtensionScreenSource.h:121
agora::rtc::ScreenCaptureProfilingStatistics::real_capture_fps
uint32_t real_capture_fps
Definition: NGIAgoraExtensionScreenSource.h:29
agora::rtc::IScreenCaptureSource::kPush
@ kPush
Definition: NGIAgoraExtensionScreenSource.h:128
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::display_id
int64_t display_id
Definition: NGIAgoraExtensionScreenSource.h:93
agora::rtc::IScreenCaptureSource::capture
virtual int capture(agora::agora_refptr< IVideoFrame > &frame)
Definition: NGIAgoraExtensionScreenSource.h:173
agora::rtc::IScreenCaptureSource::setHighLight
virtual int setHighLight(bool isHighLight, unsigned int color, int width)
Definition: NGIAgoraExtensionScreenSource.h:191
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::region_offset
Rectangle region_offset
Definition: NGIAgoraExtensionScreenSource.h:92
agora::rtc::IScreenCaptureSource::AudioCaptureConfig::AudioCaptureConfig
AudioCaptureConfig()
Definition: NGIAgoraExtensionScreenSource.h:64
agora::rtc::ScreenCaptureProfilingStatistics::total_captured_frames
uint32_t total_captured_frames
Definition: NGIAgoraExtensionScreenSource.h:24
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::IScreenCaptureSource::ScreenSourceListOption
Definition: NGIAgoraExtensionScreenSource.h:115
agora::rtc::ScreenCaptureProfilingStatistics::captured_frame_width
uint32_t captured_frame_width
Definition: NGIAgoraExtensionScreenSource.h:22
agora::rtc::IScreenCaptureSource::AudioCaptureConfig
Definition: NGIAgoraExtensionScreenSource.h:60
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::capturerMode
CapturerMode capturerMode
Definition: NGIAgoraExtensionScreenSource.h:101
agora::rtc::IScreenCaptureSource::ScreenSourceListOption::thumb_width
int thumb_width
Definition: NGIAgoraExtensionScreenSource.h:116
agora::rtc::IScreenCaptureSource::stopAudioCapture
virtual int stopAudioCapture()
Definition: NGIAgoraExtensionScreenSource.h:151
agora::rtc::IScreenCaptureSource::captureMouseCursor
virtual int captureMouseCursor(bool capture)
Definition: NGIAgoraExtensionScreenSource.h:170
agora::rtc::IScreenCaptureSource::setResetVitualDisplay
virtual void setResetVitualDisplay(bool reset)
Definition: NGIAgoraExtensionScreenSource.h:206
agora::rtc::IScreenCaptureSource::setSmoothCapture
virtual void setSmoothCapture(bool smoothCapture)
Definition: NGIAgoraExtensionScreenSource.h:205
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::disable_avf
bool disable_avf
Definition: NGIAgoraExtensionScreenSource.h:99
agora::rtc::IScreenCaptureSource::ScreenSourceListOption::ignore_unresponsive
bool ignore_unresponsive
Definition: NGIAgoraExtensionScreenSource.h:123
agora::rtc::IScreenCaptureSource::getProperty
virtual int getProperty(const char *key, char *json_value, int &length)
Definition: NGIAgoraExtensionScreenSource.h:188
agora::rtc::IScreenCaptureSource::Control::printLog
virtual void printLog(commons::LOG_LEVEL level, const char *format,...)=0
agora::rtc::IScreenCaptureSource::Control::recycleVideoCache
virtual void recycleVideoCache()=0
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::window_focused
bool window_focused
Definition: NGIAgoraExtensionScreenSource.h:96
agora::rtc::IScreenCaptureSource::setProperty
virtual int setProperty(const char *key, const char *json_value)
Definition: NGIAgoraExtensionScreenSource.h:182
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::CapturerMode::kScreenCaptureKit
@ kScreenCaptureKit
agora::rtc::IScreenCaptureSource::Control::getMemoryPool
virtual agora::agora_refptr< IVideoFrameMemoryPool > getMemoryPool()=0
agora::commons::LOG_LEVEL
OPTIONAL_ENUM_CLASS LOG_LEVEL
Definition: IAgoraLog.h:33
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::dimensions
agora::rtc::VideoDimensions dimensions
Definition: NGIAgoraExtensionScreenSource.h:69
agora::rtc::ScreenCaptureProfilingStatistics::capture_out_fps
uint32_t capture_out_fps
Definition: NGIAgoraExtensionScreenSource.h:30
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::CapturerMode::kAVFoundation
@ kAVFoundation
agora::rtc::IScreenCaptureSource::AudioCaptureConfig::num_channels
int num_channels
Definition: NGIAgoraExtensionScreenSource.h:63
agora::rtc::IScreenCaptureSource::Control
Definition: NGIAgoraExtensionScreenSource.h:43
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::CapturerMode::kUnspecified
@ kUnspecified
agora::rtc::IScreenCaptureSource::CaptureMode
CaptureMode
Definition: NGIAgoraExtensionScreenSource.h:126
agora::rtc::IScreenCaptureSource::ScreenSourceListOption::include_screen
bool include_screen
Definition: NGIAgoraExtensionScreenSource.h:120
agora::rtc::IScreenCaptureSource::initializeCapture
virtual int initializeCapture(const agora_refptr< Control > &control)=0
agora::rtc::IScreenCaptureSource::Control::printLog
virtual void printLog(commons::LOG_LEVEL level, const char *fromat, va_list)=0
agora::rtc::ScreenCaptureProfilingStatistics::per_frame_cap_time_ms
uint64_t per_frame_cap_time_ms
Definition: NGIAgoraExtensionScreenSource.h:25
agora::rtc::IScreenCaptureSource::ScreenSourceListOption::icon_height
int icon_height
Definition: NGIAgoraExtensionScreenSource.h:119
agora::rtc::ScreenCaptureProfilingStatistics::target_fps
uint32_t target_fps
Definition: NGIAgoraExtensionScreenSource.h:28
agora::rtc::ScreenCaptureProfilingStatistics::capture_mouse_cursor
bool capture_mouse_cursor
Definition: NGIAgoraExtensionScreenSource.h:27
agora::rtc::IScreenCaptureSource::setFrameRate
virtual int setFrameRate(int fps)
Definition: NGIAgoraExtensionScreenSource.h:157
agora::rtc::IScreenCaptureSource::Control::pushVideoFrame
virtual int pushVideoFrame(const agora::agora_refptr< IVideoFrame > &captured_frame)=0
agora::rtc::ScreenCaptureProfilingStatistics::capture_type
int capture_type
Definition: NGIAgoraExtensionScreenSource.h:21
agora::rtc::IScreenCaptureSource::updateCaptureRegion
virtual int updateCaptureRegion(const agora::rtc::Rectangle &captureRegion)
Definition: NGIAgoraExtensionScreenSource.h:164
agora::rtc::IScreenCaptureSource::startAudioCapture
virtual int startAudioCapture(const AudioCaptureConfig &config)
Definition: NGIAgoraExtensionScreenSource.h:148
agora::rtc::IScreenCaptureSource::AudioCaptureConfig::volume
uint32_t volume
Definition: NGIAgoraExtensionScreenSource.h:61
agora::ERR_NOT_SUPPORTED
@ ERR_NOT_SUPPORTED
Definition: AgoraBase.h:481
agora::rtc::IScreenCaptureSource::getVideoCaptureMode
virtual CaptureMode getVideoCaptureMode()=0
agora::rtc::IScreenCaptureSource
Definition: NGIAgoraExtensionScreenSource.h:41
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::audio_channel_count
int audio_channel_count
Definition: NGIAgoraExtensionScreenSource.h:104
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::type
CaptureType type
Definition: NGIAgoraExtensionScreenSource.h:90
agora::rtc::IScreenCaptureSource::stopVideoCapture
virtual int stopVideoCapture()=0
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::rtc::IScreenCaptureSource::ScreenSourceListOption::icon_width
int icon_width
Definition: NGIAgoraExtensionScreenSource.h:118
agora::rtc::IScreenCaptureSource::startVideoCapture
virtual int startVideoCapture(const VideoCaptureConfig &config)=0
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::window_id
view_t window_id
Definition: NGIAgoraExtensionScreenSource.h:94
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1099
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::CaptureType
CaptureType
Definition: NGIAgoraExtensionScreenSource.h:86
agora::rtc::IScreenCaptureSource::getCustomContext
virtual void * getCustomContext(const char *key)
Definition: NGIAgoraExtensionScreenSource.h:197
agora::rtc::IScreenCaptureSource::ScreenSourceListOption::unskip_system_window
bool unskip_system_window
Definition: NGIAgoraExtensionScreenSource.h:122
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::CapturerMode
CapturerMode
Definition: NGIAgoraExtensionScreenSource.h:77
agora::rtc::IScreenCaptureSource::setCustomContext
virtual int setCustomContext(const char *key, const void *context)
Definition: NGIAgoraExtensionScreenSource.h:185
agora::rtc::IScreenCaptureSource::ScreenSourceListOption::thumb_height
int thumb_height
Definition: NGIAgoraExtensionScreenSource.h:117
agora::rtc::IScreenCaptureSource::setScreenCaptureDimensions
virtual int setScreenCaptureDimensions(const agora::rtc::VideoDimensions &dimensions)
Definition: NGIAgoraExtensionScreenSource.h:161
agora::rtc::IScreenCaptureSource::getScreenCaptureSources
virtual void * getScreenCaptureSources(const ScreenSourceListOption &option)
Definition: NGIAgoraExtensionScreenSource.h:200
agora::rtc::IScreenCaptureSource::kPull
@ kPull
Definition: NGIAgoraExtensionScreenSource.h:127
agora::rtc::IScreenCaptureSource::~IScreenCaptureSource
virtual ~IScreenCaptureSource()
Definition: NGIAgoraExtensionScreenSource.h:132
agora::rtc::IScreenCaptureSource::setExcludeWindowList
virtual int setExcludeWindowList(void *const *handles, int count)
Definition: NGIAgoraExtensionScreenSource.h:167
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::captureAudio
bool captureAudio
Definition: NGIAgoraExtensionScreenSource.h:103
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::VideoCaptureConfig
VideoCaptureConfig()
Definition: NGIAgoraExtensionScreenSource.h:71
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::screen_rect
Rectangle screen_rect
Definition: NGIAgoraExtensionScreenSource.h:91
agora::rtc::IScreenCaptureSource::setExternalMediaProjection
virtual int setExternalMediaProjection(void *mediaProjection)
Definition: NGIAgoraExtensionScreenSource.h:209
agora::rtc::IScreenCaptureSource::setFrameCopy
virtual void setFrameCopy(bool frameCopy)
Definition: NGIAgoraExtensionScreenSource.h:203
agora::rtc::IScreenCaptureSource::AudioCaptureConfig::sample_rate_hz
int sample_rate_hz
Definition: NGIAgoraExtensionScreenSource.h:62
agora::rtc::IScreenCaptureSource::setContentType
virtual int setContentType(int contentType)
Definition: NGIAgoraExtensionScreenSource.h:194
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::frameRate
int frameRate
Definition: NGIAgoraExtensionScreenSource.h:70
agora::rtc::IScreenCaptureSource::getScreenDimensions
virtual int getScreenDimensions(int &width, int &height)
Definition: NGIAgoraExtensionScreenSource.h:179
agora::rtc::IScreenCaptureSource::VideoCaptureConfig
Definition: NGIAgoraExtensionScreenSource.h:68
agora::rtc::ScreenCaptureProfilingStatistics::per_capture_cpu_cycles
uint64_t per_capture_cpu_cycles
Definition: NGIAgoraExtensionScreenSource.h:26
rtc
Definition: video_node_i.h:28
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::disable_frame_transparent_check
bool disable_frame_transparent_check
Definition: NGIAgoraExtensionScreenSource.h:108