Agora Java API Reference for Android
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 #include <vector>
15 #include <string>
16 #if defined(WEBRTC_IOS)
17 #include <coreVideo/CVPixelBuffer.h>
18 #endif
19 namespace agora {
20 namespace rtc {
21 
23  int capture_type;
24  uint32_t captured_frame_width;
25  uint32_t captured_frame_height;
26  uint32_t total_captured_frames;
27  uint64_t per_frame_cap_time_ms;
28  uint64_t per_capture_cpu_cycles;
29  bool capture_mouse_cursor;
30  uint32_t target_fps;
31  uint32_t real_capture_fps;
32  uint32_t capture_out_fps;
33  uint32_t drop_fps;
34 
36  : capture_type(-1), captured_frame_width(0), captured_frame_height(0),
37  total_captured_frames(0), per_frame_cap_time_ms(0),
38  per_capture_cpu_cycles(0), capture_mouse_cursor(true),
39  target_fps(0), real_capture_fps(0),
40  capture_out_fps(0), drop_fps(0) {}
41 };
42 
44  public:
45  class Control : public RefCountInterface {
46  public:
47  virtual int postEvent(const char* key, const char* value) = 0;
48  virtual void printLog(commons::LOG_LEVEL level, const char* format, ...) = 0;
49  virtual void printLog(commons::LOG_LEVEL level, const char* fromat, va_list) = 0;
50  virtual int pushAudioFrame(const media::IAudioFrameObserver::AudioFrame& captured_frame) = 0;
51  virtual bool timeToPushVideo() = 0;
52  virtual int pushVideoFrame(const agora::agora_refptr<IVideoFrame>& captured_frame) = 0;
53  virtual agora::agora_refptr<IVideoFrameMemoryPool> getMemoryPool() = 0;
54 #if defined(WEBRTC_IOS)
55  virtual int pushVideoFrame(CVPixelBufferRef pixelBuffer, int64_t timestamp_ms, uint32_t rotation) = 0;
56 #endif
57 #if defined(WEBRTC_WIN)
58  virtual void recycleVideoCache() = 0;
59 #endif
60  };
61 
63  uint32_t volume;
64  int sample_rate_hz;
65  int num_channels;
66  AudioCaptureConfig() : volume(0), sample_rate_hz(0), num_channels(0) {}
67  };
68 
69 #if defined (__ANDROID__) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
70  struct VideoCaptureConfig {
71  agora::rtc::VideoDimensions dimensions;
72  int frameRate;
74  : dimensions(640, 360), frameRate(15) {}
75  };
76 #else
78  enum CaptureType {
79  CaptureWindow,
80  CaptureScreen,
81  };
82  CaptureType type;
83  Rectangle screen_rect;
84  Rectangle region_offset;
85  uint32_t display_id;
86  view_t window_id;
87  bool disable_frame_transparent_check;
88 
90  : type(CaptureScreen), screen_rect(), region_offset(), display_id(0), window_id(NULL), disable_frame_transparent_check(false) { }
91  };
92 #endif
93 
95  int thumb_width;
96  int thumb_height;
97  int icon_width;
98  int icon_height;
99  bool include_screen;
100  bool unfiltered;
101  bool unskip_system_window;
102 #if defined(WEBRTC_MAC)
103  std::vector<std::string> skip_empty_title_apps;
104 #endif
105  };
106 
107  enum CaptureMode {
108  kPull, // SDK needs to poll the captured frame actively
109  kPush // Capture source pushes the captured frame to sdk
110  };
111 
112 
113  virtual ~IScreenCaptureSource() {}
114 
115  virtual int initializeCapture(const agora_refptr<Control>& control) = 0;
116 
117  virtual int initVideo(const VideoCaptureConfig& config) = 0;
118  // Start video capture interface for desktop capturing
119  virtual int startVideoCapture(const VideoCaptureConfig& config) = 0;
120  virtual int stopVideoCapture() = 0;
121  virtual int stopVideoCaptureAsync() = 0;
122 
123  virtual CaptureMode getVideoCaptureMode() = 0;
124 
125  // Implementation of the following interfaces are not mandatory
126  virtual int startAudioCapture(const AudioCaptureConfig& config) {
127  return -ERR_NOT_SUPPORTED;
128  }
129  virtual int stopAudioCapture() {
130  return -ERR_NOT_SUPPORTED;
131  }
132  virtual int setAudioVolume(uint32_t volume) {
133  return -ERR_NOT_SUPPORTED;
134  }
135  virtual int setFrameRate(int fps) {
136  return -ERR_NOT_SUPPORTED;
137  }
138 
139  virtual int setScreenCaptureDimensions(const agora::rtc::VideoDimensions& dimensions) {
140  return -ERR_NOT_SUPPORTED;
141  }
142  virtual int updateCaptureRegion(const agora::rtc::Rectangle& captureRegion) {
143  return -ERR_NOT_SUPPORTED;
144  }
145  virtual int setExcludeWindowList(void* const * handles, int count) {
146  return -ERR_NOT_SUPPORTED;
147  }
148  virtual int captureMouseCursor(bool capture) {
149  return -ERR_NOT_SUPPORTED;
150  }
151  virtual int capture(agora::agora_refptr<IVideoFrame>& frame) {
152  return -ERR_NOT_SUPPORTED;
153  }
154  virtual int getProfilingStats(ScreenCaptureProfilingStatistics& stats) {
155  return -ERR_NOT_SUPPORTED;
156  }
157  virtual int getScreenDimensions(int& width, int& height) {
158  return ERR_NOT_SUPPORTED;
159  }
160  virtual int setProperty(const char* key, const char* json_value) {
161  return -ERR_NOT_SUPPORTED;
162  }
163  virtual int setCustomContext(const char* key, const void* context) {
164  return -ERR_NOT_SUPPORTED;
165  }
166  virtual int getProperty(const char* key, char* json_value, int& length) {
167  return -ERR_NOT_SUPPORTED;
168  }
169  virtual int setHighLight(bool isHighLight, unsigned int color, int width) {
170  return -ERR_NOT_SUPPORTED;
171  }
172  virtual int setContentType(int contentType) {
173  return -ERR_NOT_SUPPORTED;
174  }
175  virtual void* getCustomContext(const char* key) {
176  return NULL;
177  }
178  virtual void* getScreenCaptureSources(const ScreenSourceListOption& option) {
179  return NULL;
180  }
181  virtual void setFrameCopy(bool frameCopy) {};
182 #if defined(WEBRTC_ANDROID) && !defined(RTC_EXCLUDE_JAVA)
183  virtual void setSmoothCapture(bool smoothCapture) {};
184  virtual void setResetVitualDisplay(bool reset) {};
185 #endif
186 #if defined(WEBRTC_ANDROID)
187  virtual int setExternalMediaProjection(void* mediaProjection) {
188  return -ERR_NOT_SUPPORTED;
189  }
190 #endif
191 };
192 
193 } // namespace rtc
194 } // namespace agora
agora::rtc::ScreenCaptureProfilingStatistics
Definition: NGIAgoraExtensionScreenSource.h:22
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::rtc::Rectangle
Definition: AgoraBase.h:2145
agora::media::IAudioFrameObserverBase::AudioFrame
Definition: AgoraMediaBase.h:988
agora::rtc::IScreenCaptureSource::ScreenSourceListOption
Definition: NGIAgoraExtensionScreenSource.h:94
agora::rtc::IScreenCaptureSource::AudioCaptureConfig
Definition: NGIAgoraExtensionScreenSource.h:62
agora::rtc::IScreenCaptureSource::Control
Definition: NGIAgoraExtensionScreenSource.h:45
agora::rtc::IScreenCaptureSource
Definition: NGIAgoraExtensionScreenSource.h:43
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1081
agora::rtc::IScreenCaptureSource::VideoCaptureConfig
Definition: NGIAgoraExtensionScreenSource.h:77