Agora Java API Reference for Android
video_node_i.h
1 //
2 // Agora Media SDK
3 //
4 // Created by Sting Feng in 2015-05.
5 // Copyright (c) 2015 Agora IO. All rights reserved.
6 //
7 #pragma once
8 
9 #include <memory>
10 #include <string>
11 #include <vector>
12 
13 #include "AgoraRefPtr.h"
14 
15 #include "NGIAgoraCameraCapturer.h"
16 #include "NGIAgoraVideoMixerSource.h"
17 #include "NGIAgoraScreenCapturer.h"
18 #include "NGIAgoraMediaNodeFactory.h"
19 #include "NGIAgoraMediaNode.h"
20 #include "modules/desktop_capture/desktop_capturer.h"
21 
22 namespace webrtc {
23 class VideoFrame;
24 } // namespace webrtc
25 
26 namespace rtc {
27 struct VideoSinkWants;
28 
29 template <typename VideoFrameT>
31 } // namespace rtc
32 
33 namespace agora {
34 namespace rtc {
35 
36 enum InternalRendererType {
37  RENDERER_NONE = -1,
38  RENDERER_BUILT_IN_RENDERER = 0,
39  RENDERER_EXT_OBSERVER = 3,
40 };
41 
43  uintptr_t handle;
44  bool mirror;
45  media::base::RENDER_MODE_TYPE render_mode;
46 };
47 
48 static const char* const BUILT_IN_ADAPTER = "built-in-adapter";
49 static const char* const BUILT_IN_MIRROR_FILTER = "built-in-mirror";
50 static const char* const BUILT_IN_WATERMARK_FILTER = "built-in-watermarker";
51 static const char* const BUILT_IN_ROTATOR = "built-in-rotator";
52 static const char* const BUILT_IN_PREVIEW_TEE = "built-in-preview-tee";
53 static const char* const BUILT_IN_MAJOR_TEE = "built-in-major-tee";
54 static const char* const BUILT_IN_MINOR_TEE = "built-in-minor-tee";
55 static const char* const BUILT_IN_MINOR_ADAPTER = "built-in-minor-adapter";
56 
59 class IVideoFilterEx : public IVideoFilter {
60  public:
62  // Internal node can use webrtc video frame directly to reduce copy operation.
63  virtual bool adaptVideoFrame(const webrtc::VideoFrame& capturedFrame,
64  webrtc::VideoFrame& adaptedFrame) = 0;
65  // TODO(Bob): This should be moved to node base.
66  virtual void onSinkWantsChanged(const ::rtc::VideoSinkWants& wants) = 0;
67  bool isExternal() override { return false; }
68  virtual void attachStatsSpace(uint64_t stats_space) {}
69 
70  protected:
71  ~IVideoFilterEx() {}
72 };
73 
77  public:
78  // Requests the output frame size and frame interval from
79  // |AdaptFrameResolution| to not be larger than |format|. Also, the input
80  // frame size will be cropped to match the requested aspect ratio. When "fixed"
81  // is set false, the requested aspect ratio is orientation agnostic
82  // and will be adjusted to maintain the input orientation, so it doesn't matter
83  // if e.g. 1280x720 or 720x1280 is requested. Otherwise, the output format is
84  // fixed. The input frame may be cropped and rotated to meet the output format.
85  virtual void setOutputFormat(const VideoFormat& format, bool fixed = false) = 0;
86 
87  protected:
88  ~IVideoFrameAdapter() {}
89 };
90 
91 enum CAMERA_OUTPUT_DATA_TYPE {
92  CAMERA_OUTPUT_RAW = 0, // YUV
93  CAMERA_OUTPUT_TEXTURE = 1, // Texture
94  CAMERA_OUTPUT_TEXTURE_AND_RAW = 2, // YUV && Texture
95 };
96 
98  public:
99  virtual ~ICameraCapturerEx() {}
100 
101  virtual void setCameraOutputDataType(CAMERA_OUTPUT_DATA_TYPE type) {
102  (void) type;
103  }
104 #if defined(__ANDROID__) || defined(TARGET_OS_IPHONE)
105  virtual void setPreviewInfo(const PreviewMetaInfo& info) {}
106 #endif
107 
108 #if defined(__ANDROID__)
109  virtual CAMERA_OUTPUT_DATA_TYPE getCameraOutputDataType() = 0;
110  virtual void setCameraSelected(int android_camera_module_selected) = 0;
111  virtual void setCameraPqFirst(bool pq_first) = 0;
112 #endif
113 };
114 
116  public:
117  virtual ~IScreenCapturerEx() {}
118  virtual int StartCapture() = 0;
119  virtual int StopCapture() = 0;
120  virtual void SetFrameRate(int rate) = 0;
121  virtual void RegisterCaptureDataCallback(
122  std::weak_ptr<::rtc::VideoSinkInterface<webrtc::VideoFrame>> dataCallback) = 0;
123  virtual int CaptureMouseCursor(bool capture) = 0;
124  virtual int GetScreenDimensions(VideoDimensions& dimension) = 0;
125  virtual bool FocusOnSelectedSource() = 0;
126 #if defined(_WIN32)
127  virtual int InitUsingLastRegionSetting() = 0;
128  virtual int InitUsingLastScreenSetting(const rtc::Rectangle& regionRect) = 0;
129  virtual void SetCaptureSource(bool allow_magnification_api, bool allow_directx_capturer) = 0;
130  virtual void GetCaptureSource(bool& allow_magnification_api, bool& allow_directx_capturer) = 0;
131  virtual void ForcedUsingScreenCapture(bool using_screen_capture) = 0;
132  virtual void SetExcludeWindowList(const std::vector<void *>& window_list) = 0;
133  virtual webrtc::DesktopCapturer::SourceId GetSourceId() = 0;
134  virtual int GetCaptureType() = 0;
135 #endif
136 };
137 
139  public:
141  virtual int onFrame(const webrtc::VideoFrame& videoFrame) = 0;
142 
143  virtual bool applyMirror() { return false; }
144 
145  virtual bool applyRotation() { return false; }
146 
147  virtual int setViewEx(uintptr_t handle) {
148  (void) handle;
149  return 0;
150  }
151 
152  virtual void attachUserInfo(uid_t uid, uint64_t state_space) {
153  (void) uid;
154  (void) state_space;
155  }
156 
157  virtual int getViewMetaInfo(PreviewMetaInfo& info) {
158  return -ERR_NOT_SUPPORTED;
159  }
160 };
161 
163  std::string image;
164  VIDEO_FRAME_TYPE frameType;
165  int width;
166  int height;
167  int framesPerSecond;
168  // int64_t renderTimeInMs;
169  VIDEO_ORIENTATION rotation;
170  VIDEO_CODEC_TYPE codec;
171  VIDEO_STREAM_TYPE streamType;
172 };
173 
175  public:
176  virtual ~IVideoEncodedImageCallback() {}
177  virtual void OnVideoEncodedImage(agora_refptr<VideoEncodedImageData> data) = 0;
178 };
179 
181  public:
182  virtual ~IVideoEncodedImageSenderEx() {}
183  virtual void RegisterEncodedImageCallback(IVideoEncodedImageCallback* dataCallback) = 0;
184  virtual void DeRegisterEncodedImageCallback() = 0;
185  virtual int getWidth() const =0;
186  virtual int getHeight() const =0;
187 };
188 
190  public:
192 
193  virtual ~IVideoFrameSenderEx() {}
194 
195  virtual int sendVideoFrame(const webrtc::VideoFrame& videoFrame) = 0;
196 
197  virtual void RegisterVideoFrameCallback(
198  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
199  virtual void DeRegisterVideoFrameCallback() = 0;
200 };
201 
203  public:
204  virtual ~IVideoMixerSourceEx() = default;
205  virtual void registerMixedFrameCallback(
206  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
207  virtual void deRegisterMixedFrameCallback(::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
208  virtual void onFrame(const std::string& uid, const webrtc::VideoFrame& frame) = 0;
209  virtual void startMixing() = 0;
210  virtual void stopMixing() = 0;
211 };
212 
214  public:
215  virtual int onFrame(const webrtc::VideoFrame& videoFrame) = 0;
216  virtual void registerFrameCallback(
217  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
218  virtual void deRegisterFrameCallback(::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
219  virtual void observeTxDelay(ILocalVideoTrack* track) = 0;
220 };
221 
222 } // namespace rtc
223 } // namespace agora
agora::rtc::IVideoEncodedImageSenderEx
Definition: video_node_i.h:180
agora::rtc::IVideoFrameSender::sendVideoFrame
virtual int sendVideoFrame(const media::base::ExternalVideoFrame &videoFrame)=0
agora::rtc::IVideoFrameAdapter
Definition: video_node_i.h:76
agora::rtc::IVideoFilterBase::adaptVideoFrame
virtual bool adaptVideoFrame(const media::base::VideoFrame &capturedFrame, media::base::VideoFrame &adaptedFrame)=0
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::rtc::IVideoFrameTransceiver
Definition: NGIAgoraMediaNode.h:592
agora::rtc::Rectangle
Definition: AgoraBase.h:1962
agora::rtc::IVideoEncodedImageSender
Definition: NGIAgoraMediaNode.h:450
agora::rtc::IVideoMixerSourceEx
Definition: video_node_i.h:202
agora::rtc::VideoFormat
Definition: AgoraBase.h:2435
agora::rtc::IScreenCapturer
Definition: NGIAgoraScreenCapturer.h:18
agora::rtc::ICameraCapturer
Definition: NGIAgoraCameraCapturer.h:19
agora::rtc::ILocalVideoTrack
Definition: NGIAgoraVideoTrack.h:234
agora::rtc::IVideoFrameSenderEx
Definition: video_node_i.h:189
agora::rtc::IVideoFrameTransceiverEx
Definition: video_node_i.h:213
agora::rtc::IVideoMixerSource
Definition: NGIAgoraVideoMixerSource.h:44
agora::rtc::IVideoSinkBase::onFrame
virtual int onFrame(const media::base::VideoFrame &videoFrame)=0
agora::rtc::IVideoRenderer
Definition: NGIAgoraMediaNode.h:549
agora::rtc::PreviewMetaInfo
Definition: video_node_i.h:42
agora::rtc::IVideoEncodedImageCallback
Definition: video_node_i.h:174
agora::rtc::IVideoFrameSender
Definition: NGIAgoraMediaNode.h:426
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::rtc::IScreenCapturerEx
Definition: video_node_i.h:115
agora::rtc::IVideoFilterEx::isExternal
bool isExternal() override
Definition: video_node_i.h:67
agora::rtc::IVideoRendererEx
Definition: video_node_i.h:138
agora::rtc::IVideoFilterEx
Definition: video_node_i.h:59
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1381
agora::rtc::ICameraCapturerEx
Definition: video_node_i.h:97
agora::rtc::VideoEncodedImageData
Definition: video_node_i.h:162
rtc::VideoSinkInterface
Definition: video_node_i.h:30
agora::rtc::IVideoFilter
Definition: NGIAgoraMediaNode.h:115