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  kGlTexture2D,
32  kGlTextureOes,
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 
66 struct ColorSpace {
67  enum PrimaryID {
68  // The indices are equal to the values specified in T-REC H.273 Table 2.
69  PRIMARYID_BT709 = 1,
70  PRIMARYID_UNSPECIFIED = 2,
71  PRIMARYID_BT470M = 4,
72  PRIMARYID_BT470BG = 5,
73  PRIMARYID_SMPTE170M = 6, // Identical to BT601
74  PRIMARYID_SMPTE240M = 7,
75  PRIMARYID_FILM = 8,
76  PRIMARYID_BT2020 = 9,
77  PRIMARYID_SMPTEST428 = 10,
78  PRIMARYID_SMPTEST431 = 11,
79  PRIMARYID_SMPTEST432 = 12,
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.
86  RANGEID_INVALID = 0,
87  // Limited Rec. 709 color range with RGB values ranging from 16 to 235.
88  RANGEID_LIMITED = 1,
89  // Full RGB color range with RGB valees from 0 to 255.
90  RANGEID_FULL = 2,
91  // Range is defined by MatrixCoefficients/TransferCharacteristics.
92  RANGEID_DERIVED = 3,
93  };
94 
95  enum MatrixID {
96  // The indices are equal to the values specified in T-REC H.273 Table 4.
97  MATRIXID_RGB = 0,
98  MATRIXID_BT709 = 1,
99  MATRIXID_UNSPECIFIED = 2,
100  MATRIXID_FCC = 4,
101  MATRIXID_BT470BG = 5,
102  MATRIXID_SMPTE170M = 6,
103  MATRIXID_SMPTE240M = 7,
104  MATRIXID_YCOCG = 8,
105  MATRIXID_BT2020_NCL = 9,
106  MATRIXID_BT2020_CL = 10,
107  MATRIXID_SMPTE2085 = 11,
108  MATRIXID_CDNCLS = 12,
109  MATRIXID_CDCLS = 13,
110  MATRIXID_BT2100_ICTCP = 14,
111  };
112 
113  enum TransferID {
114  // The indices are equal to the values specified in T-REC H.273 Table 3.
115  TRANSFERID_BT709 = 1,
116  TRANSFERID_UNSPECIFIED = 2,
117  TRANSFERID_GAMMA22 = 4,
118  TRANSFERID_GAMMA28 = 5,
119  TRANSFERID_SMPTE170M = 6,
120  TRANSFERID_SMPTE240M = 7,
121  TRANSFERID_LINEAR = 8,
122  TRANSFERID_LOG = 9,
123  TRANSFERID_LOG_SQRT = 10,
124  TRANSFERID_IEC61966_2_4 = 11,
125  TRANSFERID_BT1361_ECG = 12,
126  TRANSFERID_IEC61966_2_1 = 13,
127  TRANSFERID_BT2020_10 = 14,
128  TRANSFERID_BT2020_12 = 15,
129  TRANSFERID_SMPTEST2084 = 16,
130  TRANSFERID_SMPTEST428 = 17,
131  TRANSFERID_ARIB_STD_B67 = 18,
132  };
133 
134  PrimaryID primaries;
135  TransferID transfer;
136  MatrixID matrix;
137  RangeID range;
138 
139  ColorSpace()
140  : primaries(PRIMARYID_UNSPECIFIED), transfer(TRANSFERID_UNSPECIFIED),
141  matrix(MATRIXID_UNSPECIFIED), range(RANGEID_INVALID) {}
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  };
154  Type type;
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;
163  ColorSpace color_space;
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:
225  ~IVideoFrame() {}
226 };
227 
229  public:
237  const VideoFrameData& data, const VideoFrameMetaDataType* metatypes = NULL, int count = 0) = 0;
238 
239  protected:
240  virtual ~IVideoFrameMemoryPool() {}
241 };
242 
243 } // namespace rtc
244 } // 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:172
agora::rtc::VideoFrameData
Definition: NGIAgoraVideoFrame.h:148
agora::rtc::IVideoFrame::getVideoFrameMetaData
virtual int getVideoFrameMetaData(VideoFrameMetaDataType type, void *data)=0
agora::rtc::IVideoFrameMemoryPool
Definition: NGIAgoraVideoFrame.h:228
agora::rtc::IVideoFrame::getVideoFrameData
virtual int getVideoFrameData(VideoFrameData &data) const =0
agora::rtc::ColorSpace
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::RawPixelBuffer
Definition: NGIAgoraVideoFrame.h:50
agora::rtc::IVideoFrame::fillVideoFrameData
virtual int fillVideoFrameData(const VideoFrameData &data)=0
agora::rtc::IVideoFrame
Definition: NGIAgoraVideoFrame.h:181