Agora C++ API Reference for All Platforms
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 #include "api/video/video_frame.h"
22 
23 namespace webrtc {
24 class VideoFrame;
25 } // namespace webrtc
26 
27 namespace rtc {
28 struct VideoSinkWants;
29 
30 template <typename VideoFrameT>
32 } // namespace rtc
33 
34 namespace agora {
35 namespace rtc {
36 
41 };
42 
44  uintptr_t handle;
45  bool mirror;
47 };
48 
49 static const char* const BUILT_IN_ADAPTER = "built-in-adapter";
50 static const char* const BUILT_IN_MIRROR_FILTER = "built-in-mirror";
51 static const char* const BUILT_IN_WATERMARK_FILTER = "built-in-watermarker";
52 static const char* const BUILT_IN_ROTATOR = "built-in-rotator";
53 static const char* const BUILT_IN_PREVIEW_TEE = "built-in-preview-tee";
54 static const char* const BUILT_IN_MAJOR_TEE = "built-in-major-tee";
55 static const char* const BUILT_IN_MINOR_TEE = "built-in-minor-tee";
56 static const char* const BUILT_IN_MINOR_ADAPTER = "built-in-minor-adapter";
57 
60 class IVideoFilterEx : public IVideoFilter {
61  public:
63  // Internal node can use webrtc video frame directly to reduce copy operation.
64  virtual bool adaptVideoFrame(const webrtc::VideoFrame& capturedFrame,
65  webrtc::VideoFrame& adaptedFrame) = 0;
66  // TODO(Bob): This should be moved to node base.
67  virtual void onSinkWantsChanged(const ::rtc::VideoSinkWants& wants) = 0;
68  bool isExternal() override { return false; }
69  virtual void attachStatsSpace(uint64_t stats_space) {}
70 
71  protected:
73 };
74 
78  public:
79  // Requests the output frame size and frame interval from
80  // |AdaptFrameResolution| to not be larger than |format|. Also, the input
81  // frame size will be cropped to match the requested aspect ratio. When "fixed"
82  // is set false, the requested aspect ratio is orientation agnostic
83  // and will be adjusted to maintain the input orientation, so it doesn't matter
84  // if e.g. 1280x720 or 720x1280 is requested. Otherwise, the output format is
85  // fixed. The input frame may be cropped and rotated to meet the output format.
86  virtual void setOutputFormat(const VideoFormat& format, bool fixed = false) = 0;
87 
88  // Request the output frame in a fixed rotation.
89  virtual void setOutputRotation(webrtc::VideoRotation rotation) {}
90 
91  protected:
93 };
94 
96  CAMERA_OUTPUT_RAW = 0, // YUV
97  CAMERA_OUTPUT_TEXTURE = 1, // Texture
98  CAMERA_OUTPUT_TEXTURE_AND_RAW = 2, // YUV && Texture
99 };
100 
102  public:
103  virtual ~ICameraCapturerEx() {}
104 
106  (void) type;
107  }
108 #if defined(__ANDROID__) || defined(TARGET_OS_IPHONE)
109  virtual void setPreviewInfo(const PreviewMetaInfo& info) {}
110 #endif
111 
112 #if defined(__ANDROID__)
114  virtual void setCameraSelected(int android_camera_module_selected) = 0;
115  virtual void setCameraPqFirst(bool pq_first) = 0;
116 #endif
117 };
118 
120 public:
124  };
125  public:
126  virtual ~IScreenCapturerEx() {}
127  virtual int StartCapture() = 0;
128  virtual int StopCapture() = 0;
129  virtual void SetFrameRate(int rate) = 0;
131  std::weak_ptr<::rtc::VideoSinkInterface<webrtc::VideoFrame>> dataCallback) = 0;
132  virtual int CaptureMouseCursor(bool capture) = 0;
133  virtual int GetScreenDimensions(VideoDimensions& dimension) = 0;
134  virtual bool FocusOnSelectedSource() = 0;
135 #if defined(_WIN32)
136  virtual int InitUsingLastRegionSetting() = 0;
137  virtual int InitUsingLastScreenSetting(const rtc::Rectangle& regionRect) = 0;
138  virtual void SetCaptureSource(bool allow_magnification_api, bool allow_directx_capturer) = 0;
139  virtual void GetCaptureSource(bool& allow_magnification_api, bool& allow_directx_capturer) = 0;
140  virtual void ForcedUsingScreenCapture(bool using_screen_capture) = 0;
141  virtual void SetExcludeWindowList(const std::vector<void *>& window_list) = 0;
142  virtual webrtc::DesktopCapturer::SourceId GetSourceId() = 0;
143  virtual int GetCaptureType() = 0;
144 #endif
146  return -ERR_NOT_SUPPORTED;
147  }
149  return -ERR_NOT_SUPPORTED;
150  }
151 };
152 
154 public:
156  (void) state;
157  }
158 protected:
160 };
161 
163  public:
165  virtual int onFrame(const webrtc::VideoFrame& videoFrame) = 0;
166 
167  virtual bool applyMirror() { return false; }
168 
169  virtual bool applyRotation() { return false; }
170 
171  virtual int setViewEx(uintptr_t handle) {
172  (void) handle;
173  return 0;
174  }
175 
176  virtual void attachUserInfo(uid_t uid, uint64_t state_space) {
177  (void) uid;
178  (void) state_space;
179  }
180 
181  virtual int getViewMetaInfo(PreviewMetaInfo& info) {
182  return -ERR_NOT_SUPPORTED;
183  }
184 };
185 
187  std::string image;
189  int width;
190  int height;
192  // int64_t renderTimeInMs;
196 };
197 
199  public:
202 };
203 
205  public:
208  virtual void DeRegisterEncodedImageCallback() = 0;
209  virtual int getWidth() const =0;
210  virtual int getHeight() const =0;
211 };
212 
214  public:
216 
217  virtual ~IVideoFrameSenderEx() {}
218 
219  virtual int sendVideoFrame(const webrtc::VideoFrame& videoFrame) = 0;
220 
222  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
223  virtual void DeRegisterVideoFrameCallback() = 0;
224 };
225 
227  public:
228  virtual ~IVideoMixerSourceEx() = default;
230  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
232  virtual void onFrame(const std::string& uid, const webrtc::VideoFrame& frame) = 0;
233  virtual void startMixing() = 0;
234  virtual void stopMixing() = 0;
235  virtual bool hasVideoTrack(const std::string& id) = 0;
236 };
237 
239  public:
240  virtual int onFrame(const webrtc::VideoFrame& videoFrame) = 0;
241  virtual void registerFrameCallback(
242  ::rtc::VideoSinkInterface<webrtc::VideoFrame>* dataCallback) = 0;
244  virtual void observeTxDelay(ILocalVideoTrack* track) = 0;
245 };
246 
247 } // namespace rtc
248 } // namespace agora
agora::rtc::VideoEncodedImageData::framesPerSecond
int framesPerSecond
Definition: video_node_i.h:191
agora::rtc::IVideoEncodedImageSenderEx
Definition: video_node_i.h:204
agora::rtc::IVideoMixerSourceEx::~IVideoMixerSourceEx
virtual ~IVideoMixerSourceEx()=default
agora::rtc::IScreenCapturerEx::SetCaptureSource
virtual void SetCaptureSource(bool allow_magnification_api, bool allow_directx_capturer)=0
agora::rtc::IVideoFrameSender::sendVideoFrame
virtual int sendVideoFrame(const media::base::ExternalVideoFrame &videoFrame)=0
agora::rtc::CAMERA_OUTPUT_DATA_TYPE
CAMERA_OUTPUT_DATA_TYPE
Definition: video_node_i.h:95
agora::rtc::IVideoFrameAdapter
Definition: video_node_i.h:77
agora::rtc::IScreenCapturerEx::GetCaptureType
virtual int GetCaptureType()=0
agora::rtc::IVideoRendererEx::setViewEx
virtual int setViewEx(uintptr_t handle)
Definition: video_node_i.h:171
agora::rtc::IScreenCapturerEx::GetCaptureSource
virtual void GetCaptureSource(bool &allow_magnification_api, bool &allow_directx_capturer)=0
agora::rtc::IVideoFilterBase::adaptVideoFrame
virtual bool adaptVideoFrame(const media::base::VideoFrame &capturedFrame, media::base::VideoFrame &adaptedFrame)=0
agora::rtc::IVideoMixerSourceEx::registerMixedFrameCallback
virtual void registerMixedFrameCallback(::rtc::VideoSinkInterface< webrtc::VideoFrame > *dataCallback)=0
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::rtc::BUILT_IN_MAJOR_TEE
static const char *const BUILT_IN_MAJOR_TEE
Definition: video_node_i.h:54
agora::rtc::IVideoFrameTransceiver
Definition: NGIAgoraMediaNode.h:755
agora::rtc::IScreenCaptureObserver
Definition: video_node_i.h:153
agora::rtc::RENDERER_EXT_OBSERVER
@ RENDERER_EXT_OBSERVER
Definition: video_node_i.h:40
agora::rtc::IScreenCaptureObserver::onScreenCaptureStateChanged
virtual void onScreenCaptureStateChanged(IScreenCapturerEx::SCREEN_CAPTURER_STATE state)
Definition: video_node_i.h:155
webrtc
Definition: common_defines.h:11
agora::rtc::IScreenCapturerEx::SCREEN_CAPTURER_STATE
SCREEN_CAPTURER_STATE
Definition: video_node_i.h:121
agora::rtc::Rectangle
Definition: AgoraBase.h:1971
agora::rtc::IScreenCapturerEx::SCREEN_CAPTURER_STOPPED
@ SCREEN_CAPTURER_STOPPED
Definition: video_node_i.h:123
agora::rtc::IScreenCapturerEx::SetExcludeWindowList
virtual void SetExcludeWindowList(const std::vector< void * > &window_list)=0
agora::rtc::IScreenCapturerEx::InitUsingLastRegionSetting
virtual int InitUsingLastRegionSetting()=0
agora::rtc::VideoEncodedImageData::image
std::string image
Definition: video_node_i.h:187
agora::rtc::IVideoFilterEx::adaptVideoFrame
virtual bool adaptVideoFrame(const webrtc::VideoFrame &capturedFrame, webrtc::VideoFrame &adaptedFrame)=0
agora::rtc::BUILT_IN_PREVIEW_TEE
static const char *const BUILT_IN_PREVIEW_TEE
Definition: video_node_i.h:53
agora::rtc::IVideoMixerSourceEx::deRegisterMixedFrameCallback
virtual void deRegisterMixedFrameCallback(::rtc::VideoSinkInterface< webrtc::VideoFrame > *dataCallback)=0
agora::rtc::IVideoRendererEx::attachUserInfo
virtual void attachUserInfo(uid_t uid, uint64_t state_space)
Definition: video_node_i.h:176
agora::rtc::VideoEncodedImageData::frameType
VIDEO_FRAME_TYPE frameType
Definition: video_node_i.h:188
agora::rtc::IScreenCapturerEx::RegisterCaptureDataCallback
virtual void RegisterCaptureDataCallback(std::weak_ptr<::rtc::VideoSinkInterface< webrtc::VideoFrame >> dataCallback)=0
agora::rtc::IScreenCapturerEx::unregisterScreenCaptureObserver
virtual int unregisterScreenCaptureObserver(IScreenCaptureObserver *observer)
Definition: video_node_i.h:148
agora::rtc::IVideoEncodedImageCallback::~IVideoEncodedImageCallback
virtual ~IVideoEncodedImageCallback()
Definition: video_node_i.h:200
agora::rtc::ICameraCapturerEx::getCameraOutputDataType
virtual CAMERA_OUTPUT_DATA_TYPE getCameraOutputDataType()=0
agora::rtc::IScreenCapturerEx::FocusOnSelectedSource
virtual bool FocusOnSelectedSource()=0
agora::rtc::CAMERA_OUTPUT_RAW
@ CAMERA_OUTPUT_RAW
Definition: video_node_i.h:96
agora::rtc::IVideoEncodedImageSender
Definition: NGIAgoraMediaNode.h:613
agora::rtc::IScreenCapturerEx::registerScreenCaptureObserver
virtual int registerScreenCaptureObserver(IScreenCaptureObserver *observer)
Definition: video_node_i.h:145
agora::rtc::BUILT_IN_WATERMARK_FILTER
static const char *const BUILT_IN_WATERMARK_FILTER
Definition: video_node_i.h:51
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::IVideoMixerSourceEx
Definition: video_node_i.h:226
agora::rtc::BUILT_IN_MINOR_ADAPTER
static const char *const BUILT_IN_MINOR_ADAPTER
Definition: video_node_i.h:56
agora::rtc::IVideoMixerSourceEx::startMixing
virtual void startMixing()=0
agora::rtc::IVideoFrameSenderEx::DeRegisterVideoFrameCallback
virtual void DeRegisterVideoFrameCallback()=0
agora::rtc::VideoFormat
Definition: AgoraBase.h:2439
agora::rtc::IScreenCapturer
Definition: NGIAgoraScreenCapturer.h:18
agora::rtc::IVideoRendererEx::applyMirror
virtual bool applyMirror()
Definition: video_node_i.h:167
agora::rtc::IScreenCaptureObserver::~IScreenCaptureObserver
virtual ~IScreenCaptureObserver()
Definition: video_node_i.h:159
agora::rtc::VIDEO_CODEC_TYPE
VIDEO_CODEC_TYPE
Definition: AgoraBase.h:1439
agora::rtc::RENDERER_BUILT_IN_RENDERER
@ RENDERER_BUILT_IN_RENDERER
Definition: video_node_i.h:39
agora::rtc::IScreenCapturerEx::CaptureMouseCursor
virtual int CaptureMouseCursor(bool capture)=0
agora::rtc::IVideoFrameSenderEx::~IVideoFrameSenderEx
virtual ~IVideoFrameSenderEx()
Definition: video_node_i.h:217
agora::rtc::RENDERER_NONE
@ RENDERER_NONE
Definition: video_node_i.h:38
agora::rtc::VIDEO_ORIENTATION
VIDEO_ORIENTATION
Definition: AgoraBase.h:1251
agora::rtc::IVideoFilterEx::attachStatsSpace
virtual void attachStatsSpace(uint64_t stats_space)
Definition: video_node_i.h:69
agora::rtc::IScreenCapturerEx::StopCapture
virtual int StopCapture()=0
agora::rtc::IVideoFrameSenderEx::sendVideoFrame
virtual int sendVideoFrame(const webrtc::VideoFrame &videoFrame)=0
agora::rtc::ICameraCapturer
Definition: NGIAgoraCameraCapturer.h:19
agora::rtc::ILocalVideoTrack
Definition: NGIAgoraVideoTrack.h:245
agora::rtc::BUILT_IN_MINOR_TEE
static const char *const BUILT_IN_MINOR_TEE
Definition: video_node_i.h:55
agora::rtc::IVideoFrameSenderEx
Definition: video_node_i.h:213
agora::rtc::VIDEO_FRAME_TYPE
VIDEO_FRAME_TYPE
Definition: AgoraBase.h:1316
agora::rtc::IVideoFilterEx::onSinkWantsChanged
virtual void onSinkWantsChanged(const ::rtc::VideoSinkWants &wants)=0
agora::rtc::IVideoFrameTransceiverEx
Definition: video_node_i.h:238
agora::rtc::IVideoMixerSourceEx::hasVideoTrack
virtual bool hasVideoTrack(const std::string &id)=0
agora::rtc::IVideoMixerSource
Definition: NGIAgoraVideoMixerSource.h:44
agora::rtc::IVideoFrameTransceiverEx::deRegisterFrameCallback
virtual void deRegisterFrameCallback(::rtc::VideoSinkInterface< webrtc::VideoFrame > *dataCallback)=0
agora::rtc::IVideoFrameTransceiverEx::registerFrameCallback
virtual void registerFrameCallback(::rtc::VideoSinkInterface< webrtc::VideoFrame > *dataCallback)=0
agora::rtc::IVideoSinkBase::onFrame
virtual int onFrame(const media::base::VideoFrame &videoFrame)=0
agora::rtc::ICameraCapturerEx::setPreviewInfo
virtual void setPreviewInfo(const PreviewMetaInfo &info)
Definition: video_node_i.h:109
agora::rtc::IVideoEncodedImageSenderEx::getHeight
virtual int getHeight() const =0
agora::rtc::IVideoFilterEx::~IVideoFilterEx
~IVideoFilterEx()
Definition: video_node_i.h:72
agora::rtc::IVideoRenderer
Definition: NGIAgoraMediaNode.h:712
agora::rtc::IVideoEncodedImageCallback::OnVideoEncodedImage
virtual void OnVideoEncodedImage(agora_refptr< VideoEncodedImageData > data)=0
agora::rtc::IVideoEncodedImageSenderEx::getWidth
virtual int getWidth() const =0
agora::rtc::PreviewMetaInfo
Definition: video_node_i.h:43
agora::rtc::IVideoFrameAdapter::~IVideoFrameAdapter
~IVideoFrameAdapter()
Definition: video_node_i.h:92
agora::rtc::IVideoRendererEx::onFrame
virtual int onFrame(const webrtc::VideoFrame &videoFrame)=0
agora::rtc::CAMERA_OUTPUT_TEXTURE_AND_RAW
@ CAMERA_OUTPUT_TEXTURE_AND_RAW
Definition: video_node_i.h:98
agora::media::base::RENDER_MODE_TYPE
RENDER_MODE_TYPE
Definition: AgoraMediaBase.h:275
agora::rtc::PreviewMetaInfo::render_mode
media::base::RENDER_MODE_TYPE render_mode
Definition: video_node_i.h:46
agora::rtc::PreviewMetaInfo::mirror
bool mirror
Definition: video_node_i.h:45
agora::rtc::IVideoFrameTransceiverEx::observeTxDelay
virtual void observeTxDelay(ILocalVideoTrack *track)=0
agora::rtc::IVideoRendererEx::applyRotation
virtual bool applyRotation()
Definition: video_node_i.h:169
agora::ERR_NOT_SUPPORTED
@ ERR_NOT_SUPPORTED
Definition: AgoraBase.h:496
agora::rtc::IScreenCapturerEx::ForcedUsingScreenCapture
virtual void ForcedUsingScreenCapture(bool using_screen_capture)=0
agora::rtc::VideoEncodedImageData::rotation
VIDEO_ORIENTATION rotation
Definition: video_node_i.h:193
agora::rtc::IVideoEncodedImageSenderEx::DeRegisterEncodedImageCallback
virtual void DeRegisterEncodedImageCallback()=0
agora::rtc::IVideoEncodedImageCallback
Definition: video_node_i.h:198
agora::rtc::InternalRendererType
InternalRendererType
Definition: video_node_i.h:37
agora::rtc::IScreenCapturerEx::GetScreenDimensions
virtual int GetScreenDimensions(VideoDimensions &dimension)=0
agora::rtc::BUILT_IN_ROTATOR
static const char *const BUILT_IN_ROTATOR
Definition: video_node_i.h:52
agora::rtc::IVideoFrameSenderEx::RegisterVideoFrameCallback
virtual void RegisterVideoFrameCallback(::rtc::VideoSinkInterface< webrtc::VideoFrame > *dataCallback)=0
agora::rtc::IScreenCapturerEx::InitUsingLastScreenSetting
virtual int InitUsingLastScreenSetting(const rtc::Rectangle &regionRect)=0
agora::rtc::IScreenCapturerEx::GetSourceId
virtual webrtc::DesktopCapturer::SourceId GetSourceId()=0
agora::rtc::IVideoFrameSender
Definition: NGIAgoraMediaNode.h:589
agora::rtc::IVideoEncodedImageSenderEx::~IVideoEncodedImageSenderEx
virtual ~IVideoEncodedImageSenderEx()
Definition: video_node_i.h:206
agora::rtc::ICameraCapturerEx::setCameraSelected
virtual void setCameraSelected(int android_camera_module_selected)=0
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::rtc::IScreenCapturerEx::SetFrameRate
virtual void SetFrameRate(int rate)=0
agora::rtc::VIDEO_STREAM_TYPE
VIDEO_STREAM_TYPE
Definition: AgoraBase.h:1686
agora::rtc::IVideoRendererEx::getViewMetaInfo
virtual int getViewMetaInfo(PreviewMetaInfo &info)
Definition: video_node_i.h:181
agora::rtc::ICameraCapturerEx::~ICameraCapturerEx
virtual ~ICameraCapturerEx()
Definition: video_node_i.h:103
agora::rtc::IScreenCapturerEx::SCREEN_CAPTURER_STARTED
@ SCREEN_CAPTURER_STARTED
Definition: video_node_i.h:122
agora::rtc::IVideoFrameTransceiverEx::onFrame
virtual int onFrame(const webrtc::VideoFrame &videoFrame)=0
agora::rtc::IScreenCapturerEx
Definition: video_node_i.h:119
agora::rtc::IVideoFilterEx::isExternal
bool isExternal() override
Definition: video_node_i.h:68
agora::rtc::IVideoRendererEx
Definition: video_node_i.h:162
agora::rtc::IScreenCapturerEx::~IScreenCapturerEx
virtual ~IScreenCapturerEx()
Definition: video_node_i.h:126
agora::rtc::IVideoFilterEx
Definition: video_node_i.h:60
agora::rtc::VideoDimensions
Definition: AgoraBase.h:1390
agora::rtc::VideoEncodedImageData::codec
VIDEO_CODEC_TYPE codec
Definition: video_node_i.h:194
agora::rtc::BUILT_IN_MIRROR_FILTER
static const char *const BUILT_IN_MIRROR_FILTER
Definition: video_node_i.h:50
agora::rtc::ICameraCapturerEx
Definition: video_node_i.h:101
agora::rtc::ICameraCapturerEx::setCameraOutputDataType
virtual void setCameraOutputDataType(CAMERA_OUTPUT_DATA_TYPE type)
Definition: video_node_i.h:105
agora::rtc::VideoEncodedImageData
Definition: video_node_i.h:186
agora::rtc::uid_t
unsigned int uid_t
Definition: AgoraMediaBase.h:25
agora::rtc::VideoEncodedImageData::height
int height
Definition: video_node_i.h:190
agora::rtc::CAMERA_OUTPUT_TEXTURE
@ CAMERA_OUTPUT_TEXTURE
Definition: video_node_i.h:97
agora::rtc::IVideoFrameAdapter::setOutputRotation
virtual void setOutputRotation(webrtc::VideoRotation rotation)
Definition: video_node_i.h:89
agora::rtc::IVideoMixerSourceEx::onFrame
virtual void onFrame(const std::string &uid, const webrtc::VideoFrame &frame)=0
agora::rtc::IVideoEncodedImageSenderEx::RegisterEncodedImageCallback
virtual void RegisterEncodedImageCallback(IVideoEncodedImageCallback *dataCallback)=0
rtc::VideoSinkInterface
Definition: video_node_i.h:31
agora::rtc::BUILT_IN_ADAPTER
static const char *const BUILT_IN_ADAPTER
Definition: video_node_i.h:49
agora::rtc::PreviewMetaInfo::handle
uintptr_t handle
Definition: video_node_i.h:44
agora::rtc::IVideoFilter
Definition: NGIAgoraMediaNode.h:145
agora::rtc::VideoEncodedImageData::streamType
VIDEO_STREAM_TYPE streamType
Definition: video_node_i.h:195
agora::rtc::IVideoFrameAdapter::setOutputFormat
virtual void setOutputFormat(const VideoFormat &format, bool fixed=false)=0
rtc
Definition: video_node_i.h:27
agora::rtc::IVideoMixerSourceEx::stopMixing
virtual void stopMixing()=0
agora::rtc::ICameraCapturerEx::setCameraPqFirst
virtual void setCameraPqFirst(bool pq_first)=0
agora::rtc::VideoEncodedImageData::width
int width
Definition: video_node_i.h:189
agora::rtc::IScreenCapturerEx::StartCapture
virtual int StartCapture()=0