Agora C++ API Reference for All Platforms
NGIAgoraVideoFrame.h
1 
2 // Copyright (c) 2020 Agora.io. All rights reserved
3 
4 // This program is confidential and proprietary to Agora.io.
5 // And may not be copied, reproduced, modified, disclosed to others, published
6 // or used, in whole or in part, without the express prior written permission
7 // of Agora.io.
8 
9 #pragma once // NOLINT(build/header_guard)
10 
11 #include "AgoraBase.h"
12 
13 #ifndef OPTIONAL_ENUM_CLASS
14 #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800)
15 #define OPTIONAL_ENUM_CLASS enum class
16 #else
17 #define OPTIONAL_ENUM_CLASS enum
18 #endif
19 #endif
20 
21 namespace agora {
22 namespace rtc {
23 
29 struct TextureInfo {
30  OPTIONAL_ENUM_CLASS TextureType {
31  kGlTexture2D,
32  kGlTextureOes,
33  };
34  OPTIONAL_ENUM_CLASS EglContextType {
35  kEglContext10,
36  kEglContext14,
37  };
38 
43  float transform_matrix[16];
44 };
45 
51  OPTIONAL_ENUM_CLASS Format {
52  kUnknown,
53  kI420,
54  kI422,
55  kNV21,
56  kNV12,
57  kRGBA,
58  kARGB,
59  kBGRA
60  };
62  uint8_t* data;
63  int size;
64 };
65 
66 struct ColorSpace {
67  enum PrimaryID {
68  // The indices are equal to the values specified in T-REC H.273 Table 2.
73  PRIMARYID_SMPTE170M = 6, // Identical to BT601
80  PRIMARYID_JEDECP22 = 22, // Identical to EBU3213-E
81  };
82 
83  enum RangeID {
84  // The indices are equal to the values specified at
85  // https://www.webmproject.org/docs/container/#colour for the element Range.
87  // Limited Rec. 709 color range with RGB values ranging from 16 to 235.
89  // Full RGB color range with RGB valees from 0 to 255.
91  // Range is defined by MatrixCoefficients/TransferCharacteristics.
93  };
94 
95  enum MatrixID {
96  // The indices are equal to the values specified in T-REC H.273 Table 4.
111  };
112 
113  enum TransferID {
114  // The indices are equal to the values specified in T-REC H.273 Table 3.
132  };
133 
138 
142 };
143 
149  OPTIONAL_ENUM_CLASS Type {
150  kRawPixels, // Raw pixels in memory
151  kTexture, // Android: GL_TEXTURE_2D/GL_TEXTURE_OES
152  kCVPixelBuffer, // iOS: CVPixelBufferRef
153  };
155  union {
156  TextureInfo texture; // Android (To be supported)
157  RawPixelBuffer pixels; // All platform
158  void* cvpixelbuffer; // iOS (To be supported)
159  };
160  int width;
161  int height;
162  int rotation;
164  int64_t timestamp_ms; // Capture time in milli-seconds
165 };
166 
167 OPTIONAL_ENUM_CLASS VideoFrameMetaDataType {
168  kAlphaChannel,
169  // Add other types afterwards
170 };
171 
172 struct AlphaChannel {
173  uint8_t* data;
174  int size;
175 };
176 
182  public:
189  virtual int getVideoFrameData(VideoFrameData& data) const = 0;
190 
200  virtual int fillVideoFrameData(const VideoFrameData& data) = 0;
201 
211  virtual int getVideoFrameMetaData(VideoFrameMetaDataType type, void* data) = 0;
212 
222  virtual int fillVideoFrameMetaData(VideoFrameMetaDataType type, const void* data) = 0;
223 
224  protected:
226 };
227 
229  public:
237  const VideoFrameData& data, const VideoFrameMetaDataType* metatypes = NULL, int count = 0) = 0;
238 
239  protected:
241 };
242 
243 } // namespace rtc
244 } // namespace agora
agora::rtc::TextureInfo
Definition: NGIAgoraVideoFrame.h:29
agora::rtc::ColorSpace::MATRIXID_CDCLS
@ MATRIXID_CDCLS
Definition: NGIAgoraVideoFrame.h:109
agora::rtc::ColorSpace::TRANSFERID_BT2020_12
@ TRANSFERID_BT2020_12
Definition: NGIAgoraVideoFrame.h:128
agora::rtc::ColorSpace::TRANSFERID_LINEAR
@ TRANSFERID_LINEAR
Definition: NGIAgoraVideoFrame.h:121
agora::rtc::ColorSpace::MATRIXID_YCOCG
@ MATRIXID_YCOCG
Definition: NGIAgoraVideoFrame.h:104
agora::rtc::ColorSpace::TRANSFERID_SMPTEST428
@ TRANSFERID_SMPTEST428
Definition: NGIAgoraVideoFrame.h:130
agora::rtc::ColorSpace::PRIMARYID_SMPTEST428
@ PRIMARYID_SMPTEST428
Definition: NGIAgoraVideoFrame.h:77
agora::rtc::VideoFrameData::width
int width
Definition: NGIAgoraVideoFrame.h:160
agora::rtc::ColorSpace::PRIMARYID_JEDECP22
@ PRIMARYID_JEDECP22
Definition: NGIAgoraVideoFrame.h:80
agora::rtc::ColorSpace::TRANSFERID_UNSPECIFIED
@ TRANSFERID_UNSPECIFIED
Definition: NGIAgoraVideoFrame.h:116
agora::rtc::ColorSpace::TRANSFERID_BT2020_10
@ TRANSFERID_BT2020_10
Definition: NGIAgoraVideoFrame.h:127
agora::rtc::ColorSpace::TRANSFERID_IEC61966_2_1
@ TRANSFERID_IEC61966_2_1
Definition: NGIAgoraVideoFrame.h:126
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::rtc::ColorSpace::PRIMARYID_SMPTEST432
@ PRIMARYID_SMPTEST432
Definition: NGIAgoraVideoFrame.h:79
agora::rtc::ColorSpace::MATRIXID_BT2020_CL
@ MATRIXID_BT2020_CL
Definition: NGIAgoraVideoFrame.h:106
agora::rtc::IVideoFrameMemoryPool::createVideoFrame
virtual agora::agora_refptr< IVideoFrame > createVideoFrame(const VideoFrameData &data, const VideoFrameMetaDataType *metatypes=NULL, int count=0)=0
agora::rtc::ColorSpace::range
RangeID range
Definition: NGIAgoraVideoFrame.h:137
agora::rtc::AlphaChannel
Definition: NGIAgoraVideoFrame.h:172
agora::rtc::ColorSpace::PRIMARYID_SMPTE170M
@ PRIMARYID_SMPTE170M
Definition: NGIAgoraVideoFrame.h:73
agora::rtc::VideoFrameData::pixels
RawPixelBuffer pixels
Definition: NGIAgoraVideoFrame.h:157
agora::rtc::ColorSpace::MATRIXID_BT2100_ICTCP
@ MATRIXID_BT2100_ICTCP
Definition: NGIAgoraVideoFrame.h:110
agora::rtc::VideoFrameMetaDataType
OPTIONAL_ENUM_CLASS VideoFrameMetaDataType
Definition: NGIAgoraVideoFrame.h:167
agora::rtc::ColorSpace::TRANSFERID_SMPTE240M
@ TRANSFERID_SMPTE240M
Definition: NGIAgoraVideoFrame.h:120
agora::rtc::AlphaChannel::data
uint8_t * data
Definition: NGIAgoraVideoFrame.h:173
agora::rtc::VideoFrameData::timestamp_ms
int64_t timestamp_ms
Definition: NGIAgoraVideoFrame.h:164
agora::rtc::TextureInfo::context_type
EglContextType context_type
Definition: NGIAgoraVideoFrame.h:40
agora::rtc::ColorSpace::primaries
PrimaryID primaries
Definition: NGIAgoraVideoFrame.h:134
agora::rtc::ColorSpace::TRANSFERID_IEC61966_2_4
@ TRANSFERID_IEC61966_2_4
Definition: NGIAgoraVideoFrame.h:124
agora::rtc::ColorSpace::transfer
TransferID transfer
Definition: NGIAgoraVideoFrame.h:135
agora::rtc::ColorSpace::MATRIXID_SMPTE170M
@ MATRIXID_SMPTE170M
Definition: NGIAgoraVideoFrame.h:102
agora::rtc::ColorSpace::TRANSFERID_GAMMA22
@ TRANSFERID_GAMMA22
Definition: NGIAgoraVideoFrame.h:117
agora::rtc::ColorSpace::PRIMARYID_UNSPECIFIED
@ PRIMARYID_UNSPECIFIED
Definition: NGIAgoraVideoFrame.h:70
agora::rtc::ColorSpace::PRIMARYID_SMPTE240M
@ PRIMARYID_SMPTE240M
Definition: NGIAgoraVideoFrame.h:74
agora::rtc::VideoFrameData::height
int height
Definition: NGIAgoraVideoFrame.h:161
agora::rtc::TextureInfo::EglContextType
OPTIONAL_ENUM_CLASS EglContextType
Definition: NGIAgoraVideoFrame.h:34
agora::rtc::VideoFrameData::texture
TextureInfo texture
Definition: NGIAgoraVideoFrame.h:156
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::VideoFrameData
Definition: NGIAgoraVideoFrame.h:148
agora::rtc::ColorSpace::TransferID
TransferID
Definition: NGIAgoraVideoFrame.h:113
agora::rtc::TextureInfo::TextureType
OPTIONAL_ENUM_CLASS TextureType
Definition: NGIAgoraVideoFrame.h:30
agora::rtc::ColorSpace::MatrixID
MatrixID
Definition: NGIAgoraVideoFrame.h:95
agora::rtc::ColorSpace::PRIMARYID_SMPTEST431
@ PRIMARYID_SMPTEST431
Definition: NGIAgoraVideoFrame.h:78
agora::rtc::RawPixelBuffer::format
Format format
Definition: NGIAgoraVideoFrame.h:61
agora::rtc::VideoFrameData::Type
OPTIONAL_ENUM_CLASS Type
Definition: NGIAgoraVideoFrame.h:149
agora::rtc::ColorSpace::MATRIXID_SMPTE240M
@ MATRIXID_SMPTE240M
Definition: NGIAgoraVideoFrame.h:103
agora::rtc::ColorSpace::matrix
MatrixID matrix
Definition: NGIAgoraVideoFrame.h:136
agora::rtc::ColorSpace::TRANSFERID_GAMMA28
@ TRANSFERID_GAMMA28
Definition: NGIAgoraVideoFrame.h:118
agora::rtc::IVideoFrame::getVideoFrameMetaData
virtual int getVideoFrameMetaData(VideoFrameMetaDataType type, void *data)=0
agora::rtc::ColorSpace::PRIMARYID_BT709
@ PRIMARYID_BT709
Definition: NGIAgoraVideoFrame.h:69
agora::rtc::IVideoFrameMemoryPool
Definition: NGIAgoraVideoFrame.h:228
agora::rtc::ColorSpace::MATRIXID_BT2020_NCL
@ MATRIXID_BT2020_NCL
Definition: NGIAgoraVideoFrame.h:105
agora::rtc::ColorSpace::TRANSFERID_LOG
@ TRANSFERID_LOG
Definition: NGIAgoraVideoFrame.h:122
agora::rtc::ColorSpace::MATRIXID_CDNCLS
@ MATRIXID_CDNCLS
Definition: NGIAgoraVideoFrame.h:108
agora::rtc::VideoFrameData::rotation
int rotation
Definition: NGIAgoraVideoFrame.h:162
agora::rtc::ColorSpace::PRIMARYID_BT470M
@ PRIMARYID_BT470M
Definition: NGIAgoraVideoFrame.h:71
agora::rtc::ColorSpace::RANGEID_DERIVED
@ RANGEID_DERIVED
Definition: NGIAgoraVideoFrame.h:92
agora::rtc::VideoFrameData::cvpixelbuffer
void * cvpixelbuffer
Definition: NGIAgoraVideoFrame.h:158
agora::rtc::ColorSpace::PRIMARYID_BT470BG
@ PRIMARYID_BT470BG
Definition: NGIAgoraVideoFrame.h:72
agora::rtc::IVideoFrame::getVideoFrameData
virtual int getVideoFrameData(VideoFrameData &data) const =0
agora::rtc::RawPixelBuffer::Format
OPTIONAL_ENUM_CLASS Format
Definition: NGIAgoraVideoFrame.h:51
agora::rtc::ColorSpace
Definition: NGIAgoraVideoFrame.h:66
agora::rtc::ColorSpace::TRANSFERID_SMPTEST2084
@ TRANSFERID_SMPTEST2084
Definition: NGIAgoraVideoFrame.h:129
agora::rtc::ColorSpace::RANGEID_FULL
@ RANGEID_FULL
Definition: NGIAgoraVideoFrame.h:90
agora::rtc::VideoFrameData::type
Type type
Definition: NGIAgoraVideoFrame.h:154
agora::rtc::ColorSpace::RangeID
RangeID
Definition: NGIAgoraVideoFrame.h:83
agora::rtc::ColorSpace::TRANSFERID_BT1361_ECG
@ TRANSFERID_BT1361_ECG
Definition: NGIAgoraVideoFrame.h:125
agora::rtc::RawPixelBuffer::data
uint8_t * data
Definition: NGIAgoraVideoFrame.h:62
agora::rtc::IVideoFrameMemoryPool::~IVideoFrameMemoryPool
virtual ~IVideoFrameMemoryPool()
Definition: NGIAgoraVideoFrame.h:240
agora::rtc::ColorSpace::MATRIXID_BT470BG
@ MATRIXID_BT470BG
Definition: NGIAgoraVideoFrame.h:101
agora::rtc::ColorSpace::TRANSFERID_SMPTE170M
@ TRANSFERID_SMPTE170M
Definition: NGIAgoraVideoFrame.h:119
agora::rtc::TextureInfo::transform_matrix
float transform_matrix[16]
Definition: NGIAgoraVideoFrame.h:43
agora::rtc::RawPixelBuffer::size
int size
Definition: NGIAgoraVideoFrame.h:63
agora::rtc::ColorSpace::TRANSFERID_BT709
@ TRANSFERID_BT709
Definition: NGIAgoraVideoFrame.h:115
agora::rtc::ColorSpace::PRIMARYID_BT2020
@ PRIMARYID_BT2020
Definition: NGIAgoraVideoFrame.h:76
agora::rtc::ColorSpace::MATRIXID_SMPTE2085
@ MATRIXID_SMPTE2085
Definition: NGIAgoraVideoFrame.h:107
agora::rtc::ColorSpace::MATRIXID_UNSPECIFIED
@ MATRIXID_UNSPECIFIED
Definition: NGIAgoraVideoFrame.h:99
agora::rtc::ColorSpace::RANGEID_LIMITED
@ RANGEID_LIMITED
Definition: NGIAgoraVideoFrame.h:88
agora::rtc::TextureInfo::texture_id
int texture_id
Definition: NGIAgoraVideoFrame.h:42
agora::rtc::ColorSpace::PRIMARYID_FILM
@ PRIMARYID_FILM
Definition: NGIAgoraVideoFrame.h:75
agora::rtc::AlphaChannel::size
int size
Definition: NGIAgoraVideoFrame.h:174
agora::rtc::IVideoFrame::fillVideoFrameMetaData
virtual int fillVideoFrameMetaData(VideoFrameMetaDataType type, const void *data)=0
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::rtc::VideoFrameData::color_space
ColorSpace color_space
Definition: NGIAgoraVideoFrame.h:163
agora::rtc::ColorSpace::MATRIXID_RGB
@ MATRIXID_RGB
Definition: NGIAgoraVideoFrame.h:97
agora::rtc::RawPixelBuffer
Definition: NGIAgoraVideoFrame.h:50
agora::rtc::IVideoFrame::fillVideoFrameData
virtual int fillVideoFrameData(const VideoFrameData &data)=0
agora::rtc::IVideoFrame::~IVideoFrame
~IVideoFrame()
Definition: NGIAgoraVideoFrame.h:225
agora::rtc::ColorSpace::TRANSFERID_LOG_SQRT
@ TRANSFERID_LOG_SQRT
Definition: NGIAgoraVideoFrame.h:123
agora::rtc::IVideoFrame
Definition: NGIAgoraVideoFrame.h:181
agora::rtc::ColorSpace::PrimaryID
PrimaryID
Definition: NGIAgoraVideoFrame.h:67
agora::rtc::ColorSpace::ColorSpace
ColorSpace()
Definition: NGIAgoraVideoFrame.h:139
agora::rtc::TextureInfo::texture_type
TextureType texture_type
Definition: NGIAgoraVideoFrame.h:39
agora::rtc::ColorSpace::MATRIXID_FCC
@ MATRIXID_FCC
Definition: NGIAgoraVideoFrame.h:100
agora::rtc::TextureInfo::shared_context
void * shared_context
Definition: NGIAgoraVideoFrame.h:41
agora::rtc::ColorSpace::RANGEID_INVALID
@ RANGEID_INVALID
Definition: NGIAgoraVideoFrame.h:86
rtc
Definition: video_node_i.h:27
agora::rtc::ColorSpace::TRANSFERID_ARIB_STD_B67
@ TRANSFERID_ARIB_STD_B67
Definition: NGIAgoraVideoFrame.h:131
agora::rtc::ColorSpace::MATRIXID_BT709
@ MATRIXID_BT709
Definition: NGIAgoraVideoFrame.h:98