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