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 
12 #include "AgoraRefPtr.h"
13 
14 #include "NGIAgoraCameraCapturer.h"
15 #include "NGIAgoraVideoMixerSource.h"
16 #include "NGIAgoraScreenCapturer.h"
17 #include "NGIAgoraMediaNodeFactory.h"
18 
19 namespace webrtc {
20 class VideoFrame;
21 } // namespace webrtc
22 
23 namespace rtc {
24 struct VideoSinkWants;
25 
26 template <typename VideoFrameT>
28 } // namespace rtc
29 
30 namespace agora {
31 namespace rtc {
32 
33 static const char* const BUILT_IN_ADAPTER = "built-in-adapter";
34 static const char* const BUILT_IN_MIRROR_FILTER = "built-in-mirror";
35 static const char* const BUILT_IN_WATERMARK_FILTER = "built-in-watermarker";
36 static const char* const BUILT_IN_ROTATOR = "built-in-rotator";
37 static const char* const BUILT_IN_PREVIEW_TEE = "built-in-preview-tee";
38 static const char* const BUILT_IN_MAJOR_TEE = "built-in-major-tee";
39 static const char* const BUILT_IN_MINOR_TEE = "built-in-minor-tee";
40 static const char* const BUILT_IN_MINOR_ADAPTER = "built-in-minor-adapter";
41 
44 class IVideoFilterEx : public IVideoFilter {
45  public:
47  // Internal node can use webrtc video frame directly to reduce copy operation.
48  virtual bool adaptVideoFrame(const webrtc::VideoFrame& capturedFrame,
49  webrtc::VideoFrame& adaptedFrame) = 0;
50  // TODO(Bob): This should be moved to node base.
51  virtual void onSinkWantsChanged(const ::rtc::VideoSinkWants& wants) = 0;
52  bool isExternal() override { return false; }
53  virtual void attachStatsSpace(uint64_t stats_space) {}
54 
55  protected:
56  ~IVideoFilterEx() {}
57 };
58 
62  public:
63  // Requests the output frame size and frame interval from
64  // |AdaptFrameResolution| to not be larger than |format|. Also, the input
65  // frame size will be cropped to match the requested aspect ratio. When "fixed"
66  // is set false, the requested aspect ratio is orientation agnostic
67  // and will be adjusted to maintain the input orientation, so it doesn't matter
68  // if e.g. 1280x720 or 720x1280 is requested. Otherwise, the output format is
69  // fixed. The input frame may be cropped and rotated to meet the output format.
70  virtual void setOutputFormat(const VideoFormat& format, bool fixed = false) = 0;
71 
72  protected:
73  ~IVideoFrameAdapter() {}
74 };
75 
77  public:
78  virtual ~ICameraCapturerEx() {}
79 
80 #if defined(__ANDROID__)
81  virtual void setUseTexture(bool use_texture) = 0;
82 #endif
83 };
84 
86  public:
87  virtual ~IScreenCapturerEx() {}
88  virtual int StartCapture() = 0;
89  virtual int StopCapture() = 0;
90  virtual void SetFrameRate(int rate) = 0;
91  virtual void RegisterCaptureDataCallback(
92  std::weak_ptr<::rtc::VideoSinkInterface<webrtc::VideoFrame>> dataCallback) = 0;
93  virtual int CaptureMouseCursor(bool capture) = 0;
94  virtual int GetScreenDimensions(VideoDimensions& dimension) = 0;
95  virtual bool FocusOnSelectedSource() = 0;
96 #if defined(_WIN32)
97  virtual void SetCaptureSource(bool allow_magnification_api, bool allow_directx_capturer) = 0;
98  virtual void GetCaptureSource(bool& allow_magnification_api, bool& allow_directx_capturer) = 0;
99  virtual void ForcedUsingScreenCapture(bool using_screen_capture) = 0;
100 #endif
101 };
102 
104  public:
106  virtual int onFrame(const webrtc::VideoFrame& videoFrame) = 0;
107 
108  virtual bool applyMirror() { return false; }
109 
110  virtual bool applyRotation() { return false; }
111 
112  virtual int setViewEx(uintptr_t handle) {
113  (void) handle;
114  return 0;
115  }
116  virtual void attachUserInfo(uid_t uid, uint64_t state_space) {
117  (void) uid;
118  (void) state_space;
119  }
120 };
121 
123  std::string image;
124  VIDEO_FRAME_TYPE frameType;
125  int width;
126  int height;
127  int framesPerSecond;
128  // int64_t renderTimeInMs;
129  VIDEO_ORIENTATION rotation;
130  VIDEO_CODEC_TYPE codec;
131  VIDEO_STREAM_TYPE streamType;
132 };
133 
135  public:
136  virtual ~IVideoEncodedImageCallback() {}
137  virtual void OnVideoEncodedImage(agora_refptr<VideoEncodedImageData> data) = 0;
138 };
139 
141  public:
142  virtual ~IVideoEncodedImageSenderEx() {}
143  virtual void RegisterEncodedImageCallback(IVideoEncodedImageCallback* dataCallback) = 0;
144  virtual void DeRegisterEncodedImageCallback() = 0;
145  virtual int getWidth() const =0;
146  virtual int getHeight() const =0;
147 };
148 
150  public:
152 
153  virtual ~IVideoFrameSenderEx() {}
154 
155  virtual int sendVideoFrame(const webrtc::VideoFrame& videoFrame) = 0;
156 
157  virtual void RegisterVideoFrameCallback(
158  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
159  virtual void DeRegisterVideoFrameCallback() = 0;
160 };
161 
163  public:
164  virtual ~IVideoMixerSourceEx() = default;
165  virtual void registerMixedFrameCallback(
166  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
167  virtual void deRegisterMixedFrameCallback(::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
168  virtual void onFrame(const std::string& uid, const webrtc::VideoFrame& frame) = 0;
169  virtual void startMixing() = 0;
170  virtual void stopMixing() = 0;
171 };
172 
174  public:
175  virtual int onFrame(const webrtc::VideoFrame& videoFrame) = 0;
176  virtual void registerFrameCallback(
177  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
178  virtual void deRegisterFrameCallback(::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
179  virtual void observeTxDelay(ILocalVideoTrack* track) = 0;
180 };
181 
182 } // namespace rtc
183 } // namespace agora
agora::rtc::IVideoEncodedImageSenderEx
Definition: video_node_i.h:140
agora::rtc::IVideoFrameSender::sendVideoFrame
virtual int sendVideoFrame(const media::base::ExternalVideoFrame &videoFrame)=0
agora::rtc::IVideoFrameAdapter
Definition: video_node_i.h:61
agora::rtc::IVideoFilterBase::adaptVideoFrame
virtual bool adaptVideoFrame(const media::base::VideoFrame &capturedFrame, media::base::VideoFrame &adaptedFrame)=0
agora::agora_refptr
Definition: AgoraRefPtr.h:34
agora::rtc::IVideoFrameTransceiver
Definition: NGIAgoraMediaNode.h:592
agora::rtc::IVideoEncodedImageSender
Definition: NGIAgoraMediaNode.h:450
agora::rtc::IVideoMixerSourceEx
Definition: video_node_i.h:162
agora::rtc::VideoFormat
Definition: AgoraBase.h:2333
agora::rtc::IScreenCapturer
Definition: NGIAgoraScreenCapturer.h:18
agora::rtc::ICameraCapturer
Definition: NGIAgoraCameraCapturer.h:19
agora::rtc::ILocalVideoTrack
Definition: NGIAgoraVideoTrack.h:226
agora::rtc::IVideoFrameSenderEx
Definition: video_node_i.h:149
agora::rtc::IVideoFrameTransceiverEx
Definition: video_node_i.h:173
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::IVideoEncodedImageCallback
Definition: video_node_i.h:134
agora::rtc::IVideoFrameSender
Definition: NGIAgoraMediaNode.h:426
agora::RefCountInterface
Definition: AgoraRefPtr.h:21
agora::rtc::IScreenCapturerEx
Definition: video_node_i.h:85
agora::rtc::IVideoFilterEx::isExternal
bool isExternal() override
Definition: video_node_i.h:52
agora::rtc::IVideoRendererEx
Definition: video_node_i.h:103
agora::rtc::IVideoFilterEx
Definition: video_node_i.h:44
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1362
agora::rtc::ICameraCapturerEx
Definition: video_node_i.h:76
agora::rtc::VideoEncodedImageData
Definition: video_node_i.h:122
rtc::VideoSinkInterface
Definition: video_node_i.h:27
agora::rtc::IVideoFilter
Definition: NGIAgoraMediaNode.h:115