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