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