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  kRGBA,
58  kARGB,
59  kBGRA
60  };
61  Format format;
62  uint8_t* data;
63  int size;
64 };
65 
67  RawPixelBuffer::Format format;
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.
78  PRIMARYID_BT709 = 1,
79  PRIMARYID_UNSPECIFIED = 2,
80  PRIMARYID_BT470M = 4,
81  PRIMARYID_BT470BG = 5,
82  PRIMARYID_SMPTE170M = 6, // Identical to BT601
83  PRIMARYID_SMPTE240M = 7,
84  PRIMARYID_FILM = 8,
85  PRIMARYID_BT2020 = 9,
86  PRIMARYID_SMPTEST428 = 10,
87  PRIMARYID_SMPTEST431 = 11,
88  PRIMARYID_SMPTEST432 = 12,
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.
95  RANGEID_INVALID = 0,
96  // Limited Rec. 709 color range with RGB values ranging from 16 to 235.
97  RANGEID_LIMITED = 1,
98  // Full RGB color range with RGB valees from 0 to 255.
99  RANGEID_FULL = 2,
100  // Range is defined by MatrixCoefficients/TransferCharacteristics.
101  RANGEID_DERIVED = 3,
102  };
103 
104  enum MatrixID {
105  // The indices are equal to the values specified in T-REC H.273 Table 4.
106  MATRIXID_RGB = 0,
107  MATRIXID_BT709 = 1,
108  MATRIXID_UNSPECIFIED = 2,
109  MATRIXID_FCC = 4,
110  MATRIXID_BT470BG = 5,
111  MATRIXID_SMPTE170M = 6,
112  MATRIXID_SMPTE240M = 7,
113  MATRIXID_YCOCG = 8,
114  MATRIXID_BT2020_NCL = 9,
115  MATRIXID_BT2020_CL = 10,
116  MATRIXID_SMPTE2085 = 11,
117  MATRIXID_CDNCLS = 12,
118  MATRIXID_CDCLS = 13,
119  MATRIXID_BT2100_ICTCP = 14,
120  };
121 
122  enum TransferID {
123  // The indices are equal to the values specified in T-REC H.273 Table 3.
124  TRANSFERID_BT709 = 1,
125  TRANSFERID_UNSPECIFIED = 2,
126  TRANSFERID_GAMMA22 = 4,
127  TRANSFERID_GAMMA28 = 5,
128  TRANSFERID_SMPTE170M = 6,
129  TRANSFERID_SMPTE240M = 7,
130  TRANSFERID_LINEAR = 8,
131  TRANSFERID_LOG = 9,
132  TRANSFERID_LOG_SQRT = 10,
133  TRANSFERID_IEC61966_2_4 = 11,
134  TRANSFERID_BT1361_ECG = 12,
135  TRANSFERID_IEC61966_2_1 = 13,
136  TRANSFERID_BT2020_10 = 14,
137  TRANSFERID_BT2020_12 = 15,
138  TRANSFERID_SMPTEST2084 = 16,
139  TRANSFERID_SMPTEST428 = 17,
140  TRANSFERID_ARIB_STD_B67 = 18,
141  };
142 
143  PrimaryID primaries;
144  TransferID transfer;
145  MatrixID matrix;
146  RangeID range;
147 
148  ColorSpace()
149  : primaries(PRIMARYID_UNSPECIFIED), transfer(TRANSFERID_UNSPECIFIED),
150  matrix(MATRIXID_UNSPECIFIED), range(RANGEID_INVALID) {}
151 };
152 
158  OPTIONAL_ENUM_CLASS Type {
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  };
166  Type type;
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;
175  ColorSpace color_space;
176  int64_t timestamp_ms; // Capture time in milli-seconds
177 };
178 
180  PaddedRawPixelBuffer padded_pixels; // All platform
181 };
182 
183 OPTIONAL_ENUM_CLASS VideoFrameMetaDataType {
184  kAlphaChannel,
185  // Add other types afterwards
186 };
187 
188 struct AlphaChannel {
189  uint8_t* data;
190  int size;
191 };
192 
198  public:
205  virtual int getVideoFrameData(VideoFrameData& data) const = 0;
206 
216  virtual int fillVideoFrameData(const VideoFrameData& data) = 0;
217 
227  virtual int getVideoFrameMetaData(VideoFrameMetaDataType type, void* data) = 0;
228 
238  virtual int fillVideoFrameMetaData(VideoFrameMetaDataType type, const void* data) = 0;
239 
240  protected:
241  ~IVideoFrame() {}
242 };
243 
245  public:
253  const VideoFrameData& data, const VideoFrameMetaDataType* metatypes = NULL, int count = 0) = 0;
254 
255  protected:
256  virtual ~IVideoFrameMemoryPool() {}
257 };
258 
259 } // namespace rtc
260 } // 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:188
agora::rtc::VideoFrameData
Definition: NGIAgoraVideoFrame.h:157
agora::rtc::IVideoFrame::getVideoFrameMetaData
virtual int getVideoFrameMetaData(VideoFrameMetaDataType type, void *data)=0
agora::rtc::IVideoFrameMemoryPool
Definition: NGIAgoraVideoFrame.h:244
agora::rtc::IVideoFrame::getVideoFrameData
virtual int getVideoFrameData(VideoFrameData &data) const =0
agora::rtc::ColorSpace
Definition: NGIAgoraVideoFrame.h:75
agora::rtc::PaddedRawPixelBuffer
Definition: NGIAgoraVideoFrame.h:66
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:179
agora::rtc::RawPixelBuffer
Definition: NGIAgoraVideoFrame.h:50
agora::rtc::IVideoFrame::fillVideoFrameData
virtual int fillVideoFrameData(const VideoFrameData &data)=0
agora::rtc::IVideoFrame
Definition: NGIAgoraVideoFrame.h:197