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