Agora C++ API Reference for All Platforms
IAgoraMediaEngine.h
1 #ifndef AGORA_MEDIA_ENGINE_H
2 #define AGORA_MEDIA_ENGINE_H
3 #if defined _WIN32 || defined __CYGWIN__
4 typedef __int64 int64_t;
5 typedef unsigned __int64 uint64_t;
6 #else
7 #include <stdint.h>
8 #endif
9 
10 namespace agora {
11 namespace media {
21 };
22 
27  public:
31  FRAME_TYPE_PCM16 = 0, // PCM 16bit little endian
32  };
34  struct AudioFrame {
40  int samples; //number of samples for each channel in this frame
43  int bytesPerSample; //number of bytes per sample: 2 for PCM16
48  int channels; //number of channels (data are interleaved if stereo)
51  int samplesPerSec; //sampling rate
55  void* buffer; //data buffer
60  int64_t renderTimeMs;
64  };
65 
66  public:
76  virtual bool onRecordAudioFrame(AudioFrame& audioFrame) = 0;
84  virtual bool onPlaybackAudioFrame(AudioFrame& audioFrame) = 0;
96  virtual bool onMixedAudioFrame(AudioFrame& audioFrame) = 0;
107  virtual bool onPlaybackAudioFrameBeforeMixing(unsigned int uid,
108  AudioFrame& audioFrame) = 0;
109 };
110 
115  public:
121  FRAME_TYPE_YUV420 = 0, // YUV 420 format
125  FRAME_TYPE_YUV422 = 1, // YUV 422 format
129  FRAME_TYPE_RGBA = 2, // RGBA format
130  };
133  struct VideoFrame {
137  int width; //width of video frame
140  int height; //height of video frame
143  int yStride; //stride of Y data buffer
146  int uStride; //stride of U data buffer
149  int vStride; //stride of V data buffer
152  void* yBuffer; //Y data buffer
155  void* uBuffer; //U data buffer
158  void* vBuffer; //V data buffer
161  int rotation; // rotation of this frame (0, 90, 180, 270)
167  int64_t renderTimeMs;
169  };
170 
171  public:
187  virtual bool onCaptureVideoFrame(VideoFrame& videoFrame) = 0;
205  virtual bool onPreEncodeVideoFrame(VideoFrame& videoFrame) { return true; }
222  virtual bool onRenderVideoFrame(unsigned int uid, VideoFrame& videoFrame) = 0;
248  virtual bool getRotationApplied() { return false; }
263  virtual bool getMirrorApplied() { return false; }
278  virtual bool getSmoothRenderingEnabled(){ return false; }
279 };
280 
281 class IVideoFrame {
282  public:
283  enum PLANE_TYPE { Y_PLANE = 0, U_PLANE = 1, V_PLANE = 2, NUM_OF_PLANES = 3 };
284  enum VIDEO_TYPE {
303  };
304  virtual void release() = 0;
305  virtual const unsigned char* buffer(PLANE_TYPE type) const = 0;
306 
316  virtual int copyFrame(IVideoFrame** dest_frame) const = 0;
328  virtual int convertFrame(VIDEO_TYPE dst_video_type, int dst_sample_size,
329  unsigned char* dst_frame) const = 0;
334  virtual int allocated_size(PLANE_TYPE type) const = 0;
339  virtual int stride(PLANE_TYPE type) const = 0;
342  virtual int width() const = 0;
345  virtual int height() const = 0;
348  virtual unsigned int timestamp() const = 0;
351  virtual int64_t render_time_ms() const = 0;
358  virtual bool IsZeroSize() const = 0;
359 
360  virtual VIDEO_TYPE GetVideoType() const = 0;
361 };
364  public:
367  virtual void onViewSizeChanged(int width, int height) = 0;
370  virtual void onViewDestroyed() = 0;
371 };
377  void* view;
387  int zOrder;
390  float left;
393  float top;
396  float right;
399  float bottom;
400 };
401 
403  public:
404  virtual void release() = 0;
405  virtual int initialize() = 0;
406  virtual int deliverFrame(const IVideoFrame& videoFrame, int rotation,
407  bool mirrored) = 0;
408 };
409 
411  public:
413  const ExternalVideoRenerContext& context) = 0;
414 };
415 
419 {
423  {
427  };
428 
432  {
448  };
449 
458  void* buffer;
461  int stride;
464  int height;
467  int cropLeft;
470  int cropTop;
479  int rotation;
482  long long timestamp;
483 };
484 
486  public:
487  virtual void release() = 0;
497  virtual int registerAudioFrameObserver(IAudioFrameObserver* observer) = 0;
516  virtual int registerVideoFrameObserver(IVideoFrameObserver* observer) = 0;
533  virtual int pushAudioFrame(MEDIA_SOURCE_TYPE type,
535  bool wrap) = 0;
544  virtual int pushAudioFrame(IAudioFrameObserver::AudioFrame* frame) = 0;
580  virtual int pullAudioFrame(IAudioFrameObserver::AudioFrame* frame) = 0;
595  virtual int setExternalVideoSource(bool enable, bool useTexture) = 0;
606  virtual int pushVideoFrame(ExternalVideoFrame *frame) = 0;
607 };
608 
609 } // namespace media
610 
611 } // namespace agora
612 
613 #endif // AGORA_MEDIA_ENGINE_H
Definition: IAgoraMediaEngine.h:410
virtual int pushAudioFrame(MEDIA_SOURCE_TYPE type, IAudioFrameObserver::AudioFrame *frame, bool wrap)=0
virtual int width() const =0
Definition: IAgoraMediaEngine.h:447
int samples
Definition: IAgoraMediaEngine.h:40
int avsync_type
Definition: IAgoraMediaEngine.h:168
Definition: IAgoraMediaEngine.h:31
int64_t renderTimeMs
Definition: IAgoraMediaEngine.h:167
void * buffer
Definition: IAgoraMediaEngine.h:55
virtual bool getMirrorApplied()
Definition: IAgoraMediaEngine.h:263
int bytesPerSample
Definition: IAgoraMediaEngine.h:43
VIDEO_FRAME_TYPE type
Definition: IAgoraMediaEngine.h:134
Definition: IAgoraMediaEngine.h:302
virtual void release()=0
Definition: AgoraBase.h:36
VIDEO_TYPE
Definition: IAgoraMediaEngine.h:284
virtual bool onCaptureVideoFrame(VideoFrame &videoFrame)=0
int cropRight
Definition: IAgoraMediaEngine.h:473
virtual const unsigned char * buffer(PLANE_TYPE type) const =0
VIDEO_BUFFER_TYPE
Definition: IAgoraMediaEngine.h:422
AUDIO_FRAME_TYPE type
Definition: IAgoraMediaEngine.h:37
virtual IExternalVideoRender * createRenderInstance(const ExternalVideoRenerContext &context)=0
virtual VIDEO_FRAME_TYPE getVideoFormatPreference()
Definition: IAgoraMediaEngine.h:234
Definition: IAgoraMediaEngine.h:295
Definition: IAgoraMediaEngine.h:301
Definition: IAgoraMediaEngine.h:294
virtual unsigned int timestamp() const =0
Definition: IAgoraMediaEngine.h:373
int cropBottom
Definition: IAgoraMediaEngine.h:476
virtual bool onMixedAudioFrame(AudioFrame &audioFrame)=0
virtual int pushVideoFrame(ExternalVideoFrame *frame)=0
Definition: IAgoraMediaEngine.h:287
void * buffer
Definition: IAgoraMediaEngine.h:458
VIDEO_PIXEL_FORMAT format
Definition: IAgoraMediaEngine.h:455
AUDIO_FRAME_TYPE
Definition: IAgoraMediaEngine.h:29
Definition: IAgoraMediaEngine.h:291
virtual int registerAudioFrameObserver(IAudioFrameObserver *observer)=0
virtual bool onRecordAudioFrame(AudioFrame &audioFrame)=0
virtual int stride(PLANE_TYPE type) const =0
int channels
Definition: IAgoraMediaEngine.h:48
Definition: IAgoraMediaEngine.h:283
Definition: IAgoraMediaEngine.h:283
virtual bool IsZeroSize() const =0
int vStride
Definition: IAgoraMediaEngine.h:149
Definition: IAgoraMediaEngine.h:17
Definition: IAgoraMediaEngine.h:288
int yStride
Definition: IAgoraMediaEngine.h:143
float right
Definition: IAgoraMediaEngine.h:396
Definition: IAgoraMediaEngine.h:125
virtual int allocated_size(PLANE_TYPE type) const =0
void * view
Definition: IAgoraMediaEngine.h:377
Definition: IAgoraMediaEngine.h:34
virtual int64_t render_time_ms() const =0
Definition: IAgoraMediaEngine.h:129
int64_t renderTimeMs
Definition: IAgoraMediaEngine.h:60
virtual bool onPlaybackAudioFrameBeforeMixing(unsigned int uid, AudioFrame &audioFrame)=0
virtual int height() const =0
void * vBuffer
Definition: IAgoraMediaEngine.h:158
Definition: IAgoraMediaEngine.h:20
Definition: IAgoraMediaEngine.h:438
void * yBuffer
Definition: IAgoraMediaEngine.h:152
int height
Definition: IAgoraMediaEngine.h:464
virtual bool onRenderVideoFrame(unsigned int uid, VideoFrame &videoFrame)=0
virtual int registerVideoFrameObserver(IVideoFrameObserver *observer)=0
Definition: IAgoraMediaEngine.h:485
Definition: IAgoraMediaEngine.h:121
Definition: IAgoraMediaEngine.h:441
Definition: IAgoraMediaEngine.h:297
Definition: IAgoraMediaEngine.h:133
float top
Definition: IAgoraMediaEngine.h:393
virtual VIDEO_TYPE GetVideoType() const =0
Definition: IAgoraMediaEngine.h:290
int rotation
Definition: IAgoraMediaEngine.h:479
virtual bool getRotationApplied()
Definition: IAgoraMediaEngine.h:248
Definition: IAgoraMediaEngine.h:418
Definition: IAgoraMediaEngine.h:283
virtual void release()=0
virtual bool onPlaybackAudioFrame(AudioFrame &audioFrame)=0
virtual bool getSmoothRenderingEnabled()
Definition: IAgoraMediaEngine.h:278
virtual int deliverFrame(const IVideoFrame &videoFrame, int rotation, bool mirrored)=0
PLANE_TYPE
Definition: IAgoraMediaEngine.h:283
int uStride
Definition: IAgoraMediaEngine.h:146
Definition: IAgoraMediaEngine.h:444
Definition: IAgoraMediaEngine.h:114
VIDEO_PIXEL_FORMAT
Definition: IAgoraMediaEngine.h:431
int renderMode
Definition: IAgoraMediaEngine.h:379
long long timestamp
Definition: IAgoraMediaEngine.h:482
Definition: IAgoraMediaEngine.h:286
Definition: IAgoraMediaEngine.h:402
int height
Definition: IAgoraMediaEngine.h:140
VIDEO_FRAME_TYPE
Definition: IAgoraMediaEngine.h:117
Definition: IAgoraMediaEngine.h:285
int samplesPerSec
Definition: IAgoraMediaEngine.h:51
virtual bool onPreEncodeVideoFrame(VideoFrame &videoFrame)
Definition: IAgoraMediaEngine.h:205
virtual void onViewSizeChanged(int width, int height)=0
Definition: IAgoraMediaEngine.h:283
virtual int registerVideoRenderFactory(IExternalVideoRenderFactory *factory)=0
Definition: IAgoraMediaEngine.h:363
float left
Definition: IAgoraMediaEngine.h:390
int zOrder
Definition: IAgoraMediaEngine.h:387
void * uBuffer
Definition: IAgoraMediaEngine.h:155
virtual int copyFrame(IVideoFrame **dest_frame) const =0
IExternalVideoRenderCallback * renderCallback
Definition: IAgoraMediaEngine.h:374
int width
Definition: IAgoraMediaEngine.h:137
int cropLeft
Definition: IAgoraMediaEngine.h:467
virtual int setExternalVideoSource(bool enable, bool useTexture)=0
int rotation
Definition: IAgoraMediaEngine.h:161
Definition: IAgoraMediaEngine.h:292
Definition: IAgoraMediaEngine.h:281
float bottom
Definition: IAgoraMediaEngine.h:399
virtual int pullAudioFrame(IAudioFrameObserver::AudioFrame *frame)=0
Definition: IAgoraMediaEngine.h:293
int cropTop
Definition: IAgoraMediaEngine.h:470
Definition: IAgoraMediaEngine.h:298
int avsync_type
Definition: IAgoraMediaEngine.h:63
int stride
Definition: IAgoraMediaEngine.h:461
VIDEO_BUFFER_TYPE type
Definition: IAgoraMediaEngine.h:452
Definition: IAgoraMediaEngine.h:26
Definition: IAgoraMediaEngine.h:296
MEDIA_SOURCE_TYPE
Definition: IAgoraMediaEngine.h:14
Definition: IAgoraMediaEngine.h:300
Definition: IAgoraMediaEngine.h:299
Definition: IAgoraMediaEngine.h:289
virtual int convertFrame(VIDEO_TYPE dst_video_type, int dst_sample_size, unsigned char *dst_frame) const =0