Agora C++ API Reference for All Platforms
IAgoraMediaEngine.h
1 #ifndef AGORA_MEDIA_ENGINE_H
2 #define AGORA_MEDIA_ENGINE_H
3 #include <stdint.h>
4 
5 namespace agora {
6 namespace media {
16 };
17 
22  public:
26  FRAME_TYPE_PCM16 = 0, // PCM 16bit little endian
27  };
29  struct AudioFrame {
35  int samples; //number of samples for each channel in this frame
38  int bytesPerSample; //number of bytes per sample: 2 for PCM16
43  int channels; //number of channels (data are interleaved if stereo)
46  int samplesPerSec; //sampling rate
50  void* buffer; //data buffer
55  int64_t renderTimeMs;
59  };
60 
61  public:
71  virtual bool onRecordAudioFrame(AudioFrame& audioFrame) = 0;
79  virtual bool onPlaybackAudioFrame(AudioFrame& audioFrame) = 0;
91  virtual bool onMixedAudioFrame(AudioFrame& audioFrame) = 0;
102  virtual bool onPlaybackAudioFrameBeforeMixing(unsigned int uid,
103  AudioFrame& audioFrame) = 0;
104 };
105 
110  public:
116  FRAME_TYPE_YUV420 = 0, // YUV 420 format
120  FRAME_TYPE_YUV422 = 1, // YUV 422 format
124  FRAME_TYPE_RGBA = 2, // RGBA format
125  };
142  };
145  struct VideoFrame {
149  int width; //width of video frame
152  int height; //height of video frame
155  int yStride; //stride of Y data buffer
158  int uStride; //stride of U data buffer
161  int vStride; //stride of V data buffer
164  void* yBuffer; //Y data buffer
167  void* uBuffer; //U data buffer
170  void* vBuffer; //V data buffer
173  int rotation; // rotation of this frame (0, 90, 180, 270)
179  int64_t renderTimeMs;
181  };
182 
183  public:
199  virtual bool onCaptureVideoFrame(VideoFrame& videoFrame) = 0;
216  virtual bool onPreEncodeVideoFrame(VideoFrame& videoFrame) { return true; }
233  virtual bool onRenderVideoFrame(unsigned int uid, VideoFrame& videoFrame) = 0;
259  virtual bool getRotationApplied() { return false; }
274  virtual bool getMirrorApplied() { return false; }
287  virtual bool getSmoothRenderingEnabled(){ return false; }
306  virtual uint32_t getObservedFramePosition() { return static_cast<uint32_t>(POSITION_POST_CAPTURER | POSITION_PRE_RENDERER); }
307 };
308 
309 class IVideoFrame {
310  public:
311  enum PLANE_TYPE {
312  Y_PLANE = 0,
313  U_PLANE = 1,
314  V_PLANE = 2,
316  };
317  enum VIDEO_TYPE {
336  };
337  virtual void release() = 0;
338  virtual const unsigned char* buffer(PLANE_TYPE type) const = 0;
339 
349  virtual int copyFrame(IVideoFrame** dest_frame) const = 0;
361  virtual int convertFrame(VIDEO_TYPE dst_video_type, int dst_sample_size,
362  unsigned char* dst_frame) const = 0;
367  virtual int allocated_size(PLANE_TYPE type) const = 0;
372  virtual int stride(PLANE_TYPE type) const = 0;
375  virtual int width() const = 0;
378  virtual int height() const = 0;
381  virtual unsigned int timestamp() const = 0;
384  virtual int64_t render_time_ms() const = 0;
391  virtual bool IsZeroSize() const = 0;
392 
393  virtual VIDEO_TYPE GetVideoType() const = 0;
394 };
397  public:
400  virtual void onViewSizeChanged(int width, int height) = 0;
403  virtual void onViewDestroyed() = 0;
404 };
410  void* view;
420  int zOrder;
423  float left;
426  float top;
429  float right;
432  float bottom;
433 };
434 
436  public:
437  virtual void release() = 0;
438  virtual int initialize() = 0;
439  virtual int deliverFrame(const IVideoFrame& videoFrame, int rotation,
440  bool mirrored) = 0;
441 };
442 
444  public:
446  const ExternalVideoRenerContext& context) = 0;
447 };
448 
452 {
456  {
460  };
461 
465  {
481  };
482 
491  void* buffer;
494  int stride;
497  int height;
500  int cropLeft;
503  int cropTop;
512  int rotation;
515  long long timestamp;
516 };
517 
519  public:
520  virtual ~IMediaEngine () {};
521  virtual void release() = 0;
531  virtual int registerAudioFrameObserver(IAudioFrameObserver* observer) = 0;
543  virtual int registerVideoFrameObserver(IVideoFrameObserver* observer) = 0;
560  virtual int pushAudioFrame(MEDIA_SOURCE_TYPE type,
562  bool wrap) = 0;
571  virtual int pushAudioFrame(IAudioFrameObserver::AudioFrame* frame) = 0;
607  virtual int pullAudioFrame(IAudioFrameObserver::AudioFrame* frame) = 0;
622  virtual int setExternalVideoSource(bool enable, bool useTexture) = 0;
633  virtual int pushVideoFrame(ExternalVideoFrame *frame) = 0;
634 };
635 
636 } // namespace media
637 
638 } // namespace agora
639 
640 #endif // AGORA_MEDIA_ENGINE_H
Definition: IAgoraMediaEngine.h:443
virtual int pushAudioFrame(MEDIA_SOURCE_TYPE type, IAudioFrameObserver::AudioFrame *frame, bool wrap)=0
virtual int width() const =0
Definition: IAgoraMediaEngine.h:480
int samples
Definition: IAgoraMediaEngine.h:35
int avsync_type
Definition: IAgoraMediaEngine.h:180
Definition: IAgoraMediaEngine.h:26
int64_t renderTimeMs
Definition: IAgoraMediaEngine.h:179
void * buffer
Definition: IAgoraMediaEngine.h:50
virtual bool getMirrorApplied()
Definition: IAgoraMediaEngine.h:274
int bytesPerSample
Definition: IAgoraMediaEngine.h:38
VIDEO_FRAME_TYPE type
Definition: IAgoraMediaEngine.h:146
Definition: IAgoraMediaEngine.h:335
virtual void release()=0
Definition: AgoraBase.h:41
VIDEO_TYPE
Definition: IAgoraMediaEngine.h:317
virtual bool onCaptureVideoFrame(VideoFrame &videoFrame)=0
int cropRight
Definition: IAgoraMediaEngine.h:506
virtual const unsigned char * buffer(PLANE_TYPE type) const =0
VIDEO_BUFFER_TYPE
Definition: IAgoraMediaEngine.h:455
AUDIO_FRAME_TYPE type
Definition: IAgoraMediaEngine.h:32
virtual IExternalVideoRender * createRenderInstance(const ExternalVideoRenerContext &context)=0
virtual VIDEO_FRAME_TYPE getVideoFormatPreference()
Definition: IAgoraMediaEngine.h:245
virtual ~IMediaEngine()
Definition: IAgoraMediaEngine.h:520
Definition: IAgoraMediaEngine.h:328
Definition: IAgoraMediaEngine.h:334
Definition: IAgoraMediaEngine.h:327
virtual unsigned int timestamp() const =0
Definition: IAgoraMediaEngine.h:406
int cropBottom
Definition: IAgoraMediaEngine.h:509
virtual bool onMixedAudioFrame(AudioFrame &audioFrame)=0
virtual int pushVideoFrame(ExternalVideoFrame *frame)=0
Definition: IAgoraMediaEngine.h:320
void * buffer
Definition: IAgoraMediaEngine.h:491
VIDEO_PIXEL_FORMAT format
Definition: IAgoraMediaEngine.h:488
AUDIO_FRAME_TYPE
Definition: IAgoraMediaEngine.h:24
Definition: IAgoraMediaEngine.h:324
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:43
Definition: IAgoraMediaEngine.h:312
Definition: IAgoraMediaEngine.h:313
virtual bool IsZeroSize() const =0
int vStride
Definition: IAgoraMediaEngine.h:161
Definition: IAgoraMediaEngine.h:12
Definition: IAgoraMediaEngine.h:321
int yStride
Definition: IAgoraMediaEngine.h:155
float right
Definition: IAgoraMediaEngine.h:429
virtual uint32_t getObservedFramePosition()
Definition: IAgoraMediaEngine.h:306
Definition: IAgoraMediaEngine.h:120
virtual int allocated_size(PLANE_TYPE type) const =0
void * view
Definition: IAgoraMediaEngine.h:410
Definition: IAgoraMediaEngine.h:29
virtual int64_t render_time_ms() const =0
Definition: IAgoraMediaEngine.h:124
int64_t renderTimeMs
Definition: IAgoraMediaEngine.h:55
virtual bool onPlaybackAudioFrameBeforeMixing(unsigned int uid, AudioFrame &audioFrame)=0
virtual int height() const =0
void * vBuffer
Definition: IAgoraMediaEngine.h:170
Definition: IAgoraMediaEngine.h:15
Definition: IAgoraMediaEngine.h:471
void * yBuffer
Definition: IAgoraMediaEngine.h:164
int height
Definition: IAgoraMediaEngine.h:497
virtual bool onRenderVideoFrame(unsigned int uid, VideoFrame &videoFrame)=0
virtual int registerVideoFrameObserver(IVideoFrameObserver *observer)=0
Definition: IAgoraMediaEngine.h:518
Definition: IAgoraMediaEngine.h:116
Definition: IAgoraMediaEngine.h:474
Definition: IAgoraMediaEngine.h:330
Definition: IAgoraMediaEngine.h:145
float top
Definition: IAgoraMediaEngine.h:426
virtual VIDEO_TYPE GetVideoType() const =0
Definition: IAgoraMediaEngine.h:323
int rotation
Definition: IAgoraMediaEngine.h:512
virtual bool getRotationApplied()
Definition: IAgoraMediaEngine.h:259
Definition: IAgoraMediaEngine.h:451
Definition: IAgoraMediaEngine.h:314
virtual void release()=0
virtual bool onPlaybackAudioFrame(AudioFrame &audioFrame)=0
virtual bool getSmoothRenderingEnabled()
Definition: IAgoraMediaEngine.h:287
virtual int deliverFrame(const IVideoFrame &videoFrame, int rotation, bool mirrored)=0
PLANE_TYPE
Definition: IAgoraMediaEngine.h:311
int uStride
Definition: IAgoraMediaEngine.h:158
Definition: IAgoraMediaEngine.h:477
Definition: IAgoraMediaEngine.h:109
VIDEO_PIXEL_FORMAT
Definition: IAgoraMediaEngine.h:464
int renderMode
Definition: IAgoraMediaEngine.h:412
long long timestamp
Definition: IAgoraMediaEngine.h:515
Definition: IAgoraMediaEngine.h:319
Definition: IAgoraMediaEngine.h:435
int height
Definition: IAgoraMediaEngine.h:152
VIDEO_FRAME_TYPE
Definition: IAgoraMediaEngine.h:112
Definition: IAgoraMediaEngine.h:318
int samplesPerSec
Definition: IAgoraMediaEngine.h:46
virtual bool onPreEncodeVideoFrame(VideoFrame &videoFrame)
Definition: IAgoraMediaEngine.h:216
virtual void onViewSizeChanged(int width, int height)=0
Definition: IAgoraMediaEngine.h:315
virtual int registerVideoRenderFactory(IExternalVideoRenderFactory *factory)=0
Definition: IAgoraMediaEngine.h:396
float left
Definition: IAgoraMediaEngine.h:423
int zOrder
Definition: IAgoraMediaEngine.h:420
void * uBuffer
Definition: IAgoraMediaEngine.h:167
virtual int copyFrame(IVideoFrame **dest_frame) const =0
IExternalVideoRenderCallback * renderCallback
Definition: IAgoraMediaEngine.h:407
int width
Definition: IAgoraMediaEngine.h:149
int cropLeft
Definition: IAgoraMediaEngine.h:500
virtual int setExternalVideoSource(bool enable, bool useTexture)=0
int rotation
Definition: IAgoraMediaEngine.h:173
Definition: IAgoraMediaEngine.h:325
Definition: IAgoraMediaEngine.h:309
float bottom
Definition: IAgoraMediaEngine.h:432
virtual int pullAudioFrame(IAudioFrameObserver::AudioFrame *frame)=0
Definition: IAgoraMediaEngine.h:326
int cropTop
Definition: IAgoraMediaEngine.h:503
Definition: IAgoraMediaEngine.h:331
int avsync_type
Definition: IAgoraMediaEngine.h:58
int stride
Definition: IAgoraMediaEngine.h:494
VIDEO_BUFFER_TYPE type
Definition: IAgoraMediaEngine.h:485
Definition: IAgoraMediaEngine.h:21
Definition: IAgoraMediaEngine.h:329
VIDEO_OBSERVER_POSITION
Definition: IAgoraMediaEngine.h:129
MEDIA_SOURCE_TYPE
Definition: IAgoraMediaEngine.h:9
Definition: IAgoraMediaEngine.h:333
Definition: IAgoraMediaEngine.h:332
Definition: IAgoraMediaEngine.h:322
virtual int convertFrame(VIDEO_TYPE dst_video_type, int dst_sample_size, unsigned char *dst_frame) const =0