Agora RTC Objective-C API Reference  Refactor
NGIAgoraExtensionScreenSource.h
Go to the documentation of this file.
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 namespace agora {
15 namespace rtc {
16 
25 
30 };
31 
33  public:
34  class Control : public RefCountInterface {
35  public:
36  virtual int postEvent(const char* key, const char* value) = 0;
37  virtual void printLog(commons::LOG_LEVEL level, const char* format, ...) = 0;
38  virtual int pushAudioFrame(const media::IAudioFrameObserver::AudioFrame& captured_frame) = 0;
39  virtual bool timeToPushVideo() = 0;
40  virtual int pushVideoFrame(const agora::agora_refptr<IVideoFrame>& captured_frame) = 0;
42  };
43 
45  uint32_t volume;
49  };
50 
51 #if defined (__ANDROID__) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
55  : dimensions(640, 360) {}
56  };
57 #else
58  struct VideoCaptureConfig {
59  enum CaptureType {
60  CaptureWindow,
61  CaptureScreen,
62  };
63  CaptureType type;
64  Rectangle screen_rect;
65  Rectangle region_offset;
66  uint32_t display_id;
67  view_t window_id;
68 
70  : type(CaptureScreen), screen_rect(), region_offset(), display_id(0), window_id(NULL) { }
71  };
72 #endif
73  enum CaptureMode {
74  kPull, // SDK needs to poll the captured frame actively
75  kPush // Capture source pushes the captured frame to sdk
76  };
77  #if defined(_WIN32)
78  enum VideoContentSubType {
79  UNSPECIFIED = 0, // if camera, trade as camera; if share trade as document
80  SHARE_DOCUMENT = 1,
81  SHARE_GAMING = 2,
82  SHARE_VIDEO = 3,
83  SHARE_RDC = 4, // remote desktop control
84  SHARE_HFHD = 5, // high frame-rate high definition screen share
85  MAX = 16,
86 };
87 #endif
88 
89 
90  virtual ~IScreenCaptureSource() {}
91 
92  virtual int initializeCapture(const agora_refptr<Control>& control) = 0;
93 
94  // Start video capture interface for desktop capturing
95  virtual int startVideoCapture(const VideoCaptureConfig& config) = 0;
96  virtual int stopVideoCapture() = 0;
97 
99 
100  // Implementation of the following interfaces are not mandatory
101  virtual int startAudioCapture(const AudioCaptureConfig& config) {
102  return -ERR_NOT_SUPPORTED;
103  }
104  virtual int stopAudioCapture() {
105  return -ERR_NOT_SUPPORTED;
106  }
107  virtual int setAudioVolume(uint32_t volume) {
108  return -ERR_NOT_SUPPORTED;
109  }
110  virtual int setFrameRate(int fps) {
111  return -ERR_NOT_SUPPORTED;
112  }
114  return -ERR_NOT_SUPPORTED;
115  }
116  virtual int updateCaptureRegion(const agora::rtc::Rectangle& captureRegion) {
117  return -ERR_NOT_SUPPORTED;
118  }
119  virtual int setExcludeWindowList(void* const * handles, int count) {
120  return -ERR_NOT_SUPPORTED;
121  }
122  virtual int captureMouseCursor(bool capture) {
123  return -ERR_NOT_SUPPORTED;
124  }
126  return -ERR_NOT_SUPPORTED;
127  }
129  return -ERR_NOT_SUPPORTED;
130  }
131  virtual int getScreenDimensions(int& width, int& height) {
132  return ERR_NOT_SUPPORTED;
133  }
134  virtual int setProperty(const char* key, const char* json_value) {
135  return -ERR_NOT_SUPPORTED;
136  }
137  virtual int setCustomContext(const char* key, const void* context) {
138  return -ERR_NOT_SUPPORTED;
139  }
140  virtual int getProperty(const char* key, char* json_value, int& length) {
141  return -ERR_NOT_SUPPORTED;
142  }
143  virtual int setHighLight(bool isHighLight, unsigned int color, int width) {
144  return -ERR_NOT_SUPPORTED;
145  }
146  virtual void* getCustomContext(const char* key) {
147  return NULL;
148  }
149  virtual void* getScreenCaptureSources(int thumb_cx, int thumb_cy, int icon_cx, int icon_cy,
150  bool include_screen) {
151  return NULL;
152  }
153 #if defined(_WIN32)
154  virtual int SetContentType(VideoContentSubType type) {
155  return -ERR_NOT_SUPPORTED;
156  }
157 #endif
158 };
159 
160 } // namespace rtc
161 } // namespace agora
agora::rtc::IScreenCaptureSource::updateCaptureRegion
virtual int updateCaptureRegion(const agora::rtc::Rectangle &captureRegion)
Definition: NGIAgoraExtensionScreenSource.h:116
agora::rtc::IScreenCaptureSource::getProfilingStats
virtual int getProfilingStats(ScreenCaptureProfilingStatistics &stats)
Definition: NGIAgoraExtensionScreenSource.h:128
agora::rtc::ScreenCaptureProfilingStatistics
Definition: NGIAgoraExtensionScreenSource.h:17
agora::rtc::IScreenCaptureSource::startVideoCapture
virtual int startVideoCapture(const VideoCaptureConfig &config)=0
agora::rtc::ScreenCaptureProfilingStatistics::captured_frame_height
uint32_t captured_frame_height
Definition: NGIAgoraExtensionScreenSource.h:20
AgoraBase.h
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::rtc::IScreenCaptureSource::stopVideoCapture
virtual int stopVideoCapture()=0
agora::rtc::ScreenCaptureProfilingStatistics::per_frame_cap_time_ms
uint64_t per_frame_cap_time_ms
Definition: NGIAgoraExtensionScreenSource.h:22
agora::rtc::IScreenCaptureSource::setHighLight
virtual int setHighLight(bool isHighLight, unsigned int color, int width)
Definition: NGIAgoraExtensionScreenSource.h:143
agora::rtc::IScreenCaptureSource::kPull
@ kPull
Definition: NGIAgoraExtensionScreenSource.h:74
agora::rtc::IScreenCaptureSource::Control::postEvent
virtual int postEvent(const char *key, const char *value)=0
agora::rtc::ScreenCaptureProfilingStatistics::captured_frame_width
uint32_t captured_frame_width
Definition: NGIAgoraExtensionScreenSource.h:19
agora::rtc::IScreenCaptureSource::getScreenCaptureSources
virtual void * getScreenCaptureSources(int thumb_cx, int thumb_cy, int icon_cx, int icon_cy, bool include_screen)
Definition: NGIAgoraExtensionScreenSource.h:149
agora::rtc::Rectangle
Definition: AgoraBase.h:1931
agora::media::IAudioFrameObserverBase::AudioFrame
Definition: AgoraMediaBase.h:805
agora::view_t
void * view_t
Definition: AgoraBase.h:800
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::dimensions
agora::rtc::VideoDimensions dimensions
Definition: NGIAgoraExtensionScreenSource.h:53
agora::rtc::IScreenCaptureSource::getVideoCaptureMode
virtual CaptureMode getVideoCaptureMode()=0
agora::rtc::IScreenCaptureSource::AudioCaptureConfig::AudioCaptureConfig
AudioCaptureConfig()
Definition: NGIAgoraExtensionScreenSource.h:48
agora::rtc::IScreenCaptureSource::Control::printLog
virtual void printLog(commons::LOG_LEVEL level, const char *format,...)=0
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::ScreenCaptureProfilingStatistics::ScreenCaptureProfilingStatistics
ScreenCaptureProfilingStatistics()
Definition: NGIAgoraExtensionScreenSource.h:26
agora::rtc::IScreenCaptureSource::AudioCaptureConfig
Definition: NGIAgoraExtensionScreenSource.h:44
agora::rtc::IScreenCaptureSource::setCustomContext
virtual int setCustomContext(const char *key, const void *context)
Definition: NGIAgoraExtensionScreenSource.h:137
agora::rtc::IScreenCaptureSource::AudioCaptureConfig::volume
uint32_t volume
Definition: NGIAgoraExtensionScreenSource.h:45
NGIAgoraVideoFrame.h
agora::rtc::IScreenCaptureSource::AudioCaptureConfig::num_channels
int num_channels
Definition: NGIAgoraExtensionScreenSource.h:47
agora::commons::LOG_LEVEL
OPTIONAL_ENUM_CLASS LOG_LEVEL
Definition: IAgoraLog.h:33
agora::rtc::IScreenCaptureSource::Control::getMemoryPool
virtual agora::agora_refptr< IVideoFrameMemoryPool > getMemoryPool()=0
agora::rtc::IScreenCaptureSource::initializeCapture
virtual int initializeCapture(const agora_refptr< Control > &control)=0
agora::rtc::IScreenCaptureSource::capture
virtual int capture(agora::agora_refptr< IVideoFrame > &frame)
Definition: NGIAgoraExtensionScreenSource.h:125
agora::rtc::IScreenCaptureSource::setAudioVolume
virtual int setAudioVolume(uint32_t volume)
Definition: NGIAgoraExtensionScreenSource.h:107
agora::rtc::IScreenCaptureSource::setProperty
virtual int setProperty(const char *key, const char *json_value)
Definition: NGIAgoraExtensionScreenSource.h:134
agora::rtc::IScreenCaptureSource::Control
Definition: NGIAgoraExtensionScreenSource.h:34
agora::rtc::IScreenCaptureSource::VideoCaptureConfig::VideoCaptureConfig
VideoCaptureConfig()
Definition: NGIAgoraExtensionScreenSource.h:54
agora::rtc::IScreenCaptureSource::kPush
@ kPush
Definition: NGIAgoraExtensionScreenSource.h:75
IAgoraLog.h
agora::rtc::IScreenCaptureSource::setScreenCaptureDimensions
virtual int setScreenCaptureDimensions(const agora::rtc::VideoDimensions &dimensions)
Definition: NGIAgoraExtensionScreenSource.h:113
agora::rtc::IScreenCaptureSource::getScreenDimensions
virtual int getScreenDimensions(int &width, int &height)
Definition: NGIAgoraExtensionScreenSource.h:131
agora::rtc::IScreenCaptureSource::Control::pushVideoFrame
virtual int pushVideoFrame(const agora::agora_refptr< IVideoFrame > &captured_frame)=0
AgoraRefPtr.h
agora::rtc::IScreenCaptureSource::AudioCaptureConfig::sample_rate_hz
int sample_rate_hz
Definition: NGIAgoraExtensionScreenSource.h:46
agora::rtc::IScreenCaptureSource::getCustomContext
virtual void * getCustomContext(const char *key)
Definition: NGIAgoraExtensionScreenSource.h:146
AgoraMediaBase.h
agora::rtc::IScreenCaptureSource
Definition: NGIAgoraExtensionScreenSource.h:32
agora::rtc::IScreenCaptureSource::stopAudioCapture
virtual int stopAudioCapture()
Definition: NGIAgoraExtensionScreenSource.h:104
agora::rtc::ScreenCaptureProfilingStatistics::total_captured_frames
uint32_t total_captured_frames
Definition: NGIAgoraExtensionScreenSource.h:21
agora::rtc::ScreenCaptureProfilingStatistics::per_capture_cpu_cycles
uint64_t per_capture_cpu_cycles
Definition: NGIAgoraExtensionScreenSource.h:23
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::rtc::IScreenCaptureSource::getProperty
virtual int getProperty(const char *key, char *json_value, int &length)
Definition: NGIAgoraExtensionScreenSource.h:140
agora::rtc::IScreenCaptureSource::setFrameRate
virtual int setFrameRate(int fps)
Definition: NGIAgoraExtensionScreenSource.h:110
agora::rtc::IScreenCaptureSource::CaptureMode
CaptureMode
Definition: NGIAgoraExtensionScreenSource.h:73
agora::rtc::IScreenCaptureSource::startAudioCapture
virtual int startAudioCapture(const AudioCaptureConfig &config)
Definition: NGIAgoraExtensionScreenSource.h:101
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1080
agora::rtc::ScreenCaptureProfilingStatistics::capture_type
int capture_type
Definition: NGIAgoraExtensionScreenSource.h:18
agora::rtc::ScreenCaptureProfilingStatistics::capture_mouse_cursor
bool capture_mouse_cursor
Definition: NGIAgoraExtensionScreenSource.h:24
agora::rtc::IScreenCaptureSource::Control::timeToPushVideo
virtual bool timeToPushVideo()=0
agora::rtc::IScreenCaptureSource::~IScreenCaptureSource
virtual ~IScreenCaptureSource()
Definition: NGIAgoraExtensionScreenSource.h:90
agora::rtc::IScreenCaptureSource::Control::pushAudioFrame
virtual int pushAudioFrame(const media::IAudioFrameObserver::AudioFrame &captured_frame)=0
agora::ERR_NOT_SUPPORTED
@ ERR_NOT_SUPPORTED
Definition: AgoraBase.h:474
agora::rtc::IScreenCaptureSource::VideoCaptureConfig
Definition: NGIAgoraExtensionScreenSource.h:52
agora::rtc::IScreenCaptureSource::setExcludeWindowList
virtual int setExcludeWindowList(void *const *handles, int count)
Definition: NGIAgoraExtensionScreenSource.h:119
agora::rtc::IScreenCaptureSource::captureMouseCursor
virtual int captureMouseCursor(bool capture)
Definition: NGIAgoraExtensionScreenSource.h:122