Agora RTC Objective-C API Reference  Refactor
NGIAgoraVideoFrame.h
Go to the documentation of this file.
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 {
31  kGlTextureOes,
32  kGlTexture2D,
33  };
35  kEglContext10,
36  kEglContext14,
37  };
38 
43  float transform_matrix[16];
44 };
45 
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 
68  uint8_t* data;
69  int size;
70  int stride;
72  : data(NULL), size(0), stride(0) {}
73 };
74 
75 struct ColorSpace {
76  enum PrimaryID {
77  // The indices are equal to the values specified in T-REC H.273 Table 2.
82  PRIMARYID_SMPTE170M = 6, // Identical to BT601
89  PRIMARYID_JEDECP22 = 22, // Identical to EBU3213-E
90  };
91 
92  enum RangeID {
93  // The indices are equal to the values specified at
94  // https://www.webmproject.org/docs/container/#colour for the element Range.
96  // Limited Rec. 709 color range with RGB values ranging from 16 to 235.
98  // Full RGB color range with RGB valees from 0 to 255.
100  // Range is defined by MatrixCoefficients/TransferCharacteristics.
102  };
103 
104  enum MatrixID {
105  // The indices are equal to the values specified in T-REC H.273 Table 4.
120  };
121 
122  enum TransferID {
123  // The indices are equal to the values specified in T-REC H.273 Table 3.
141  };
142 
147 
151 };
152 
159  kRawPixels, // Raw pixels in memory
160  kTexture, // Deprecated Android: GL_TEXTURE_2D/GL_TEXTURE_OES
161  kCVPixelBuffer, // iOS: CVPixelBufferRef
162  kPaddedRawPixels, // Raw pixels with paddings
163  kTextureOES,// Android: GL_TEXTURE_OES
164  kTexture2D, // Android: GL_TEXTURE_2D
165  };
167  union {
168  TextureInfo texture; // Android (To be supported)
169  RawPixelBuffer pixels; // All platform
170  void* cvpixelbuffer; // iOS (To be supported)
171  };
172  int width;
173  int height;
174  int rotation;
176  int64_t timestamp_ms; // Capture time in milli-seconds
177 };
178 
181 };
182 
184  kAlphaChannel,
185  kScreenMetaInfo,
186  kVideoSourceType,
187  kFaceInfo,
188  // Add other types afterwards
189 };
190 
191 struct AlphaChannel {
192  uint8_t* data;
193  int size;
194 };
195 
196 typedef int32_t VideoSourceType;
197 
203  public:
210  virtual int getVideoFrameData(VideoFrameData& data) const = 0;
211 
221  virtual int fillVideoFrameData(const VideoFrameData& data) = 0;
222 
232  virtual int getVideoFrameMetaData(VideoFrameMetaDataType type, void* data) = 0;
233 
243  virtual int fillVideoFrameMetaData(VideoFrameMetaDataType type, const void* data) = 0;
244 
245  protected:
247 };
248 
250  public:
258  const VideoFrameData& data, const VideoFrameMetaDataType* metatypes = NULL, int count = 0) = 0;
259 
260  protected:
262 };
263 
264 } // namespace rtc
265 } // namespace agora
agora::rtc::ColorSpace::MATRIXID_RGB
@ MATRIXID_RGB
Definition: NGIAgoraVideoFrame.h:106
agora::rtc::TextureInfo::TextureType
OPTIONAL_ENUM_CLASS TextureType
Definition: NGIAgoraVideoFrame.h:30
agora::rtc::TextureInfo
Definition: NGIAgoraVideoFrame.h:29
agora::rtc::IVideoFrame::fillVideoFrameMetaData
virtual int fillVideoFrameMetaData(VideoFrameMetaDataType type, const void *data)=0
agora::rtc::ColorSpace::TRANSFERID_SMPTEST2084
@ TRANSFERID_SMPTEST2084
Definition: NGIAgoraVideoFrame.h:138
agora::rtc::IVideoFrameMemoryPool::~IVideoFrameMemoryPool
virtual ~IVideoFrameMemoryPool()
Definition: NGIAgoraVideoFrame.h:261
agora::rtc::ColorSpace::TRANSFERID_ARIB_STD_B67
@ TRANSFERID_ARIB_STD_B67
Definition: NGIAgoraVideoFrame.h:140
agora::rtc::ColorSpace::RANGEID_FULL
@ RANGEID_FULL
Definition: NGIAgoraVideoFrame.h:99
agora::rtc::ColorSpace::TRANSFERID_LINEAR
@ TRANSFERID_LINEAR
Definition: NGIAgoraVideoFrame.h:130
agora::rtc::ColorSpace::MATRIXID_BT709
@ MATRIXID_BT709
Definition: NGIAgoraVideoFrame.h:107
AgoraBase.h
agora::rtc::RawPixelBuffer::data
uint8_t * data
Definition: NGIAgoraVideoFrame.h:62
agora::rtc::ColorSpace::RANGEID_INVALID
@ RANGEID_INVALID
Definition: NGIAgoraVideoFrame.h:95
agora::rtc::ColorSpace::transfer
TransferID transfer
Definition: NGIAgoraVideoFrame.h:144
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::rtc::VideoFrameData::timestamp_ms
int64_t timestamp_ms
Definition: NGIAgoraVideoFrame.h:176
agora::rtc::ColorSpace::PRIMARYID_SMPTEST431
@ PRIMARYID_SMPTEST431
Definition: NGIAgoraVideoFrame.h:87
agora::rtc::ColorSpace::TransferID
TransferID
Definition: NGIAgoraVideoFrame.h:122
agora::rtc::ColorSpace::primaries
PrimaryID primaries
Definition: NGIAgoraVideoFrame.h:143
agora::rtc::AlphaChannel
Definition: NGIAgoraVideoFrame.h:191
agora::rtc::ColorSpace::MATRIXID_BT2020_NCL
@ MATRIXID_BT2020_NCL
Definition: NGIAgoraVideoFrame.h:114
agora::rtc::VideoFrameDataV2::padded_pixels
PaddedRawPixelBuffer padded_pixels
Definition: NGIAgoraVideoFrame.h:180
agora::rtc::ColorSpace::TRANSFERID_IEC61966_2_1
@ TRANSFERID_IEC61966_2_1
Definition: NGIAgoraVideoFrame.h:135
agora::rtc::IVideoFrame::getVideoFrameData
virtual int getVideoFrameData(VideoFrameData &data) const =0
agora::rtc::ColorSpace::matrix
MatrixID matrix
Definition: NGIAgoraVideoFrame.h:145
agora::rtc::VideoFrameData::color_space
ColorSpace color_space
Definition: NGIAgoraVideoFrame.h:175
agora::rtc::ColorSpace::MatrixID
MatrixID
Definition: NGIAgoraVideoFrame.h:104
agora::rtc::ColorSpace::MATRIXID_SMPTE2085
@ MATRIXID_SMPTE2085
Definition: NGIAgoraVideoFrame.h:116
agora::rtc::ColorSpace::PRIMARYID_JEDECP22
@ PRIMARYID_JEDECP22
Definition: NGIAgoraVideoFrame.h:89
agora::rtc::TextureInfo::transform_matrix
float transform_matrix[16]
Definition: NGIAgoraVideoFrame.h:43
agora::rtc::ColorSpace::PRIMARYID_BT2020
@ PRIMARYID_BT2020
Definition: NGIAgoraVideoFrame.h:85
agora::rtc::VideoSourceType
int32_t VideoSourceType
Definition: NGIAgoraVideoFrame.h:196
agora::rtc::RawPixelBuffer::size
int size
Definition: NGIAgoraVideoFrame.h:63
agora::rtc::TextureInfo::shared_context
void * shared_context
Definition: NGIAgoraVideoFrame.h:41
agora::rtc::ColorSpace::MATRIXID_BT470BG
@ MATRIXID_BT470BG
Definition: NGIAgoraVideoFrame.h:110
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::VideoFrameData
Definition: NGIAgoraVideoFrame.h:157
agora::rtc::ColorSpace::TRANSFERID_UNSPECIFIED
@ TRANSFERID_UNSPECIFIED
Definition: NGIAgoraVideoFrame.h:125
agora::rtc::ColorSpace::MATRIXID_UNSPECIFIED
@ MATRIXID_UNSPECIFIED
Definition: NGIAgoraVideoFrame.h:108
OPTIONAL_ENUM_CLASS
#define OPTIONAL_ENUM_CLASS
Definition: NGIAgoraVideoFrame.h:17
agora::rtc::VideoFrameData::rotation
int rotation
Definition: NGIAgoraVideoFrame.h:174
agora::rtc::ColorSpace::TRANSFERID_LOG_SQRT
@ TRANSFERID_LOG_SQRT
Definition: NGIAgoraVideoFrame.h:132
agora::rtc::ColorSpace::TRANSFERID_IEC61966_2_4
@ TRANSFERID_IEC61966_2_4
Definition: NGIAgoraVideoFrame.h:133
agora::rtc::ColorSpace::TRANSFERID_GAMMA28
@ TRANSFERID_GAMMA28
Definition: NGIAgoraVideoFrame.h:127
agora::rtc::ColorSpace::TRANSFERID_SMPTE170M
@ TRANSFERID_SMPTE170M
Definition: NGIAgoraVideoFrame.h:128
agora::rtc::PaddedRawPixelBuffer::format
RawPixelBuffer::Format format
Definition: NGIAgoraVideoFrame.h:67
agora::rtc::ColorSpace::PRIMARYID_SMPTE240M
@ PRIMARYID_SMPTE240M
Definition: NGIAgoraVideoFrame.h:83
agora::rtc::ColorSpace::MATRIXID_CDCLS
@ MATRIXID_CDCLS
Definition: NGIAgoraVideoFrame.h:118
agora::rtc::IVideoFrameMemoryPool
Definition: NGIAgoraVideoFrame.h:249
agora::rtc::ColorSpace::PRIMARYID_UNSPECIFIED
@ PRIMARYID_UNSPECIFIED
Definition: NGIAgoraVideoFrame.h:79
agora::rtc::ColorSpace::PRIMARYID_BT709
@ PRIMARYID_BT709
Definition: NGIAgoraVideoFrame.h:78
agora::rtc::VideoFrameData::cvpixelbuffer
void * cvpixelbuffer
Definition: NGIAgoraVideoFrame.h:170
agora::rtc::ColorSpace::PRIMARYID_SMPTE170M
@ PRIMARYID_SMPTE170M
Definition: NGIAgoraVideoFrame.h:82
agora::rtc::ColorSpace::MATRIXID_YCOCG
@ MATRIXID_YCOCG
Definition: NGIAgoraVideoFrame.h:113
agora::rtc::VideoFrameData::height
int height
Definition: NGIAgoraVideoFrame.h:173
agora::rtc::RawPixelBuffer::Format
OPTIONAL_ENUM_CLASS Format
Definition: NGIAgoraVideoFrame.h:51
agora::rtc::ColorSpace::MATRIXID_SMPTE170M
@ MATRIXID_SMPTE170M
Definition: NGIAgoraVideoFrame.h:111
agora::rtc::VideoFrameMetaDataType
OPTIONAL_ENUM_CLASS VideoFrameMetaDataType
Definition: NGIAgoraVideoFrame.h:183
agora::rtc::ColorSpace::RANGEID_DERIVED
@ RANGEID_DERIVED
Definition: NGIAgoraVideoFrame.h:101
agora::rtc::PaddedRawPixelBuffer::PaddedRawPixelBuffer
PaddedRawPixelBuffer()
Definition: NGIAgoraVideoFrame.h:71
agora::rtc::ColorSpace::TRANSFERID_SMPTE240M
@ TRANSFERID_SMPTE240M
Definition: NGIAgoraVideoFrame.h:129
agora::rtc::ColorSpace::MATRIXID_BT2020_CL
@ MATRIXID_BT2020_CL
Definition: NGIAgoraVideoFrame.h:115
agora::rtc::PaddedRawPixelBuffer::size
int size
Definition: NGIAgoraVideoFrame.h:69
agora::rtc::ColorSpace::TRANSFERID_SMPTEST428
@ TRANSFERID_SMPTEST428
Definition: NGIAgoraVideoFrame.h:139
agora::rtc::ColorSpace
Definition: NGIAgoraVideoFrame.h:75
agora::rtc::ColorSpace::TRANSFERID_BT1361_ECG
@ TRANSFERID_BT1361_ECG
Definition: NGIAgoraVideoFrame.h:134
agora::rtc::ColorSpace::TRANSFERID_LOG
@ TRANSFERID_LOG
Definition: NGIAgoraVideoFrame.h:131
agora::rtc::TextureInfo::texture_type
TextureType texture_type
Definition: NGIAgoraVideoFrame.h:39
agora::rtc::ColorSpace::PRIMARYID_BT470M
@ PRIMARYID_BT470M
Definition: NGIAgoraVideoFrame.h:80
agora::rtc::AlphaChannel::size
int size
Definition: NGIAgoraVideoFrame.h:193
agora::rtc::PaddedRawPixelBuffer::data
uint8_t * data
Definition: NGIAgoraVideoFrame.h:68
agora::rtc::ColorSpace::TRANSFERID_BT2020_12
@ TRANSFERID_BT2020_12
Definition: NGIAgoraVideoFrame.h:137
agora::rtc::PaddedRawPixelBuffer
Definition: NGIAgoraVideoFrame.h:66
agora::rtc::ColorSpace::TRANSFERID_GAMMA22
@ TRANSFERID_GAMMA22
Definition: NGIAgoraVideoFrame.h:126
agora::rtc::ColorSpace::MATRIXID_SMPTE240M
@ MATRIXID_SMPTE240M
Definition: NGIAgoraVideoFrame.h:112
agora::rtc::ColorSpace::PRIMARYID_SMPTEST428
@ PRIMARYID_SMPTEST428
Definition: NGIAgoraVideoFrame.h:86
agora::rtc::VideoFrameData::pixels
RawPixelBuffer pixels
Definition: NGIAgoraVideoFrame.h:169
agora::rtc::ColorSpace::PRIMARYID_FILM
@ PRIMARYID_FILM
Definition: NGIAgoraVideoFrame.h:84
agora::rtc::ColorSpace::MATRIXID_CDNCLS
@ MATRIXID_CDNCLS
Definition: NGIAgoraVideoFrame.h:117
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::rtc::VideoFrameDataV2
Definition: NGIAgoraVideoFrame.h:179
agora::rtc::IVideoFrame::fillVideoFrameData
virtual int fillVideoFrameData(const VideoFrameData &data)=0
agora::rtc::ColorSpace::ColorSpace
ColorSpace()
Definition: NGIAgoraVideoFrame.h:148
agora::rtc::RawPixelBuffer
Definition: NGIAgoraVideoFrame.h:50
agora::rtc::ColorSpace::TRANSFERID_BT709
@ TRANSFERID_BT709
Definition: NGIAgoraVideoFrame.h:124
agora::rtc::ColorSpace::TRANSFERID_BT2020_10
@ TRANSFERID_BT2020_10
Definition: NGIAgoraVideoFrame.h:136
agora::rtc::ColorSpace::PrimaryID
PrimaryID
Definition: NGIAgoraVideoFrame.h:76
agora::rtc::IVideoFrame
Definition: NGIAgoraVideoFrame.h:202
agora::rtc::VideoFrameData::type
Type type
Definition: NGIAgoraVideoFrame.h:166
agora::rtc::ColorSpace::RangeID
RangeID
Definition: NGIAgoraVideoFrame.h:92
agora::rtc::ColorSpace::PRIMARYID_BT470BG
@ PRIMARYID_BT470BG
Definition: NGIAgoraVideoFrame.h:81
agora::rtc::ColorSpace::RANGEID_LIMITED
@ RANGEID_LIMITED
Definition: NGIAgoraVideoFrame.h:97
agora::rtc::ColorSpace::MATRIXID_BT2100_ICTCP
@ MATRIXID_BT2100_ICTCP
Definition: NGIAgoraVideoFrame.h:119
agora::rtc::VideoFrameData::width
int width
Definition: NGIAgoraVideoFrame.h:172
agora::rtc::VideoFrameData::texture
TextureInfo texture
Definition: NGIAgoraVideoFrame.h:168
agora::rtc::ColorSpace::range
RangeID range
Definition: NGIAgoraVideoFrame.h:146
agora::rtc::ColorSpace::MATRIXID_FCC
@ MATRIXID_FCC
Definition: NGIAgoraVideoFrame.h:109
agora::rtc::TextureInfo::context_type
EglContextType context_type
Definition: NGIAgoraVideoFrame.h:40
agora::rtc::IVideoFrame::~IVideoFrame
~IVideoFrame()
Definition: NGIAgoraVideoFrame.h:246
agora::rtc::TextureInfo::texture_id
int texture_id
Definition: NGIAgoraVideoFrame.h:42
agora::rtc::TextureInfo::EglContextType
OPTIONAL_ENUM_CLASS EglContextType
Definition: NGIAgoraVideoFrame.h:34
agora::rtc::IVideoFrameMemoryPool::createVideoFrame
virtual agora::agora_refptr< IVideoFrame > createVideoFrame(const VideoFrameData &data, const VideoFrameMetaDataType *metatypes=NULL, int count=0)=0
agora::rtc::ColorSpace::PRIMARYID_SMPTEST432
@ PRIMARYID_SMPTEST432
Definition: NGIAgoraVideoFrame.h:88
agora::rtc::PaddedRawPixelBuffer::stride
int stride
Definition: NGIAgoraVideoFrame.h:70
agora::rtc::VideoFrameData::Type
OPTIONAL_ENUM_CLASS Type
Definition: NGIAgoraVideoFrame.h:158
agora::rtc::RawPixelBuffer::format
Format format
Definition: NGIAgoraVideoFrame.h:61
agora::rtc::IVideoFrame::getVideoFrameMetaData
virtual int getVideoFrameMetaData(VideoFrameMetaDataType type, void *data)=0
agora::rtc::AlphaChannel::data
uint8_t * data
Definition: NGIAgoraVideoFrame.h:192