• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <map>
2 
3 #include <kms++/pixelformats.h>
4 
5 using namespace std;
6 
7 namespace kms
8 {
9 static const map<PixelFormat, PixelFormatInfo> format_info_array = {
10 	/* YUV packed */
11 	{ PixelFormat::UYVY, {
12 				     PixelColorType::YUV,
13 				     1,
14 				     { { 16, 2, 1 } },
15 			     } },
16 	{ PixelFormat::YUYV, {
17 				     PixelColorType::YUV,
18 				     1,
19 				     { { 16, 2, 1 } },
20 			     } },
21 	{ PixelFormat::YVYU, {
22 				     PixelColorType::YUV,
23 				     1,
24 				     { { 16, 2, 1 } },
25 			     } },
26 	{ PixelFormat::VYUY, {
27 				     PixelColorType::YUV,
28 				     1,
29 				     { { 16, 2, 1 } },
30 			     } },
31 	{ PixelFormat::Y210, {
32 				     PixelColorType::YUV,
33 				     1,
34 				     { { 32, 2, 1 } },
35 			     } },
36 	{ PixelFormat::Y212, {
37 				     PixelColorType::YUV,
38 				     1,
39 				     { { 32, 2, 1 } },
40 			     } },
41 	{ PixelFormat::Y216, {
42 				     PixelColorType::YUV,
43 				     1,
44 				     { { 32, 2, 1 } },
45 			     } },
46 
47 	/* YUV semi-planar */
48 	{ PixelFormat::NV12, {
49 				     PixelColorType::YUV,
50 				     2,
51 				     { { 8, 1, 1 }, { 8, 2, 2 } },
52 			     } },
53 	{ PixelFormat::NV21, {
54 				     PixelColorType::YUV,
55 				     2,
56 				     { { 8, 1, 1 }, { 8, 2, 2 } },
57 			     } },
58 	{ PixelFormat::NV16, {
59 				     PixelColorType::YUV,
60 				     2,
61 				     { { 8, 1, 1 }, { 8, 2, 1 } },
62 			     } },
63 	{ PixelFormat::NV61, {
64 				     PixelColorType::YUV,
65 				     2,
66 				     { { 8, 1, 1 }, { 8, 2, 1 } },
67 			     } },
68 	/* YUV planar */
69 	{ PixelFormat::YUV420, {
70 				       PixelColorType::YUV,
71 				       3,
72 				       { { 8, 1, 1 }, { 8, 2, 2 }, { 8, 2, 2 } },
73 			       } },
74 	{ PixelFormat::YVU420, {
75 				       PixelColorType::YUV,
76 				       3,
77 				       { { 8, 1, 1 }, { 8, 2, 2 }, { 8, 2, 2 } },
78 			       } },
79 	{ PixelFormat::YUV422, {
80 				       PixelColorType::YUV,
81 				       3,
82 				       { { 8, 1, 1 }, { 8, 2, 1 }, { 8, 2, 1 } },
83 			       } },
84 	{ PixelFormat::YVU422, {
85 				       PixelColorType::YUV,
86 				       3,
87 				       { { 8, 1, 1 }, { 8, 2, 1 }, { 8, 2, 1 } },
88 			       } },
89 	{ PixelFormat::YUV444, {
90 				       PixelColorType::YUV,
91 				       3,
92 				       { { 8, 1, 1 }, { 8, 1, 1 }, { 8, 1, 1 } },
93 			       } },
94 	{ PixelFormat::YVU444, {
95 				       PixelColorType::YUV,
96 				       3,
97 				       { { 8, 1, 1 }, { 8, 1, 1 }, { 8, 1, 1 } },
98 			       } },
99 	/* RGB8 */
100 	{ PixelFormat::RGB332, {
101 				       PixelColorType::RGB,
102 				       1,
103 				       { { 8, 1, 1 } },
104 			       } },
105 	/* RGB16 */
106 	{ PixelFormat::RGB565, {
107 				       PixelColorType::RGB,
108 				       1,
109 				       { { 16, 1, 1 } },
110 			       } },
111 	{ PixelFormat::BGR565, {
112 				       PixelColorType::RGB,
113 				       1,
114 				       { { 16, 1, 1 } },
115 			       } },
116 	{ PixelFormat::XRGB4444, {
117 					 PixelColorType::RGB,
118 					 1,
119 					 { { 16, 1, 1 } },
120 				 } },
121 	{ PixelFormat::XRGB1555, {
122 					 PixelColorType::RGB,
123 					 1,
124 					 { { 16, 1, 1 } },
125 				 } },
126 	{ PixelFormat::ARGB4444, {
127 					 PixelColorType::RGB,
128 					 1,
129 					 { { 16, 1, 1 } },
130 				 } },
131 	{ PixelFormat::ARGB1555, {
132 					 PixelColorType::RGB,
133 					 1,
134 					 { { 16, 1, 1 } },
135 				 } },
136 	/* RGB24 */
137 	{ PixelFormat::RGB888, {
138 				       PixelColorType::RGB,
139 				       1,
140 				       { { 24, 1, 1 } },
141 			       } },
142 	{ PixelFormat::BGR888, {
143 				       PixelColorType::RGB,
144 				       1,
145 				       { { 24, 1, 1 } },
146 			       } },
147 	/* RGB32 */
148 	{ PixelFormat::XRGB8888, {
149 					 PixelColorType::RGB,
150 					 1,
151 					 { { 32, 1, 1 } },
152 				 } },
153 	{ PixelFormat::XBGR8888, {
154 					 PixelColorType::RGB,
155 					 1,
156 					 { { 32, 1, 1 } },
157 				 } },
158 	{ PixelFormat::RGBX8888, {
159 					 PixelColorType::RGB,
160 					 1,
161 					 { { 32, 1, 1 } },
162 				 } },
163 	{ PixelFormat::BGRX8888, {
164 					 PixelColorType::RGB,
165 					 1,
166 					 { { 32, 1, 1 } },
167 				 } },
168 
169 	{ PixelFormat::ARGB8888, {
170 					 PixelColorType::RGB,
171 					 1,
172 					 { { 32, 1, 1 } },
173 				 } },
174 	{ PixelFormat::ABGR8888, {
175 					 PixelColorType::RGB,
176 					 1,
177 					 { { 32, 1, 1 } },
178 				 } },
179 	{ PixelFormat::RGBA8888, {
180 					 PixelColorType::RGB,
181 					 1,
182 					 { { 32, 1, 1 } },
183 				 } },
184 	{ PixelFormat::BGRA8888, {
185 					 PixelColorType::RGB,
186 					 1,
187 					 { { 32, 1, 1 } },
188 				 } },
189 
190 	{ PixelFormat::XRGB2101010, {
191 					    PixelColorType::RGB,
192 					    1,
193 					    { { 32, 1, 1 } },
194 				    } },
195 	{ PixelFormat::XBGR2101010, {
196 					    PixelColorType::RGB,
197 					    1,
198 					    { { 32, 1, 1 } },
199 				    } },
200 	{ PixelFormat::RGBX1010102, {
201 					    PixelColorType::RGB,
202 					    1,
203 					    { { 32, 1, 1 } },
204 				    } },
205 	{ PixelFormat::BGRX1010102, {
206 					    PixelColorType::RGB,
207 					    1,
208 					    { { 32, 1, 1 } },
209 				    } },
210 
211 	{ PixelFormat::ARGB2101010, {
212 					    PixelColorType::RGB,
213 					    1,
214 					    { { 32, 1, 1 } },
215 				    } },
216 	{ PixelFormat::ABGR2101010, {
217 					    PixelColorType::RGB,
218 					    1,
219 					    { { 32, 1, 1 } },
220 				    } },
221 	{ PixelFormat::RGBA1010102, {
222 					    PixelColorType::RGB,
223 					    1,
224 					    { { 32, 1, 1 } },
225 				    } },
226 	{ PixelFormat::BGRA1010102, {
227 					    PixelColorType::RGB,
228 					    1,
229 					    { { 32, 1, 1 } },
230 				    } },
231 };
232 
get_pixel_format_info(PixelFormat format)233 const struct PixelFormatInfo& get_pixel_format_info(PixelFormat format)
234 {
235 	if (!format_info_array.count(format))
236 		throw invalid_argument("get_pixel_format_info: Unsupported pixelformat");
237 
238 	return format_info_array.at(format);
239 }
240 
241 } // namespace kms
242