Server Gateway SDK v3.8.202.20 for Linux C++
AgoraMediaBase.h
Go to the documentation of this file.
1//
2// Agora Engine SDK
3//
4// Created by Sting Feng in 2017-11.
5// Copyright (c) 2017 Agora.io. All rights reserved.
6
7#pragma once // NOLINT(build/header_guard)
8
9#include <cstring>
10#include <stdint.h>
11#include <limits>
12#include <stddef.h>
13
14#ifndef OPTIONAL_ENUM_SIZE_T
15#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
16#define OPTIONAL_ENUM_SIZE_T enum : size_t
17#else
18#define OPTIONAL_ENUM_SIZE_T enum
19#endif
20#endif
21
22namespace agora {
23namespace rtc {
24
25typedef unsigned int uid_t;
26typedef unsigned int track_id_t;
27typedef unsigned int conn_id_t;
28
29static const unsigned int DEFAULT_CONNECTION_ID = 0;
30static const unsigned int DUMMY_CONNECTION_ID = (std::numeric_limits<unsigned int>::max)();
31
32
34
43};
44
47 size_t channels;
49
51 : sample_rate(0),
52 channels(0),
54};
55
62
68};
69
70} // namespace rtc
71
72namespace media {
134namespace base {
135
136typedef void* view_t;
137
138typedef const char* user_id_t;
139
140static const uint8_t kMaxCodecNameLength = 50;
141
143
146enum MAX_METADATA_SIZE_TYPE {
147 MAX_METADATA_SIZE_IN_BYTE = 1024
148};
149
154struct PacketOptions {
158 uint32_t timestamp;
159 // Audio level indication.
160 uint8_t audioLevelIndication;
161 PacketOptions()
162 : timestamp(0),
163 audioLevelIndication(127) {}
164};
166
175 // Stereo, 32 kHz, 60 ms (2 * 32 * 60)
182 kMaxDataSizeSamples = 3840,
184 kMaxDataSizeBytes = kMaxDataSizeSamples * sizeof(int16_t),
185 };
186
203 int16_t data_[kMaxDataSizeSamples];
204
206 if(this == &src) {
207 return *this;
208 }
209
210 this->capture_timestamp = src.capture_timestamp;
211 this->samples_per_channel_ = src.samples_per_channel_;
212 this->sample_rate_hz_ = src.sample_rate_hz_;
213 this->bytes_per_sample = src.bytes_per_sample;
214 this->num_channels_ = src.num_channels_;
215
216 size_t length = src.samples_per_channel_ * src.num_channels_;
217 if (length > kMaxDataSizeSamples) {
218 length = kMaxDataSizeSamples;
219 }
220
221 memcpy(this->data_, src.data_, length * sizeof(int16_t));
222
223 return *this;
224 }
225
230 num_channels_(0),
232 memset(data_, 0, sizeof(data_));
233 }
234
241 size_t length = src.samples_per_channel_ * src.num_channels_;
242 if (length > kMaxDataSizeSamples) {
243 length = kMaxDataSizeSamples;
244 }
245
246 memcpy(this->data_, src.data_, length * sizeof(int16_t));
247 }
248};
249
251
253enum AUDIO_DUAL_MONO_MODE {
255 AUDIO_DUAL_MONO_STEREO = 0,
257 AUDIO_DUAL_MONO_L = 1,
259 AUDIO_DUAL_MONO_R = 2,
261 AUDIO_DUAL_MONO_MIX = 3
262};
264
266class IAudioFrameObserver {
267 public:
276 virtual void onFrame(AudioPcmFrame* frame) = 0;
277 virtual ~IAudioFrameObserver() {}
278};
280
321};
322
324
327enum RENDER_MODE_TYPE {
332 RENDER_MODE_HIDDEN = 1,
338 RENDER_MODE_FIT = 2,
343 RENDER_MODE_ADAPTIVE = 3,
344};
346
354 buffer(NULL),
355 stride(0),
356 height(0),
357 cropLeft(0),
358 cropTop(0),
359 cropRight(0),
360 cropBottom(0),
361 rotation(0),
362 timestamp(0),
363 eglContext(NULL),
364 eglType(EGL_CONTEXT10),
365 textureId(0),
366 metadata_buffer(NULL),
367 metadata_size(0){}
368
370
373 enum EGL_CONTEXT_TYPE {
377 EGL_CONTEXT10 = 0,
381 EGL_CONTEXT14 = 1,
382 };
384
400 };
401
413 void* buffer;
452 long long timestamp;
454
459 void *eglContext;
463 EGL_CONTEXT_TYPE eglType;
467 int textureId;
471 float matrix[16];
476 uint8_t* metadata_buffer;
481 int metadata_size;
483};
484
491 width(0),
492 height(0),
493 yStride(0),
494 uStride(0),
495 vStride(0),
496 yBuffer(NULL),
497 uBuffer(NULL),
498 vBuffer(NULL),
499 rotation(0),
500 renderTimeMs(0),
501 avsync_type(0),
502 metadata_buffer(NULL),
503 metadata_size(0),
504 sharedContext(0),
505 textureId(0),
506 alphaBuffer(NULL){}
507
515 int width;
535 uint8_t* yBuffer;
539 uint8_t* uBuffer;
543 uint8_t* vBuffer;
560
564 uint8_t* metadata_buffer;
569 int metadata_size;
573 void* sharedContext;
577 int textureId;
581 float matrix[16];
587 uint8_t* alphaBuffer;
589};
590
593 public:
601 virtual void onFrame(const VideoFrame* frame) = 0;
602 virtual ~IVideoFrameObserver() {}
603 virtual bool isExternal() { return true; }
604 virtual VIDEO_PIXEL_FORMAT getVideoPixelFormatPreference() { return VIDEO_PIXEL_UNKNOWN; }
605};
606
607enum MEDIA_PLAYER_SOURCE_TYPE {
613 MEDIA_PLAYER_SOURCE_DEFAULT,
619 MEDIA_PLAYER_SOURCE_FULL_FEATURED,
624 MEDIA_PLAYER_SOURCE_SIMPLE,
625};
627
633};
634
635} // namespace base
636
641 public:
650 };
654 struct AudioFrame {
678 void* buffer;
688
692 channels(0),
693 samplesPerSec(0),
694 buffer(NULL),
695 renderTimeMs(0),
696 avsync_type(0) {}
697 };
698
699 public:
701
710 virtual bool onRecordAudioFrame(const char* channelId, AudioFrame& audioFrame) = 0;
719 virtual bool onPlaybackAudioFrame(const char* channelId, AudioFrame& audioFrame) = 0;
728 virtual bool onMixedAudioFrame(const char* channelId, AudioFrame& audioFrame) = 0;
738 virtual bool onPlaybackAudioFrameBeforeMixing(const char* channelId, base::user_id_t userId, AudioFrame& audioFrame) {
739 (void) channelId;
740 (void) userId;
741 (void) audioFrame;
742 return true;
743 }
744};
745
750 public:
761 virtual bool onPlaybackAudioFrameBeforeMixing(const char* channelId, rtc::uid_t uid, AudioFrame& audioFrame) = 0;
762};
763
768 public:
779 virtual bool OnEncodedVideoFrame(rtc::uid_t uid, const uint8_t* imageBuffer, size_t length,
780 const rtc::EncodedVideoFrameInfo& videoEncodedFrameInfo) = 0;
781
783};
784
789 public:
791
793 PROCESS_MODE_READ_ONLY, // Observer works as a pure renderer and will not modify the original frame.
794 PROCESS_MODE_READ_WRITE, // Observer works as a filter that will process the video frame and affect the following frame processing in SDK.
795 };
796
797 public:
799
801
819 virtual bool onCaptureVideoFrame(VideoFrame& videoFrame) = 0;
821
839 virtual bool onPreEncodeVideoFrame(VideoFrame& videoFrame) = 0;
840
842 virtual bool onSecondaryCameraCaptureVideoFrame(VideoFrame& videoFrame) = 0;
843
861 virtual bool onSecondaryPreEncodeCameraVideoFrame(VideoFrame& videoFrame) = 0;
864
879 virtual bool onScreenCaptureVideoFrame(VideoFrame& videoFrame) = 0;
880
881 virtual bool onPreEncodeScreenVideoFrame(VideoFrame& videoFrame) = 0;
882
899 virtual bool onMediaPlayerVideoFrame(VideoFrame& videoFrame, int mediaPlayerId) = 0;
900
901 virtual bool onSecondaryScreenCaptureVideoFrame(VideoFrame& videoFrame) = 0;
902
903 virtual bool onSecondaryPreEncodeScreenVideoFrame(VideoFrame& videoFrame) = 0;
905
922 virtual bool onRenderVideoFrame(const char* channelId, rtc::uid_t remoteUid, VideoFrame& videoFrame) = 0;
923
924 virtual bool onTranscodedVideoFrame(VideoFrame& videoFrame) = 0;
925
932 }
933
934 /*
935 * Occurs each time needs to get preference video frame type.
936 *
937 * @return preference video pixel format.
938 */
940
948 virtual bool getRotationApplied() { return false; }
949
957 virtual bool getMirrorApplied() { return false; }
958
976 virtual uint32_t getObservedFramePosition() {
978 }
979
987 virtual bool isExternal() { return true; }
988};
989
991
993#define MAX_CONTENT_INSPECT_MODULE_COUNT 32
994enum CONTENT_INSPECT_RESULT {
995 CONTENT_INSPECT_NEUTRAL = 1,
996 CONTENT_INSPECT_SEXY = 2,
997 CONTENT_INSPECT_PORN = 3,
998};
999enum CONTENT_INSPECT_DEVICE_TYPE{
1000 CONTENT_INSPECT_DEVICE_INVALID = 0,
1001 CONTENT_INSPECT_DEVICE_AGORA = 1,
1002 CONTENT_INSPECT_DEVICE_HIVE = 2,
1003 CONTENT_INSPECT_DEVICE_TUPU = 3
1004};
1005enum CONTENT_INSPECT_TYPE {
1009CONTENT_INSPECT_INVALIDE = 0,
1013CONTENT_INSPECT_MODERATION = 1,
1017CONTENT_INSPECT_SUPERVISE = 2
1018};
1019struct ContentInspectModule {
1023 CONTENT_INSPECT_TYPE type;
1027 unsigned int frequency;
1028};
1030
1042};
1043} // namespace media
1044} // namespace agora
Definition: AgoraMediaBase.h:640
virtual bool onPlaybackAudioFrame(const char *channelId, AudioFrame &audioFrame)=0
virtual ~IAudioFrameObserverBase()
Definition: AgoraMediaBase.h:700
AUDIO_FRAME_TYPE
Definition: AgoraMediaBase.h:645
@ FRAME_TYPE_PCM16
Definition: AgoraMediaBase.h:649
virtual bool onRecordAudioFrame(const char *channelId, AudioFrame &audioFrame)=0
virtual bool onMixedAudioFrame(const char *channelId, AudioFrame &audioFrame)=0
virtual bool onPlaybackAudioFrameBeforeMixing(const char *channelId, base::user_id_t userId, AudioFrame &audioFrame)
Definition: AgoraMediaBase.h:738
Definition: AgoraMediaBase.h:749
virtual bool onPlaybackAudioFrameBeforeMixing(const char *channelId, rtc::uid_t uid, AudioFrame &audioFrame)=0
Definition: AgoraMediaBase.h:767
virtual ~IVideoEncodedFrameObserver()
Definition: AgoraMediaBase.h:782
virtual bool OnEncodedVideoFrame(rtc::uid_t uid, const uint8_t *imageBuffer, size_t length, const rtc::EncodedVideoFrameInfo &videoEncodedFrameInfo)=0
Definition: AgoraMediaBase.h:788
virtual base::VIDEO_PIXEL_FORMAT getVideoPixelFormatPreference()
Definition: AgoraMediaBase.h:939
virtual bool isExternal()
Definition: AgoraMediaBase.h:987
virtual bool onRenderVideoFrame(const char *channelId, rtc::uid_t remoteUid, VideoFrame &videoFrame)=0
VIDEO_FRAME_PROCESS_MODE
Definition: AgoraMediaBase.h:792
@ PROCESS_MODE_READ_ONLY
Definition: AgoraMediaBase.h:793
@ PROCESS_MODE_READ_WRITE
Definition: AgoraMediaBase.h:794
virtual ~IVideoFrameObserver()
Definition: AgoraMediaBase.h:798
virtual bool onPreEncodeVideoFrame(VideoFrame &videoFrame)=0
virtual uint32_t getObservedFramePosition()
Definition: AgoraMediaBase.h:976
virtual bool onTranscodedVideoFrame(VideoFrame &videoFrame)=0
media::base::VideoFrame VideoFrame
Definition: AgoraMediaBase.h:790
virtual VIDEO_FRAME_PROCESS_MODE getVideoFrameProcessMode()
Definition: AgoraMediaBase.h:930
virtual bool getMirrorApplied()
Definition: AgoraMediaBase.h:957
virtual bool getRotationApplied()
Definition: AgoraMediaBase.h:948
static const uint8_t kMaxCodecNameLength
Definition: AgoraMediaBase.h:140
VIDEO_MODULE_POSITION
Definition: AgoraMediaBase.h:628
@ POSITION_PRE_RENDERER
Definition: AgoraMediaBase.h:630
@ POSITION_POST_FILTERS
Definition: AgoraMediaBase.h:632
@ POSITION_POST_CAPTURER
Definition: AgoraMediaBase.h:629
@ POSITION_PRE_ENCODER
Definition: AgoraMediaBase.h:631
const char * user_id_t
Definition: AgoraMediaBase.h:138
void * view_t
Definition: AgoraMediaBase.h:136
VIDEO_PIXEL_FORMAT
Definition: AgoraMediaBase.h:284
@ VIDEO_TEXTURE_OES
Definition: AgoraMediaBase.h:316
@ VIDEO_TEXTURE_2D
Definition: AgoraMediaBase.h:312
@ VIDEO_PIXEL_BGRA
Definition: AgoraMediaBase.h:296
@ VIDEO_PIXEL_I420
Definition: AgoraMediaBase.h:292
@ VIDEO_PIXEL_NV21
Definition: AgoraMediaBase.h:300
@ VIDEO_PIXEL_I422
Definition: AgoraMediaBase.h:320
@ VIDEO_PIXEL_UNKNOWN
Definition: AgoraMediaBase.h:288
@ VIDEO_PIXEL_NV12
Definition: AgoraMediaBase.h:308
@ VIDEO_PIXEL_RGBA
Definition: AgoraMediaBase.h:304
MEDIA_SOURCE_TYPE
Definition: AgoraMediaBase.h:76
@ PRIMARY_SCREEN_SOURCE
Definition: AgoraMediaBase.h:96
@ AUDIO_RECORDING_SOURCE
Definition: AgoraMediaBase.h:84
@ RTC_IMAGE_JPEG_SOURCE
Definition: AgoraMediaBase.h:116
@ REMOTE_VIDEO_SOURCE
Definition: AgoraMediaBase.h:124
@ RTC_IMAGE_PNG_SOURCE
Definition: AgoraMediaBase.h:112
@ SECONDARY_CAMERA_SOURCE
Definition: AgoraMediaBase.h:92
@ CUSTOM_VIDEO_SOURCE
Definition: AgoraMediaBase.h:104
@ PRIMARY_CAMERA_SOURCE
Definition: AgoraMediaBase.h:88
@ TRANSCODED_VIDEO_SOURCE
Definition: AgoraMediaBase.h:128
@ MEDIA_PLAYER_SOURCE
Definition: AgoraMediaBase.h:108
@ RTC_IMAGE_GIF_SOURCE
Definition: AgoraMediaBase.h:120
@ AUDIO_PLAYOUT_SOURCE
Definition: AgoraMediaBase.h:80
@ SECONDARY_SCREEN_SOURCE
Definition: AgoraMediaBase.h:100
@ UNKNOWN_MEDIA_SOURCE
Definition: AgoraMediaBase.h:132
EXTERNAL_VIDEO_SOURCE_TYPE
Definition: AgoraMediaBase.h:1033
@ ENCODED_VIDEO_FRAME
Definition: AgoraMediaBase.h:1041
@ VIDEO_FRAME
Definition: AgoraMediaBase.h:1037
unsigned int track_id_t
Definition: AgoraMediaBase.h:26
BYTES_PER_SAMPLE
Definition: AgoraMediaBase.h:38
@ TWO_BYTES_PER_SAMPLE
Definition: AgoraMediaBase.h:42
unsigned int uid_t
Definition: AgoraMediaBase.h:25
unsigned int conn_id_t
Definition: AgoraMediaBase.h:27
static const unsigned int DUMMY_CONNECTION_ID
Definition: AgoraMediaBase.h:30
RAW_AUDIO_FRAME_OP_MODE_TYPE
Definition: AgoraMediaBase.h:56
@ RAW_AUDIO_FRAME_OP_MODE_READ_WRITE
Definition: AgoraMediaBase.h:67
@ RAW_AUDIO_FRAME_OP_MODE_READ_ONLY
Definition: AgoraMediaBase.h:61
static const unsigned int DEFAULT_CONNECTION_ID
Definition: AgoraMediaBase.h:29
Definition: AgoraBase.h:85
AudioFrame()
Definition: AgoraMediaBase.h:689
int channels
Definition: AgoraMediaBase.h:670
int samplesPerChannel
Definition: AgoraMediaBase.h:662
int samplesPerSec
Definition: AgoraMediaBase.h:674
int avsync_type
Definition: AgoraMediaBase.h:687
void * buffer
Definition: AgoraMediaBase.h:678
AUDIO_FRAME_TYPE type
Definition: AgoraMediaBase.h:658
agora::rtc::BYTES_PER_SAMPLE bytesPerSample
Definition: AgoraMediaBase.h:666
int64_t renderTimeMs
Definition: AgoraMediaBase.h:686
Definition: AgoraMediaBase.h:170
rtc::BYTES_PER_SAMPLE bytes_per_sample
Definition: AgoraMediaBase.h:201
AudioPcmFrame()
Definition: AgoraMediaBase.h:226
int sample_rate_hz_
Definition: AgoraMediaBase.h:195
size_t num_channels_
Definition: AgoraMediaBase.h:198
size_t samples_per_channel_
Definition: AgoraMediaBase.h:192
uint32_t capture_timestamp
Definition: AgoraMediaBase.h:189
int16_t data_[kMaxDataSizeSamples]
Definition: AgoraMediaBase.h:203
OPTIONAL_ENUM_SIZE_T
Definition: AgoraMediaBase.h:174
AudioPcmFrame & operator=(const AudioPcmFrame &src)
Definition: AgoraMediaBase.h:205
AudioPcmFrame(const AudioPcmFrame &src)
Definition: AgoraMediaBase.h:235
Definition: AgoraMediaBase.h:350
int cropTop
Definition: AgoraMediaBase.h:432
VIDEO_PIXEL_FORMAT format
Definition: AgoraMediaBase.h:409
int cropLeft
Definition: AgoraMediaBase.h:427
int cropRight
Definition: AgoraMediaBase.h:437
int stride
Definition: AgoraMediaBase.h:418
void * buffer
Definition: AgoraMediaBase.h:413
int cropBottom
Definition: AgoraMediaBase.h:442
int height
Definition: AgoraMediaBase.h:422
ExternalVideoFrame()
Definition: AgoraMediaBase.h:351
long long timestamp
Definition: AgoraMediaBase.h:452
VIDEO_BUFFER_TYPE
Definition: AgoraMediaBase.h:387
@ VIDEO_BUFFER_RAW_DATA
Definition: AgoraMediaBase.h:391
@ VIDEO_BUFFER_ARRAY
Definition: AgoraMediaBase.h:395
@ VIDEO_BUFFER_TEXTURE
Definition: AgoraMediaBase.h:399
int rotation
Definition: AgoraMediaBase.h:447
VIDEO_BUFFER_TYPE type
Definition: AgoraMediaBase.h:405
Definition: AgoraMediaBase.h:488
int uStride
Definition: AgoraMediaBase.h:527
int rotation
Definition: AgoraMediaBase.h:547
VideoFrame()
Definition: AgoraMediaBase.h:489
VIDEO_PIXEL_FORMAT type
Definition: AgoraMediaBase.h:511
int vStride
Definition: AgoraMediaBase.h:531
int avsync_type
Definition: AgoraMediaBase.h:558
uint8_t * vBuffer
Definition: AgoraMediaBase.h:543
uint8_t * yBuffer
Definition: AgoraMediaBase.h:535
int yStride
Definition: AgoraMediaBase.h:523
int height
Definition: AgoraMediaBase.h:519
int width
Definition: AgoraMediaBase.h:515
uint8_t * uBuffer
Definition: AgoraMediaBase.h:539
int64_t renderTimeMs
Definition: AgoraMediaBase.h:554
Definition: AgoraMediaBase.h:45
size_t channels
Definition: AgoraMediaBase.h:47
int sample_rate
Definition: AgoraMediaBase.h:46
AudioParameters()
Definition: AgoraMediaBase.h:50
size_t frames_per_buffer
Definition: AgoraMediaBase.h:48
Definition: AgoraBase.h:1817