Agora C++ API Reference for All Platforms
Loading...
Searching...
No Matches
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
17namespace agora {
18namespace rtc {
19
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
66
67#if defined (__ANDROID__) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || defined(__OHOS__)
74#else
75 struct VideoCaptureConfig {
76 #if !defined(__linux__)
77 enum class CapturerMode {
79 // Mac only
83 };
84 #endif
85
93 int64_t display_id;
95
97
98 // Mac only
101#if !defined(__linux__)
103
104 bool captureAudio = false;
106 int audio_sample_rate = 48000;
108#endif
109
112 };
113#endif
114
125
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 }
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
Definition AgoraRefPtr.h:31
Definition AgoraRefPtr.h:44
Definition NGIAgoraExtensionScreenSource.h:43
virtual int pushVideoFrame(CVPixelBufferRef pixelBuffer, int64_t timestamp_ms, uint32_t rotation)=0
virtual agora::agora_refptr< IVideoFrameMemoryPool > getMemoryPool()=0
virtual void printLog(commons::LOG_LEVEL level, const char *fromat, va_list)=0
virtual int postEvent(const char *key, const char *value)=0
virtual void printLog(commons::LOG_LEVEL level, const char *format,...)=0
virtual int pushAudioFrame(const media::IAudioFrameObserver::AudioFrame &captured_frame)=0
virtual int pushVideoFrame(const agora::agora_refptr< IVideoFrame > &captured_frame)=0
Definition NGIAgoraExtensionScreenSource.h:41
virtual int setExternalMediaProjection(void *mediaProjection)
Definition NGIAgoraExtensionScreenSource.h:209
virtual ~IScreenCaptureSource()
Definition NGIAgoraExtensionScreenSource.h:132
virtual int setProperty(const char *key, const char *json_value)
Definition NGIAgoraExtensionScreenSource.h:182
virtual void setResetVitualDisplay(bool reset)
Definition NGIAgoraExtensionScreenSource.h:206
virtual int stopVideoCaptureAsync()=0
virtual int initVideo(const VideoCaptureConfig &config)=0
virtual int startAudioCapture(const AudioCaptureConfig &config)
Definition NGIAgoraExtensionScreenSource.h:148
virtual int getProperty(const char *key, char *json_value, int &length)
Definition NGIAgoraExtensionScreenSource.h:188
virtual int updateCaptureRegion(const agora::rtc::Rectangle &captureRegion)
Definition NGIAgoraExtensionScreenSource.h:164
virtual int capture(agora::agora_refptr< IVideoFrame > &frame)
Definition NGIAgoraExtensionScreenSource.h:173
CaptureMode
Definition NGIAgoraExtensionScreenSource.h:126
@ kPush
Definition NGIAgoraExtensionScreenSource.h:128
@ kPull
Definition NGIAgoraExtensionScreenSource.h:127
virtual int getScreenDimensions(int &width, int &height)
Definition NGIAgoraExtensionScreenSource.h:179
virtual CaptureMode getVideoCaptureMode()=0
virtual int captureMouseCursor(bool capture)
Definition NGIAgoraExtensionScreenSource.h:170
virtual int setAudioVolume(uint32_t volume)
Definition NGIAgoraExtensionScreenSource.h:154
virtual int stopAudioCapture()
Definition NGIAgoraExtensionScreenSource.h:151
virtual bool isAudioCaptureSupported()
Definition NGIAgoraExtensionScreenSource.h:145
virtual void setFrameCopy(bool frameCopy)
Definition NGIAgoraExtensionScreenSource.h:203
virtual void setSmoothCapture(bool smoothCapture)
Definition NGIAgoraExtensionScreenSource.h:205
virtual int setContentType(int contentType)
Definition NGIAgoraExtensionScreenSource.h:194
virtual int getProfilingStats(ScreenCaptureProfilingStatistics &stats)
Definition NGIAgoraExtensionScreenSource.h:176
virtual int setHighLight(bool isHighLight, unsigned int color, int width)
Definition NGIAgoraExtensionScreenSource.h:191
virtual int startVideoCapture(const VideoCaptureConfig &config)=0
virtual int setCustomContext(const char *key, const void *context)
Definition NGIAgoraExtensionScreenSource.h:185
virtual int setScreenCaptureDimensions(const agora::rtc::VideoDimensions &dimensions)
Definition NGIAgoraExtensionScreenSource.h:161
virtual int setFrameRate(int fps)
Definition NGIAgoraExtensionScreenSource.h:157
virtual void * getScreenCaptureSources(const ScreenSourceListOption &option)
Definition NGIAgoraExtensionScreenSource.h:200
virtual int initializeCapture(const agora_refptr< Control > &control)=0
virtual void * getCustomContext(const char *key)
Definition NGIAgoraExtensionScreenSource.h:197
virtual int setExcludeWindowList(void *const *handles, int count)
Definition NGIAgoraExtensionScreenSource.h:167
OPTIONAL_ENUM_CLASS LOG_LEVEL
The output log level of the SDK.
Definition IAgoraLog.h:33
Definition AgoraExtensions.h:5
Definition AgoraAtomicOps.h:21
void * view_t
Definition AgoraBase.h:850
@ ERR_NOT_SUPPORTED
Definition AgoraBase.h:488
Raw audio data.
Definition AgoraMediaBase.h:1429
Definition NGIAgoraExtensionScreenSource.h:60
int num_channels
Definition NGIAgoraExtensionScreenSource.h:63
AudioCaptureConfig()
Definition NGIAgoraExtensionScreenSource.h:64
int sample_rate_hz
Definition NGIAgoraExtensionScreenSource.h:62
uint32_t volume
Definition NGIAgoraExtensionScreenSource.h:61
Definition NGIAgoraExtensionScreenSource.h:115
bool ignore_unresponsive
Definition NGIAgoraExtensionScreenSource.h:123
int icon_width
Definition NGIAgoraExtensionScreenSource.h:118
int icon_height
Definition NGIAgoraExtensionScreenSource.h:119
bool unskip_system_window
Definition NGIAgoraExtensionScreenSource.h:122
bool unfiltered
Definition NGIAgoraExtensionScreenSource.h:121
bool include_screen
Definition NGIAgoraExtensionScreenSource.h:120
int thumb_height
Definition NGIAgoraExtensionScreenSource.h:117
int thumb_width
Definition NGIAgoraExtensionScreenSource.h:116
Definition NGIAgoraExtensionScreenSource.h:68
int frameRate
Definition NGIAgoraExtensionScreenSource.h:70
bool disable_avf
Definition NGIAgoraExtensionScreenSource.h:99
CapturerMode
Definition NGIAgoraExtensionScreenSource.h:77
@ kScreenCaptureKit
Definition NGIAgoraExtensionScreenSource.h:80
@ kUnspecified
Definition NGIAgoraExtensionScreenSource.h:78
@ kAVFoundation
Definition NGIAgoraExtensionScreenSource.h:82
@ kCoreGraphic
Definition NGIAgoraExtensionScreenSource.h:81
Rectangle region_offset
Definition NGIAgoraExtensionScreenSource.h:92
int64_t display_id
Definition NGIAgoraExtensionScreenSource.h:93
view_t window_id
Definition NGIAgoraExtensionScreenSource.h:94
bool captureAudio
Definition NGIAgoraExtensionScreenSource.h:104
VideoCaptureConfig()
Definition NGIAgoraExtensionScreenSource.h:71
int audio_sample_rate
Definition NGIAgoraExtensionScreenSource.h:106
CaptureType
Definition NGIAgoraExtensionScreenSource.h:86
@ CaptureScreen
Definition NGIAgoraExtensionScreenSource.h:88
@ CaptureWindow
Definition NGIAgoraExtensionScreenSource.h:87
bool window_focused
Definition NGIAgoraExtensionScreenSource.h:96
int audio_channel_count
Definition NGIAgoraExtensionScreenSource.h:105
bool disable_frame_transparent_check
Definition NGIAgoraExtensionScreenSource.h:100
CapturerMode capturerMode
Definition NGIAgoraExtensionScreenSource.h:102
bool excludeCurrentProcessAudio
Definition NGIAgoraExtensionScreenSource.h:107
Rectangle screen_rect
Definition NGIAgoraExtensionScreenSource.h:91
CaptureType type
Definition NGIAgoraExtensionScreenSource.h:90
agora::rtc::VideoDimensions dimensions
Definition NGIAgoraExtensionScreenSource.h:69
The location of the target area relative to the screen or window. If you do not set this parameter,...
Definition AgoraBase.h:2342
Definition NGIAgoraExtensionScreenSource.h:20
uint32_t real_capture_fps
Definition NGIAgoraExtensionScreenSource.h:29
int capture_type
Definition NGIAgoraExtensionScreenSource.h:21
uint64_t per_frame_cap_time_ms
Definition NGIAgoraExtensionScreenSource.h:25
uint32_t captured_frame_width
Definition NGIAgoraExtensionScreenSource.h:22
bool capture_mouse_cursor
Definition NGIAgoraExtensionScreenSource.h:27
uint32_t target_fps
Definition NGIAgoraExtensionScreenSource.h:28
ScreenCaptureProfilingStatistics()
Definition NGIAgoraExtensionScreenSource.h:33
uint32_t captured_frame_height
Definition NGIAgoraExtensionScreenSource.h:23
uint32_t capture_out_fps
Definition NGIAgoraExtensionScreenSource.h:30
uint32_t drop_fps
Definition NGIAgoraExtensionScreenSource.h:31
uint32_t total_captured_frames
Definition NGIAgoraExtensionScreenSource.h:24
uint64_t per_capture_cpu_cycles
Definition NGIAgoraExtensionScreenSource.h:26
The video dimension.
Definition AgoraBase.h:1166